Как реализовать закругление углов не используя при этом изображения?
Создавая сайт, всем нам иногда приходит мысль как-то изменить внешний вид страниц, чтобы они не были такими уж прямоугольными. Но как это
сделать просто и удобно, да и притом не слишком нагружая сервер дополнительными запросами при загрузке страницы клиентом.
Сделать закруглённые углы можна двумя способами:
- используя только HTML и CSS
- или же использовать HTML, CSS и изображения.
Чтобы лучше разобраться, как говорится Who is Who(кто есть кто), я приведу в таблице ниже преимущества и недостатки этих двух способов:
HTML и CSS | HTML, CSS и изображения |
---|---|
|
|
И так, Вы посмотрели все за и против. Но, исходя из названия данной статьи, мы рассмотрим только первый способ закругления уголков, т.е.
основанный только на HTML и CSS. Второй способ будет рассмотрен в соответствующей статье.
Для начала определимся, с помощью какого тега будем делать скругляющие блоки. Не долго думая, воспользуемся тегом
b. Почему? Да потому, что он хоть и устаревший, но зато коротко пишется. А краткость написания, будет иметь для нас большое значение,
так как этот тег придется часто повторять. Вообще, правильней было бы использовать тег div, так как он по сути своей как раз и является
контейнером(блоком) и предназначен для использования в CSS.
Наконец-то, приступим к практике. Для начала создадим html-разметку, которая и будет у нас выглядеть как блок с закруглёнными углами.
HTML-код формы:
<!-- rounded - закруглённый, box - контейнер --> <div id="rounded-box"> <b class="r3"></b> <b class="r1"></b><b class="r1"></b> <div class="inner-box"> <h3>Я контейнер, у которого закругленные углы с радиусом R=3px</h3> </div> <b class="r1"></b><b class="r1"></b> <b class="r3"></b> </div>
CSS-код формы:
.r1, .r2, .r3 { display: block; height: 1px; } .r3 { margin: 0 3px; } .r2 { margin: 0 2px; } .r1 { margin: 0 1px; } /* указываем цвет фона и отступы */ #rounded-box .inner-box, #rounded-box b { background-color: #d3d3d3; } .inner-box { padding:1em; } .r1, .r2, .r3 {overflow: hidden; font-size:1px;} /* Для старых версий IE */ .r1, .r2, .r3 {overflow: hidden; font-size:1px;}
HTML-код разбирать не будем, думаю там ничего сложного. А вот к CSS присмотремся внимательней. Мы сделали b блочным элементом
высотой 1px и задали ему соответствующие поля.
Обратите внимание на этот css-код:
.r1, .r2, .r3 {overflow: hidden; font-size:1px;}
В IE6 есть своя заморочка по поводу пустых блоков – если для них задана высота 1px, то он растягивает их до 2px, что не способствует
закруглению уголков. Какой выход? Проблема решается указанием overflow:hidden и добавлением правила font-size:1px.
Как с другими браузерами? В принципе, браузерам отличным от IE6 это свойство ничем не мешает, поэтому нет необходимости использовать
хаки или условные комментарии.
Для закрепления материала сделаем углы радиусом 5 и 10px. Сложности особой нет, просто в коде у нас добавятся дополнительные пустые блоки.
Новый CSS-код формы:
.r1, .r2, .r3, .r4, .r5, .r7, .r10 { display: block; height: 1px; } .r10 { margin: 0 10px; } .r7 { margin: 0 7px; } .r5 { margin: 0 5px; } .r4 { margin: 0 4px; } .r3 { margin: 0 3px; } .r2 { margin: 0 2px; } .r1 { margin: 0 1px; } #rounded-box .inner-box, #rounded-box b, #rounded-box1 .inner-box, #rounded-box1 b, #rounded-box2 .inner-box, #rounded-box2 b { background-color: #d3d3d3; } .inner-box { padding:1em; } .r1, .r2, .r3, .r4, .r5, .r7, .r10 {overflow: hidden; font-size:1px;}
HTML-код формы:
<div id="rounded-box1"> <b class="r5"></b> <b class="r3"></b> <b class="r2"></b> <b class="r1"></b><b class="r1"></b> <div class="inner-box"> <h3>Я контейнер, у которого закругленные углы с радиусом R=5px</h3> </div> <b class="r1"></b><b class="r1"></b> <b class="r2"></b> <b class="r3"></b> <b class="r5"></b> </div> <p></p> <div id="rounded-box2"> <b class="r10"></b> <b class="r7"></b> <b class="r5"></b> <b class="r4"></b> <b class="r3"></b> <b class="r2"></b><b class="r2"></b> <b class="r1"></b><b class="r1"></b><b class="r1"></b> <div class="inner-box"> <h3>Я контейнер, у которого закругленные углы с радиусом R=10px</h3> </div> <b class="r1"></b><b class="r1"></b><b class="r1"></b> <b class="r2"></b><b class="r2"></b> <b class="r3"></b> <b class="r4"></b> <b class="r5"></b> <b class="r7"></b> <b class="r10"></b> </div>
Надеюсь, вы уловили суть как делаются закруглённые уголки без изображений. Можете поиграть с цветом фона(
background-color) и посмотреть, что получается.