JavaScript. Подробное руководство, 6-е издание, стр. 236

16.2.3.1. Модель border-box и свойство box-sizing

Стандартная блочная модель CSS определяет, что свойства стиля

<b>width</b>
и
<b>height</b>
задают размер области содержимого элемента и не учитывают ширину отступов и толщину рамки. Эту модель можно было бы назвать «content-box». Эта модель имеет исключения, наблюдаемые в старых версиях IE и в новых версиях CSS. При отображении страниц в IE версии ниже 6 или в IE6, 7 или 8 в «режиме совместимости» (когда страница не имеет объявления <!D0CTYPE> или это объявление недостаточно строгое), свойства
<b>width</b>
и
<b>height</b>
включают ширину отступов и толщину рамок.

Поведение IE ошибочно, но нестандартная блочная модель, реализованная в IE, иногда бывает весьма удобна. Учитывая это, в стандарт CSS3 было добавлено свойство

<b>box-sizing</b>
. По умолчанию оно имеет значение
<b>content-box</b>
, которое указывает, что используется стандартная блочная модель, описанная выше. Если вместо него указать значение
<b>box-sizing: border-box</b>
, броузер будет использовать блочную модель IE и свойства
<b>width</b>
и
<b>height</b>
будут включать рамки и отступы. Модель
<b>border-box</b>
особенно удобно использовать, когда желательно задать общий размер элемента в процентах, а ширину отступов и толщину рамки - в пикселах:

<b>&lt;div style=&quot;box-sizing:border-box; width: 50%;</b>

<b>            padding: 10px; border: solid black 2px;&quot;&quot;&gt;</b>

Свойство

<b>box-sizing</b>
поддерживается всеми текущими броузерами, но пока не во всех оно реализовано без префикса. В Chrome и Safari свойство имеет имя
<b>-webkit-box-sizing</b>
. В Firefox -
<b>-moz-box-sizing</b>
. В Opera и IE8 (и выше) свойство имеет имя
<b>box-sizing</b>
без префикса.

Будущей альтернативой модели

<b>border-box</b>
, предусматриваемой стандартом CSS3, являются вычисляемые значения свойств:

<b>&lt;div style=&quot;width: calc(50%-12рх); padding: 10рх; border: solid black 2px;&quot;&gt;</b>

Возможность вычисления значений CSS-свойств с применением calc() поддерживается в IE9 и в Firefox 4 (как -moz-calc()).

16.2.4. Отображение и видимость элементов

Управлять видимостью элемента документа позволяют два CSS-свойства:

<b>visibility</b>
и
<b>display</b>
. Пользоваться свойством
<b>visibility</b>
очень просто: если оно имеет значение
<b>hidden</b>
, то элемент не отображается, если
<b>visible</b>
, - отображается. Свойство
<b>display</b>
является более универсальным и служит для задания варианта отображения элемента, определяя, блочный это элемент, встраиваемый, списочный или какой-нибудь другой. Если же свойство
<b>display</b>
имеет значение
<b>none</b>
, то элемент вообще не отображается и для него даже не выделяется место на странице.

Различие между свойствами стиля

<b>visibility</b>
и
<b>display</b>
имеет отношение к их воздействию на статически или относительно позиционируемые элементы. Для элемента, расположенного в нормальном потоке вывода документа, установка свойства
<b>visibility</b>
в значение
<b>hidden</b>
делает элемент невидимым, но резервирует для него место в документе. Такой элемент может повторно скрываться и отображаться без изменения компоновки документа. Однако если свойство
<b>display</b>
элемента установлено в значение попе, то место в документе для него не выделяется; элементы с обеих сторон от него смыкаются, как будто его вообще не существует. Свойство
<b>display</b>
может пригодиться, например, при создании разворачивающихся и сворачивающихся списков.

Обратите внимание, что нет особого смысла использовать атрибуты

<b>visibility</b>
и
<b>display</b>
, чтобы сделать элемент невидимым, если вы не собираетесь динамически устанавливать их в сценарии на языке JavaScript, чтобы в какой-то момент сделать его снова видимым! Как это делается, будет показано далее в этой главе.

16.2.5. Цвет, прозрачность и полупрозрачность

Цвет текста, содержащегося в элементе документа, можно задать с помощью CSS-свойства

<b>color</b>
. Цвет фона любого элемента - с помощью свойства
<b>background-color</b>
. Выше мы видели, что цвет рамки элемента можно задать с помощью свойства
<b>border-color</b>
или сокращенной формы его написания
<b>border</b>
.

При обсуждении рамок мы рассматривали пример, в котором цвет рамки задавался указанием названий наиболее распространенных цветов, таких как «red» (красный) и «black» (черный). Стандарт CSS поддерживает множество таких обозначений цветов на английском языке, но имеется более универсальный способ определения цветов, который заключается в использовании шестнадцатеричных цифр, определяющих красную, зеленую и синюю составляющие цвета. Значения каждой из составляющих могут задаваться одной или двумя цифрами. Например:

<b>#000000 /*черный */ </b>

<b>#fff /*белый */ </b>

<b>#f00 /*ярко-красный */ </b>

<b>#404080 /*ненасыщенный темно-синий */ </b>

<b>#ccc /*светло-серый */</b>

Стандарт CSS3 дополнительно определяет возможность определения цвета в формате RGBA (значения красной, зеленой и синей составляющих плюс альфа-значение, определяющее степень прозрачности). Формат RGBA поддерживается всеми современными броузерами, кроме IE; ожидается, однако, что его поддержка будет включена в IE9. CSS3 также определяет поддержку форматов HSL (hue-saturation-value - тон-насыщенность-яркость) и HSLA. И снова эти форматы поддерживаются броузерами Firefox, Safari и Chrome, но не поддерживаются IE.