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

<b>                         /* толщиной 1 пиксел */</b>

<b>border: 3рх dotted red;  /* рамка рисуется красной пунктирной линией */</b>

<b>                         /* толщиной 3 пиксела */</b>

Толщину, стиль и цвет рамки можно задать с помощью отдельных CSS-свойств, а также отдельно для каждой из сторон элемента. Например, чтобы нарисовать линию под элементом, достаточно просто определить свойство

<b>border-bottom</b>
. Можно даже задать толщину, стиль и цвет рамки только для одной стороны элемента с помощью таких свойств, как
<b>border-top-width</b>
и
<b>border-left-color</b>
.

В CSS3 можно закруглить все углы рамки, определив свойство

<b>border-radius</b>
, или отдельные углы, задействовав более конкретные свойства. Например:

<b>border-top-right-radius: 50рх;</b>

Свойства

<b>margin</b>
и
<b>padding</b>
задают ширину пустого пространства вокруг элемента. Отличие (очень важное) заключается в том, что свойство
<b>margin</b>
задает ширину пустого пространства снаружи от рамки, между рамкой и окружающими элементами, а свойство
<b>padding</b>
- внутри рамки, между рамкой и содержимым элемента. Поля (
<b>margin</b>
) позволяют визуально отделить элемент (возможно, окруженный рамкой) от соседних элементов в нормальном потоке вывода документа. Отступы (
<b>padding</b>
) позволяют визуально отделить содержимое элемента от его рамки. Если элемент не имеет рамки, определять ширину отступов обычно не требуется. Если элемент позиционируется динамически, он выпадает из нормального потока вывода документа, и для него не имеет смысла определять ширину полей.

Поля и отступы элемента задаются с помощью свойств

<b>margin</b>
и
<b>padding</b>
:

<b>margin: 5рх; padding: 5рх;</b>

Можно также определить поля и отступы для каждой из сторон элемента в отдельности:

<b>margin-left: 25рх; padding-bottom: 5рх;</b>

Также можно задать величины полей и отступов для каждой из четырех сторон элемента с помощью свойств

<b>margin</b>
и
<b>padding</b>
, указав первым значение для верхней стороны и далее по часовой стрелке: сверху, справа, снизу и слева. Например, в следующем фрагменте приводятся два эквивалентных способа задания различных значений отступов для каждой из четырех сторон элемента:

<b>padding: 1рх 2рх 3рх 4рх;</b>

<b>/* Предыдущая строка эквивалентна четырем следующим. */</b>

<b>padding-top: 1рх;</b>

<b>padding-right: 2рх;</b>

<b>padding-bottom: 3рх;</b>

<b>padding-left: 4рх;</b>

Порядок работы с атрибутом

<b>margin</b>
ничем не отличается.

16.2.3. Блочная модель и детали позиционирования в CSS

Свойства стиля

<b>margin, border</b>
и
<b>padding</b>
, описанные выше, не относятся к числу свойств, которыми приходится часто управлять в сценариях. Причина, по которой они были описаны здесь, состоит в том, что поля, рамки и отступы являются частью блочной модели CSS, знать которую необходимо, чтобы до конца разобраться, как действуют CSS-свойства позиционирования.

Рис. 16.2 иллюстрирует блочную модель CSS и наглядно показывает, какой смысл имеют свойства

<b>top, left, width</b>
и
<b>height</b>
для элементов с рамками и отступами.

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

На рис. 16.2 показан абсолютно позиционируемый элемент, вложенный в позиционируемый элемент-контейнер. Оба элемента, контейнер и вложенный в него, имеют рамки и отступы, и на рисунке показаны CSS-свойства, определяющие ширину отступов и толщину рамок для каждой стороны элемента-контейнера. Обратите внимание, что здесь не показаны свойства

<b>margin</b>
: поля не используются при отображении абсолютно позиционируемых элементов.

Рис. 16.2 содержит также другую важную информацию. Во-первых, свойства

<b>width</b>
и
<b>height</b>
задают только размеры области содержимого элемента - они не включают дополнительное пространство, занимаемое отступами или рамками (и полями) элементов. Чтобы определить полный размер, занимаемый на экране элементом с рамкой, необходимо прибавить к ширине элемента ширину левого и правого отступов и толщину левой и правой рамок, а к высоте элемента необходимо прибавить ширину верхнего и нижнего отступов и толщину верхней и нижней рамок.

Во-вторых, свойства

<b>left</b>
и
<b>top</b>
задают расстояние от внутреннего края рамки контейнера до внешнего края рамки позиционируемого элемента. Эти свойства определяют расстояние не от левого верхнего угла области содержимого контейнера, а от левого верхнего угла области, занимаемой отступами контейнера. Аналогично свойства
<b>right</b>
и
<b>bottom</b>
определяют расстояние от правого нижнего угла области, занимаемой отступами.

Для полной ясности рассмотрим несложный пример. Предположим, что у вас есть динамически позиционируемый элемент, вокруг содержимого которого имеются отступы размером 10 пикселов, а вокруг них - рамка толщиной 5 пикселов. Теперь предположим, что вы динамически позиционируете дочерний элемент внутри этого контейнера. Если установить свойство

<b>left</b>
дочернего элемента равным «0рх», обнаружится, что левый край дочернего элемента будет находиться непосредственно у внутреннего края рамки контейнера. При этом значении свойства дочерний элемент перекроет отступы контейнера, хотя предполагается, что они остаются пустыми (т. к. для этого и предназначены отступы). Чтобы поместить дочерний элемент в левый верхний угол области содержимого контейнера, необходимо присвоить свойствам
<b>left</b>
и
<b>top</b>
значение «10рх».