Скруглённые уголки — мой любимый элегантный способ
Наверное в любом деле есть вечные темы. От всего остального они отличаются тем, что всплывают постоянно, требуют всё новых и новых обсуждений. Вокруг них разворачиваются громадные многовековые дискуссии, и сами дискутирующие часто забывают, о чём говорят. Вечные темы примечательны и тем, что для каждой из них испокон веков существует десяток-другой удобных решений, о которых вечно забывают.
Одна из таких тем в HTML-вёрстке — это скруглённые уголки. Существует, как минимум, сотня способов вёрстки скруглённых уголков: с джаваскриптом и без него, с картинками и без них, с поддержкой IE6 и без неё, с помощью CSS3 и без… Ничего нового я наверняка не скажу, но своим любимым способом поделюсь. Итак,
Простой и элегантный способ вёрстки скруглённых уголков, работающий в IE6
Оговорюсь: я рассмотрю технологию вёрстки только для блоков. Для строковых элементов она наверняка не подойдёт.
Вкратце идея такова: границу блока делаем свойством border, а уголки — картинками, спозиционированными абсолютно, по углам.
Разумеется, границы и фон в таком случае могут быть только однотонными. Впрочем, мне это очень редко мешает — большинство серьёзных информационных сайтов или сервисов нарисованы именно такими. Для всяческих промо-сайтов можно найти и более подходящий способ.
Преимущества очевидны:
- Границы не пропадают при отключении картинок — пропадают только уголки;
- Блок, который мы оформляем таким образом, может быть любым по размеру. При этом картинка (спрайт) с уголками загружается очень быстро;
- Немного HTML-кода: нету никаких врапперов, состоящих из десяти вложенных блоков.
Недостатки тоже есть:
- Способ не универсален: не стоит пытаться оформлять таким образом блоки, лежащие на сложных фоновых картинках, строковые элементы и т.д.;
- Лишний HTML-код в принципе есть, хотя его может и не быть вовсе (при использовании CSS-свойств);
- Для IE6 нужны костыли.
Простой пример вёрстки с использованием элегантных скруглённых уголков

Простой пример вёрстки скруглённых уголков
HTML-код:
|
|
|
|
Для самих уголков я использую элементы b, i, s, u — где-то подсмотрел, уже не помню. Достаточно удобно, хотя и совершенно бессмысленно. Элементы располагаются в коде в алфавитном порядке, а позиционируются как принято в CSS.

Позиционирование элементов-уголков как принято в CSS
Чтобы не пугать пользователей, эти элементы я расположил внутри блока .decor. Там никогда не появится пользовательского контента с полужирным или курсивным выделением, соответственно ничего и не развалится.
Симпатичное оформление «балунов» с использованием элегантных уголков
Более подходящий пример для использования простого и элегантного способа вёрстки скруглённых уголков

Более подходящий пример для использования простого и элегантного способа вёрстки скруглённых уголков
Именно в таком случае использование моего любимого способа вёрстки уголков оправдано. Код для этого примера не привожу, он отличается не сильно (и его можно раскопать самостоятельно, по ссылке на картинке). Главное отличие в том, что из-за использования другого изображения уже не получается позиционировать фоновую картинку с помощью ключевых слов left, right и т.п. — на смену пришли пиксели.
А как же IE6?
Действительно, в начале статьи я заявил о том, что способ прекрасно работает в IE6. С ним действительно почти не возникает проблем, если блоку .corners задать hasLayout, а уголкам, которые суть строковые элементы, — нулевую высоту.
Правда, IE6 страдает болезнью позиционирования абсолютных элементов внутри контейнера с высотой в нечётное количество пикселей. С этим не поспоришь, приходится выставлять чётные значения вертикальных полей и высоты строки. Вот CSS-затычка, после которой всё работает правильно:
|
|
Обязательно напомню: способ не претендует на универсальность. Просто он мне очень нравится, и я нередко использую его в реальных проектах. Пользуйтесь!
Кто говорит?
Меня зовут Олег Громов, я веб-разработчик. Недавно я начал работать под именем своей небольшой студии разработки фронтенда 12faces. Мы работаем над всем, что может увидеть пользователь: проектируем и рисуем интерфейсы, а потом воплощаем задуманное в жизнь с помощью HTML, CSS и Javascript.
Запись опубликована в рубрике Вёрстка с метками css, html.