Для начала я бы хотел поговорить об использовании свойство
, которое на первый взгляд кажется подобным свойству
1 outline.
1 border
Однако у свойства
есть существенное отличие, которое приобретает очень важное значение при создании разметки. Свойство 1
outline
может быть полезным в процессе создания разметки в качестве удобного средства диагностики.1
outline
Во время создания разметки можно визуально обозначить местоположение всех ее частей.
Например, таким образом:
Вы можете решить, что точно так можно сделать и с помощью свойства
, но в действительности это не так. Причина заключается в том, что границы (1
border
) нарушают разметку. А свойство 1
border
не нарушает ее.1
outline
Вот что я имею ввиду: предположим, у вас есть три колонки
‘ов, которые должны располагаться внутри контейнера-родителя 1
div
с шириной 960px. (Если вам не нравятся пиксели, то можете применить для этой же цели 1
div
, проценты или любую другую единицу измерения).1
em
Для всех трех
‘ов-потомков устанавливаем правила 1
div
и попытаемся визуально обозначить местоположение в разметке каждого из блоков.1
float: left; width: 33.33%
Если ко всем трем блокам вы добавите свойство
, то последний из этих трех опустится вниз и расположиться под двумя первыми:1
border: 1px solid #ff0000;
Это произошло потому, что каждый из трех блоков
имеет ширину 320px; помимо этого справа и слева к каждому блоку добавлена граница толщиной в 1
div
, что делает ширину блока равной, как минимум, 1
1px
.1
322px
Умножте это значение ширины на 3 (количество блоков-колонок) и в результате получиться общая ширина 966px, что явно больше ширины блока-родителя 960px. Результат для браузера - сместить последний блок вниз!
Именно по этой причине свойство
нарушает разметку. Свойство 1
border
, с другой стороны, не нарушает ее. С помощью него вокруг элементов рисуется линия; к примеру, в нашем случае все три блока 1
outline
со свойством 1
div
разместятся друг рядом с другом внутри блока-родителя.1
outline: 1px solid #ff0000;
Не имеет значения, какой толщины вы сделаете
, блоки 1
outline
никогда не сдвинуться и не нарушат разметку (это касается не только блока 1
div
, а любого элемента страницы). Линии сделают перекрытие друг друга, как показано на рисунке ниже:1
div
Сразу становится ясно преимущество использования
при создании разметки. Если в процессе ее создания вам кажется, что что-то идет не так, вы легко можете “нарисовать” границы интересующего вас элемента, не опасаясь при этом нарушить разметку.1
outline
Другое отличие
от 1
outline
заключается в том, что 1
border
“рисуется” обязательно вокруг всего элемента, по всем четырем его сторонам.1
outline
Другими словами, вы не можете просто создать левый
или же правый 1
outline
, как вы это обычно делаете при работе с границами 1
outline
. Может существовать только граница 1
border
вокруг всех четырех сторон элемента, и не может быть по другому.1
outline
По этой же причине невозможно изменять цвет, ширину или стиль какой-либо одной из сторон элемента. Если необходимо создать границу
, то она будет создана таковой вокруг всех сторон элемента.1
outline: 2px dashed yellow
Заметьте, что элемент может одновременно иметь оба свойства
и 1
border
. В этом случае граница 1
outline
будет отрисована браузером снаружи от границы 1
outline
, так что внутренний край 1
border
будет соприкасаться с внешним краем границы 1
outline
:1
border
Если элемент также имеет
, то эти поля рисуются вокруг границ 1
margin
; но при этом 1
outline
не изменяют поля 1
outline
и не замещают их.1
margin
Автор статьи: Eric Meyer - “Smashing CSS Professional Techniques for Modern Layout”