Метод №1. 4 элемента
div.Данный метод имеет наилучшую совместимость с браузерами. Для его реализации мы используем 4 элемента div.
<div id="left"></div>
<div id="right"></div>
<div id="top"></div>
<div id="bottom"></div>
Затем устанавливаем правила CSS. Некоторые свойства общие для всех элементов, некоторые - для пар верх/низ, право/лево, и есть уникальные для каждого элемента свойства. Код не содержит избыточных повторяющихся свойств.
top, #bottom, #left, #right {
background: #a5ebff;
position: fixed;
}
#left, #right {
top: 0; bottom: 0;
width: 15px;
}
#left { left: 0; }
#right { right: 0; }
#top, #bottom {
left: 0; right: 0;
height: 15px;
}
#top { top: 0; }
#bottom { bottom: 0; }
Все должно работать в IE 7 и во всех остальных нормальных браузерах. Поддержка для IE 6, который не поддерживает фиксированного позиционирования, заключается в условном комментарии в разделе head, который отключает обводку. Никаких угрызений совести и сожалений по данному поводу нет.
<!--[if lte IE 6]>
<style>#top, #bottom, #left, #right { display: none; }</style>
<![endif]-->
Также надо отгородиться от маленьких экранов (например, экранов мобильных устройств), которые не поддерживают фиксированное позиционирование:
@media
/* Маленькие экраны, включая iPhone */
only screen and (max-width: 500px),
/* iPad */
only screen and (min-device-width: 768px) and (max-device-width: 1024px)
{
#top, #bottom, #left, #right { display: none; }
}
Метод № 2. Псевдо элементы.
В вышеприведенном примере, нам нужно 4 уникальных элемента, чтобы добиться нужного эффекта. Но это четыре дополнительных элемента, которые встраиваются в семантику документа. В идеале таких элементов должно быть 0. Ну что ж, у нас есть два элемента, которые уже имеют размер равный размеру окна браузера - это и . Используем псевдо элементы :before и :after для них и получим нужные четыре!
Можно использовать те же свойства и значения, как и в методе №1, только с небольшими изменениями:
html:before, html:after, body:before, body:after {
content: "";
position: fixed;
background: #a5ebff;
/* и так далее... */
}
Хотя поддержка псевдо-элементов достаточно хороша, данный метод несколько хуже метода №1. Большой проблемой является ошибка браузеров WebKit, которая приводит к растеканию фона псевдо-элемента по всему экрану. Такие проблемы делают использование псевдо элементов преждевременным.
Но есть решение. И при этом удовлетворяющее требованиям семантичности!
В действительности нам не нужно четыре уникальных элемента, нужно только два. Верх и низ должны быть уникальны, поэтому они могут иметь фиксированное положение и не прокручиваться. А для правой и левой стороны обводки можно использовать border для элемента .
body:before, body:after {
content: "";
position: fixed;
background: #900;
left: 0;
right: 0;
height: 10px;
}
body:before {
top: 0;
}
body:after {
bottom: 0;
}
body {
border-left: 10px solid #900;
border-right: 10px solid #900;
}
Тот же эффект. Правда, с более слабой поддержкой, но зато весьма семантический.
Некоторые проблемы: Opera (Mac, 11.10) неправильно выполняет команды, расширяя размер элемента, чтобы он соответствовал тени снаружи (даже если тень установлена как внутренняя). В результате появляется ненужная полоска прокрутки, так как используется элемент body на всю ширину. Горизонтальная полоска прокрутки скрывается с помощью свойства overflow-x. Но, к сожалению, снизу остается небольшое пространство.
Решение работает в браузерах: IE 9+, Firefox 3.5+, Opera 10.5+, Chrome, Safari 3+