Верстка сайта. Как сделать блок со скругленными углами и тенью.

21 сентября, 2007

Блоки используются практически на каждом сайте для выделения различных участков страницы (меню, заголовков и т.п.). В этой статье я покажу, как сделать блок со скругленными углами, градиентной заливкой и тенью.

В первую очередь напомню, как сделать обычный прямоугольный блок. Для этого достаточно использовать две CSS директивы: border и background-color. Первая устанавливает цвет, тип лини и толщину границы блока, а вторая – цвет фона. С помощью директив margin и padding можно изменять расстояния между границами блоков и между текстом внутри блока и его границами.

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

Чтобы немного упростить задачу, будем считать, что ширина блока всегда остается постоянной, а высота может изменяться.
В первую очередь нарисуем макет блока.

Макет блока

Вы можете скачать файл с макетом, созданный в Photoshop (72 кБ).

Наш макет условно можно разбить на три части. Верхняя часть (в которой находится заголовок) имеет фон в виде градиента. Центральная часть – однотонный фон, но справа находится граница с тенью. Нижняя часть – тоже градиент и тень.

Таким образом, нам нужно вырезать из нашего макета и сохранить в виде отдельных рисунков три блока: верхний градиент, нижний градиент и правую границу с тенью. Причем рисунок с границей должен иметь высоту 1 пиксель. В дальнейшем, с помощью директивы background-repeat:repeat-y; мы продублируем его по всей высоте центральной части нашего блока. Ниже показаны рисунки, которые у меня получились.

Верхний градиент

Правая граница и тень

Нижний градиент

Примечание: вы можете посмотреть, как разрезан макет в программе ImageReady, или зайти в папку images, которая находится в архиве с примером. Если будете разрезать сами, не забудьте сделать невидимым слой с текстом заголовка.

Теперь посмотрите на html разметку нашего блока.

  1. <div class="roundRectBlock"> <!–Начало roundRectBlock–>
  2. <div class="topImage"> <!–Начало topImage–>
  3. <p class="title">
  4. Заголовок
  5. </p>
  6. </div> <!–Конец topImage–>
  7. Текст блока. Может содержать разное количество строк с различным выравниванием. Например, по левому краю.
  8. </p>
  9. <div class="bottomImage"> <!–Начало bottomImage–>
  10. </div> <!–Конец bottomImage–>
  11. </div> <!– Конец roundRectBlock–>

Т.к. CSS не позволяет присваивать несколько фоновых изображений для одного тега div, то мы используем два таких тега с классами topImage, bottomImage (строки 2 и 10) для верхнего и нижнего градиентов, а основной текст в центральной части будем форматировать как обычно, с помощью тегов <p>.

Для того, чтобы изменять положение всего блока целиком, мы поместим его в контейнер (тег <div class=”roundRectBlock”> строка 1).

С разметкой разобрались. Теперь посмотрим на таблицу стилей.

  1. .roundRectBlock {
  2.     left:100px;
  3.     top:20px;
  4.     width:315px;
  5.     margin-top:20px;
  6.     margin-bottom:20px;
  7.     margin-left:20px;
  8. }
  9.  
  10. .roundRectBlock .topImage {
  11.     margin:0;
  12.     padding:0;
  13.     background-image: url(images/header.gif);
  14.     height:41px;
  15.     width:315px;
  16. }
  17.  
  18. .roundRectBlock p.title {
  19.     margin:0;
  20.     padding:10px 10px 0px 30px;
  21.     font-size:130%;
  22.     color:#71775E;
  23.     background-color:transparent;
  24.     background-image: none;
  25.     border-left: none;
  26.     font-family: "Times New Roman", serif;
  27. }
  28.  
  29. .roundRectBlock p {
  30.     margin:0 0 0 0;
  31.     padding:5px 20px 5px 20px;
  32.     background-color:#DCCEDB;
  33.     font-size:90%;
  34.     color:#005825;
  35.     background-image: url(images/shadow.gif);
  36.     background-repeat:repeat-y;
  37.     background-position:right;
  38.     border-left:solid 2px #000000;
  39.     font-family: "Arial", sans-serif;
  40. }
  41.  
  42. .roundRectBlock .bottomImage {
  43.     margin:0;
  44.     padding:0;
  45.     background-image: url(images/footer.gif);
  46.     height:30px;
  47.     width:315px;
  48. }

Здесь приведены только те стили, которые относятся к нашему блоку.
Стили для класса roundRectBlock (строки 1-8) задают положение блока на странице (в данном случае никакой роли не играют, я их устанавливал так, чтобы было удобно сделать скриншот).

Следующими идут стили тега с классом topImage, который обязательно должен быть внутри тега с классом roundRectBlock (строка 10). Здесь мы удаляем отступы (padding:0), устанавливаем высоту и ширину блока (точно по размеру картинки с верхним градиентом), и устанавливаем саму картинку background-image: url(images/header.gif).

После этого мы задаем стили для текста заголовка (строка 18). Здесь ничего сложного. Устанавливаем параметры шрифта, отступы от края блока и указываем, что фон должен быть прозрачным (чтобы увидеть картинку с градиентом).

Дальше мы задаем стили параграфа в средней части блока (строка 29). Здесь есть несколько интересных моментов. Во-первых, мы задаем левую границу (строка 38) так, чтобы она совпадала с границами верхней и нижней части блока. Во-вторых, в качестве фонового изображения мы указываем картинку с правой границей и тенью (строка 35), смещаем ее вправо (строка 37) и размножаем по вертикали (строка 36).

Последними идут стили для класса bottomImage (строки 42-48). Как вы, наверное, догадались, здесь мы только указываем фоновое изображение (нижний градиент), и задаем размеры блока.

Теперь посмотрим на результат.

Блок со скругленными углами

На скриншоте показано два блока разной высоты (высота определяется объемом текста в центральной части блока). Как видите, все фрагменты нашего блока точно согласуются друг с другом.

Вы можете скачать архив со всеми файлами проекта.

P.S. Тестирование проводилось с помощью Firefox 2, IE 6 и Opera 9.

Понравилась статья? Подпишитесь на продолжение rss link !

]]>

Добавьте эту страницу в google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

]]>

Опубликовано в CSS, HTML

]]>

Один комментарий

Вы можете отслеживать обсуждение записи с помощью RSS 2.0 rss link

Вы также можете оставить комментарий, или трекбек с Вашего сайта.

  1. Kon Green 12.07.2008 в 20:49 (Ответить)

    Спасибо!
    Все понятно и симпатично!

Оставить комментарий

Введите ваш комментарий

* - обязательные для заполнения поля

Quicktags:

]]>