В этой статье есть несколько проблем. Помогите улучшить ее или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения )
|
Модуль CSS Box Model Уровень 3 | |
Имя на родине | Модуль CSS Box Model Уровень 3 |
---|---|
Статус | Обзор рекомендаций кандидатов W3C |
Последняя версия | Уровень 3 22 декабря 2020 г. [1] (2020-12-22) |
Организация | Консорциум Всемирной паутины |
Комитет | Рабочая группа CSS |
Редакторы |
|
Базовые стандарты | CSS |
Домен | CSS |
Веб-сайт | www.w3.org/TR/css-box-3/ |
Cascading Style Sheets |
---|
Concepts |
Philosophies |
Tools |
Comparisons |
В веб-разработке блочная модель CSS относится к тому, как элементы HTML моделируются в браузерных движках и как размеры этих элементов HTML выводятся из свойств CSS . Это фундаментальная концепция для композиции веб-страниц HTML . [3] Руководящие принципы блочной модели описаны веб-стандартами Консорциума Всемирной паутины (W3C), в частности, рабочей группой CSS. На протяжении большей части конца 1990-х и начала 2000-х годов в основных браузерах существовали нестандартные реализации блочной модели. С появлением CSS2 в 1998 году, который представил это box-sizing
свойство, проблема в основном была решена.
Спецификация каскадных таблиц стилей (CSS) описывает, как элементы веб-страниц отображаются графическими браузерами. Раздел 4 спецификации CSS1 определяет «модель форматирования», которая задает блочным элементам, таким как p
и blockquote
, ширину и высоту, а также три уровня окружающих их полей: отступы, границы и поля. [4] Хотя спецификация никогда не использует термин «блочная модель» явно, этот термин стал широко использоваться веб-разработчиками и поставщиками веб-браузеров.
Все элементы HTML можно считать "коробками", включая div
тег, p
тег или a
тег. Каждый из этих блоков имеет пять изменяемых измерений:
height
и опишите размеры width
фактического содержимого коробки (текст, изображения, ...)padding
пространство между этим содержимым и границей поляborder
любая линия (сплошная, пунктирная, штриховая...), окружающая рамку, если она естьmargin
пространство вокруг границыСогласно спецификации CSS1, выпущенной W3C в 1996 году и пересмотренной в 1999 году, когда ширина или высота явно указаны для любого блочного элемента, они должны определять только ширину или высоту видимого элемента, а отступы, границы и поля применяются позже. [4] [5] До CSS3 эта блочная модель была известна как блочная модель W3C , в CSS3 она известна как content-box
.
Общая ширина коробки, таким образом, равна left-margin
+ left-border
+ left-padding
+ width
+ right-padding
+ right-border
+ right-margin
. Аналогично, общая высота коробки равна top-margin
+ top-border
+ top-padding
+ height
+ bottom-padding
+ bottom-border
+ bottom-margin
.
Например, следующий CSS-код
. myClass { ширина : 200 пикселей ; высота : 100 пикселей ; отступ : 10 пикселей ; граница : сплошная 10 пикселей черного цвета ; поле : 10 пикселей ; }
будет указывать размеры коробки каждого блока, принадлежащего 'myClass'. Более того, каждая такая коробка будет иметь общую высоту 160 пикселей и ширину 260 пикселей.
CSS3 ввел в стандарт блочную модель Internet Explorer , известную как border-box
. [6]
До HTML 4 и CSS очень немногие элементы HTML поддерживали и границу, и отступ, поэтому определение ширины и высоты элемента не было очень спорным. Однако оно варьировалось в зависимости от элемента. Атрибут ширины HTML таблицы определял ширину таблицы, включая ее границу. [7] С другой стороны, атрибут ширины HTML изображения определял ширину самого изображения (внутри любой границы). [8] Единственным элементом, который поддерживал отступ в те ранние дни, была ячейка таблицы. Ширина ячейки определялась как «предлагаемая ширина для содержимого ячейки в пикселях, исключая отступ ячейки». [9]
В 1996 году CSS [10] ввел поля, границы и отступы для многих других элементов. Он принял определение ширины в отношении содержимого, границ, полей и отступов, аналогичное определению для ячейки таблицы. [11] С тех пор это стало известно как модель W3C box .
В то время очень немногие производители браузеров реализовали блочную модель W3C в точности. Два основных браузера того времени, Netscape 4.0 и Internet Explorer 4.0, оба определяли ширину и высоту как расстояние от границы до границы. [12] Это называлось традиционной [13] или блочной моделью Internet Explorer . [14]
Internet Explorer в « режиме совместимости » включает содержимое, отступы и границы в пределах указанной ширины или высоты; это приводит к более узкому или короткому отображению блока, чем это было бы при стандартном поведении. [15]
Поведение блочной модели Internet Explorer часто считалось ошибкой из-за способа, которым более ранние версии Internet Explorer обрабатывали блочную модель или размер элементов на веб-странице, что отличалось от стандартного способа, рекомендованного W3C для языка каскадных таблиц стилей . [16] [17] Начиная с Internet Explorer 6 , браузер поддерживает альтернативный режим рендеринга (называемый «стандартно-совместимым режимом»), который решает это несоответствие. Однако из соображений обратной совместимости все версии по-прежнему ведут себя обычным, нестандартным образом по умолчанию (см. режим совместимости ). Internet Explorer для Mac не подвержен этому нестандартному поведению.
Internet Explorer версии 6 и выше не подвержены этой ошибке, если страница содержит определенные объявления типов документов HTML . Эти версии поддерживают ошибочное поведение в режиме совместимости по причинам обратной совместимости. [18] Например, режим совместимости срабатывает:
Были разработаны различные обходные пути, чтобы заставить Internet Explorer версии 5 и более ранних отображать веб-страницы, используя блочную модель W3C. Эти обходные пути обычно используют несвязанные ошибки в обработке селектора CSS Internet Explorer, чтобы скрыть определенные правила от браузера. Самым известным из этих обходных путей является «взлом блочной модели», разработанный Тантеком Челиком , бывшим сотрудником Microsoft, который разработал эту идею во время работы над Internet Explorer для Macintosh. Он включает в себя указание объявления ширины для Internet Explorer для Windows, а затем переопределение его другим объявлением ширины для браузеров, совместимых с CSS. Это второе объявление скрыто от Internet Explorer для Windows, используя другие ошибки в том, как он анализирует правила CSS. Реализация этих «хаков» CSS была еще больше осложнена публичным выпуском Internet Explorer 7, в котором были исправлены некоторые проблемы, но не другие, что приводило к нежелательным результатам на страницах, использующих эти хаки. [18]
Хаки блочной модели оказались ненадежными, поскольку они полагаются на ошибки в поддержке CSS браузерами, которые могут быть исправлены в более поздних версиях. По этой причине некоторые веб-разработчики вместо этого рекомендовали либо избегать указания как ширины, так и отступа для одного и того же элемента, либо использовать условные комментарии и/или фильтры CSS, чтобы обойти ошибку блочной модели в старых версиях Internet Explorer. [14] [20]
Веб-дизайнер Дуг Боуман сказал, что оригинальная модель блока Internet Explorer представляет собой лучший, более логичный подход. [21] Питер-Пол Кох приводит пример физического блока, размеры которого всегда относятся к самому блоку, включая потенциальный отступ, но никогда к его содержимому. [13] Он говорит, что эта модель блока более полезна для графических дизайнеров, которые создают дизайн на основе видимой ширины блоков, а не ширины их содержимого. [22] Берни Циммерман говорит, что модель блока Internet Explorer ближе к определению размеров ячеек и отступов, используемых в модели таблицы HTML. [23]
W3C включил свойство "box-sizing" в CSS3. Когда box-sizing: border-box;
указано для элемента, любой отступ или граница элемента рисуются внутри указанной ширины и высоты, "как обычно реализуется устаревшими пользовательскими агентами HTML". [24] Internet Explorer 8 , браузеры WebKit , такие как Apple Safari 5.1+ и Google Chrome , браузеры на основе Gecko , такие как Mozilla Firefox 29.0 и более поздние версии, Opera 7.0 и более поздние версии, а также Konqueror 3.3.2 и более поздние версии, поддерживают свойство CSS3 box-sizing. Браузеры Gecko до 29.0 поддерживают ту же функциональность, используя -moz-box-sizing
свойство, специфичное для браузера. [25] border-box
— это блочная модель по умолчанию, используемая в фреймворке Bootstrap .
Ширина таблицы по умолчанию — это пространство между текущими левым и правым полями.
свойство можно использовать для эмуляции поведения браузеров, которые не поддерживают правильно спецификацию блочной модели CSS.