htmlbook.ru - Для тех, кто делает сайты
Статьи Книги Шаг за шагом Рецепты Форум Графика для Web
Главная страница > Статьи > Использование слоев > Слой с одним «отрезанным» уголком

Слой с одним «отрезанным» уголком

Влад Мержевич

Текстовая версия   Добавить комментарий

По своей природе слои всегда прямоугольны, соответственно, если к слою через стили добавить фоновый цвет, то мы увидим одноцветный прямоугольник. Однако возникает ситуация, когда в целях оформления у слоя необходимо сделать декоративный уголок, например, закругленный или обрезанный. Напрямую добиться этого не представляется возможным, но можно пойти на хитрость и создать нужный эффект с помощью рисунков.

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

Рис. 1. Изображение уголка

Рис. 1. Изображение уголка

Рамка вокруг рисунка приведена только для наглядности, необходимости в ней нет. В изображении не должна быть включена прозрачность, используется два цвета — фона и слоя, как показано на рис. 2.

Рис. 2. Цвета, используемые в изображении уголка

Рис. 2. Цвета, используемые в изображении уголка

Теперь добавляем наш уголок к слою в качестве фонового рисунка и устанавливаем нужный цвет фона. Все это можно проделать через универсальный стилевой атрибут background. Кроме того, следует отключить повторение фона через значение no-repeat (пример 1).

Пример 1. Создание слоя с уголком

Валидный HTML
Валидный CSS
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Уголок</title>
<style type="text/css">
#corner {
 background:
  #99cedf /* Цвет фона */
  url(corner.gif) /* Путь к файлу с уголком */
  no-repeat; /* Отключаем повторение фона */
  padding: 10px; /* Поля вокруг текста */
 text-indent: 20px; /* Смещение первой строки */
}
</style>
</head>
<body>

<div id="corner">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
</div>

</body>
</html>

Результат данного примера показан ниже (рис. 3).

Рис. 3

Рис. 3.Вид слоя с уголком

Чтобы не получилось так, что первая строчка выходит за пределы цветной области в районе уголка, требуется сдвинуть эту строку вправо. Это делается с помощью свойства text-indent, его значение устанавливает отступ первой строки. Расстояние подбирается экспериментально в зависимости от размеров рисунка уголка и текста.

По умолчанию фоновый рисунок выравнивается по левому и верхнему углу, поэтому дополнительно задавать это значение в данном случае не требуется. Однако если уголок планируется установить в другом месте, выравнивание рисунка следует указывать обязательно.

Для случая, когда на веб-странице используется фоновый рисунок, приведенный способ для создания уголка у слоя не годится. Требуется изображение с прозрачными участками, чтобы через них «просвечивал» фон страницы. В этом случае следует создать рисунок для слоя, как показано на рис. 4. Ширина этого рисунка должна быть достаточно большой и равняться ширине слоя плюс запас «на всякий случай».

Рис. 4. Изображение для создания уголка

Рис. 4. Изображение для создания уголка

Поскольку ширина слоя может зависеть от ширины окна браузера и разрешения монитора, т.е. заранее не известна, то рекомендуется намеренно увеличить ширину рисунка, например, до 1200 пикселов и более. Бояться, что появится горизонтальная полоса прокрутки не нужно, поскольку изображение используется как фон, и все лишнее будет «обрезано». Аналогично обстоит дело и с высотой, но здесь можно ограничиться значением около 500 пикселов.

Код останется прежним, за исключением того, что уберется цвет фона (пример 2).

Пример 2. Использование фонового рисунка

Валидный HTML
Валидный CSS
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Уголок</title>
<style type="text/css">
#corner {
 background:
  url(corner.gif) /* Путь к файлу с уголком */
  no-repeat; /* Отключаем повторение фона */
  padding: 10px; /* Поля вокруг текста */
 text-indent: 20px; /* Смещение первой строки */
}
</style>
</head>
<body>

<div id="corner">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
</div>

</body>
</html>

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

Статья опубликована: 04.05.2006 Последнее обновление: 04.04.2008

Прежде, чем писать комментарий к статье, примите во внимание следующие моменты.

  1. Не задавайте вопросы в комментариях, для этой цели предназначен форум, где вы получите нужную помощь.
  2. Удаляются любые комментарии, которые:
    • включают множество ошибок;
    • написаны безграмотно;
    • не имеют отношения к данной статье;
    • не содержат никакой полезной информации для посетителей.
  3. Для выделения отдельных слов используйте следующие команды: [b]жирный[/b], [i]курсив[/i], [color=цвет]цветной текст[/color], [tag]тег[/tag], [var]параметр[/var], [code]пример[/code].
  4. Потренироваться в написании комментариев вы можете в песочнице.

Комментарии к статье

ChizZ

04.05.2006

а чистым CSS нельзя обойтись?
как здесь:
http://www.cssplay.co.uk/menus/menueleven.html

Влад Мержевич

04.05.2006

"Чистый" CSS подразумевается без использования картинок? Можно и обойтись, приведенная ссылка это доказывает. Но не согласен, что способ по этой ссылке лучше. У меня всего одна маленькая картинка и небольшой код.

ChizZ

05.05.2006

Лучше/не лучше - все от ситуации зависит. Например, если надо сделать не один уголок, а 2 - уже одна картинка не прокатит. А по ссылке, что мне понравилось - наклонные уголки перекрываются по горизонтали, картинками этого не достичь (только с наложением слоев, что затруднительно)
p.s. Вообще, было бы неплохо написать одну большую статью по использованию картинок в CSS в качестве "backgroud:" smile

Влад Мержевич

05.05.2006

Была у меня как-то статья, о том как фон использовать, потом понял, что лучше строить статью от задачи. Т.е. имеется задача - получите решение. А отталкиваться от параметра CSS неверно.

Антон

21.03.2007

Можно ли background-img задавать координаты?

Влад Мержевич

22.03.2007

Есть свойство background-position, оно и задает положение фона.

Антон

22.03.2007

Спасибо разобрался, еще один вопрос, можно ли не используя еще одного слоя вставить второй фон для противоположного угла? как на этом сайте в линках самый верх!? Или придется в любом случаи делать еще слой!

Влад Мержевич

23.03.2007

Для каждого уголка свой контейнер должен быть. Кстати, необязательно, что это DIV. Можно и для тега P или H1 добавить стиль.

Антон

23.03.2007

Спасибо, я просто думал что возможно в одном контенере одновременно можно будет вставить два фона. И какнибудь присвоить им свои собственные координаты. А то что каждый элемент Будь то P или H1, картинка, может бить блочным я знаю. Кстати очень хороший ресурс!

Добавить комментарий

Имя
Комментарий

Сохранить имя (используется cookie)

Поиск по сайту

Использование слоев
Разделы
Теги по теме

DIV
Элемент DIV является блочным элементом и предназначен для выделения фрагмента документа с целью изменения вида содержимого.

CSS по теме

background
Параметр позволяет установить одновременно до пяти атрибутов стиля фона. Значения могут идти в любом порядке, браузер сам определит, какое из них соответствует нужному атрибуту.

text-indent
Устанавливает величину отступа первой строки блока текста (например, для параграфа P). Воздействия на все остальные строки не оказывается.

Copyright 2002–2008 Влад Мержевич, по всем вопросам пишите по адресу: vlad@htmlbook.ru

О сайте | Планы на будущее | Использование сайта | Борьба с ошибками | Технологии | Поддержать проект