Разместить на странице меню с набором гиперссылок – одна из важных задач в практике веб-дизайнера. Чтобы не утомлять внимание пользователя просмотром всего набора, ссылки обычно группируют по категориям, и в основное меню включают только категории. Только при выборе категории должны отобразиться соответствующие ссылки (или подкатегории).
Как правило, такие динамические меню принято создавать средствами языка Javascript, позволяющего совершать любой сложности манипуляции с элементами веб-страницы. Однако, существует и решение на CSS – довольно простое и красивое, хотя и не любую фантазию дизайнера выполняющее. Рассмотрим несколько примеров.
Пример 1. Создайте следующее меню.
Для создания меню будем описывать стили внутри html-документа:
<html>
<head>
<style>
ul.menu1 {
list-style: none;
border-bottom: 1px #888899 solid;
padding-bottom: 10px
}
ul.menu1 li {
display: inline;
margin-right: 5px
}
ul.menu1 li a {
color: #888899;
text-decoration: none;
background: #f7f7f9;
border: 1px #bbbbcc solid;
border-bottom: none;
padding: 10px 14px
}
ul.menu1 li a:hover {
padding: 14px 14px 10px 14px
}
ul.menu1 li a.selected {
color: #555566;
background: #ffffff;
border: 1px #888899 solid;
border-bottom: 1px #ffffff solid;
padding: 14px 14px 10px 14px
}
</style>
<title>Создание меню 1 для сайта CSS методами</title>
</head>
<body>
<ul class="menu1">
<li><a href="#">Главная</a></li>
<li><a href="#">Пункт1 </a></li>
<li><a href="#" class="selected">Пункт2</a></li>
<li><a href="#">Пункт3</a></li>
</ul>
</html>
Назначив конкретные ссылки, сделайте меню рабочим. Измените цвет меню, поэкспериментируйте, применяя псевдо класс selected к разным пунктам списка меню.
В результате создайте следующее меню, например:
<html>
<head>
<style>
ul.css-menu-3 {
list-style: none;
border-bottom: 5px solid #bb0000;
border-top: 1px solid #114477;
padding: 11px;
background: #336699
}
ul.css-menu-3 li {
display: inline
}
ul.css-menu-3 li a {
color: #fefefe;
text-decoration: none;
background: #225588;
border: 1px solid #225588;
border-bottom: 1px solid #114477;
margin: 0;
padding: 10px 14px 10px 14px
}
ul.css-menu-3 li a:hover {border-left: 1px solid #114477; border-right: 1px solid #114477}
ul.css-menu-3 li a.selected {
color: #fefefe;
background: #bb0000;
border: 1px #cc0000 solid;
border-bottom: 1px solid #bb0000;
border-left: 1px solid #770000;
padding: 10px 14px 10px 14px
}
</style>
<title>Создание горизонтального CSS меню без изображения</title>
</head>
Пример 2. Создайте следующее меню.
<html>
<head>
<style>
#menu2 ul {
list-style: none;
font-family: Georgia, serif;
font-size: 18px;
font-style: italic;
line-height: 1.4em;
border:2px solid #000000;
border-left: 1px solid #000000;
float: left;
padding: 0;
margin: 12px 0 25px 24px
}
#menu2 ul li {
float: left
}
#menu2 ul li a {
display: block;
text-decoration: none;
background-color: #595959;
padding: 5px 10px 0 10px;
color: #fefefe;
width: 120px;
border-right: 1px solid #797979;
border-left: 1px solid #191919
}
#menu2 ul li a span {
display: block
}
#menu2 ul li a span.text-top {
border-bottom: 1px solid #595959
}
#menu2 ul li a:hover span.text-top {
border-bottom: 1px dashed #fefefe;
color: #ffddbb
}
#menu2 ul li a span.text-bottom {
visibility: hidden;
font-size: 11px;
text-align: right
}
#menu2 ul li a:hover span.text-bottom {
visibility: visible
}
</style>
<title>Создание красивого горизонтального CSS меню для сайта</title>
</head>
<body>
<div id="menu2">
<ul>
<li><a href="#">
<span class="text-top">Главная</span>
<span class="text-bottom">Я подпись</span>
</a></li>
<li><a href="#">
<span class="text-top">Пункт1</span>
<span class="text-bottom">Подпись</span>
</a></li>
<li><a href="#">
<span class="text-top">Пункт2</span>
<span class="text-bottom">Подпись</span>
</a></li>
<li><a href="#">
<span class="text-top">Пункт3</span>
<span class="text-bottom">Подпись</span>
</a></li>
</ul>
</div>
</html>
Назначив конкретные ссылки, сделайте меню рабочим. Измените цвет меню, сместите подпись влево и измените используемый для нее шрифт.
Пример 3. Создать развернутое горизонтальное меню с выпадающими списками.
раз
1. Создайте в теле документа набор категорий в виде неупорядоченного списка (ul), каждый элемент которого содержит список ссылок:.
<ul id="MainMenu">
<li><a href="#" title="Популярные блюда">Популярные блюда</a>
<ul>
<li><a href="/Italian.htm">Итальянская кухня</a></li>
<li><a href="/Snack.htm">Закуски</a></li>
<li><a href="/Breakfast.htm">Закуски</a></li>
<li><a href="/Sweets.htm">Сласти</a></li>
<li><a href="/Fruits.htm">Фрукты</a></li>
</ul>
</li>
<li><a href="#" title="Подарки к празднику">Подарки к празднику</a>
<ul>
<li><a href="/Anniversary.htm">Юбилеи</a></li>
<li><a href="/Baby.htm">Малышам</a></li>
<li><a href="/Birthday-Food.htm">День рождения</a></li>
<li><a href="/Congratulations.htm">Поздравляем!!!</a></li>
</ul>
</li>
<li><a href="#" title="Выбор по цене">Выбор по цене</a>
<ul>
<li><a href="Under-1000.htm">Меньше 1000 руб</a></li>
<li><a href="1000-To-1500.htm">От 1000 до 1500 руб</a></li>
<li><a href="1500-To-2000.htm">От 1500 до 2000 руб</a></li>
<li><a href="2000-To-3000.htm">От 2000 до 3000 руб</a></li>
<li><a href="3000-up.htm">Дорого</a></li>
</ul>
</li>
<li><a href="#" title="Фрукты и Овощи">Фрукты и Овощи</a>
<ul>
<li><a href="/Dried-Fruits-Nuts.htm">Сухофрукты и Орехи</a></li>
<li><a href="/Fruit-Baskets.htm">Корзины фруктов</a></li>
<li><a href="/Fruit-Towers.htm">Горы фруктов</a></li>
<li><a href="/Healthy-Food.htm">Здоровая пища</a></li>
<li><a href="/Organic-Food.htm">Без пестицидов</a></li>
</ul>
</li>
<li><a href="#" title="Садовые и комнатные цветы">Цветы</a>
<ul>
<li><a href="/Fresh-Flowers.htm">Живые цветы</a></li>
<li><a href="/Plants-And-Dish-Gardens.htm">Садовые цветы</a></li>
<li><a href="/Sympathy-Flowers.htm">"Говорящие" цветы</a></li>
</ul>
</li>
<li><a title="Корпоративные подарки" href="/Corporate-Food.htm">
Корпоративные подарки</a> </li>
</ul>
Названия ссылок и категорий придумайте самостоятельно. Важно, чтобы атрибут id внешнего списка имел значение MainMenu- далее ему будет назначен особый стиль по этому идентификатору).
- С помощью стиля расположим пункты меню горизонтально за счёт обтекания. В таблице стилей добавьте следующее правило:
#MainMenu > li {
float: left;
list-style-type: none;
}
3. Пусть вложенные списки ссылок будут невидимыми (добавьте им свойство display:none;) и появляются только при наведении курсора на название соответствующей категории. Следующее правило с селектором псевдокласса hover имеет такой смысл: у списка (ul), вложенного в пункт списка (li), на который наведён указатель (:hover) и который вложен в элемент с id=#MainMenu, способ отображения следует сделать блочным (а не невидимым):
#MainMenu li:hover ul {
display:block;
}
Сохраните разрабатываемый документ, откройте его в браузере и убедитесь, что меню работает правильно.
- Принципиально механизм работает – осталась эстетическая сторона.
Назначьте якорям любого уровня вложенности в меню (правило #MainMenu a) желаемый цвет (color), гарнитуру (font), а также уберите подчёркивание (text-decoration).
Назначьте элементам списка категорий (правило #MainMenu > li) фоновый цвет (background), внутренний отступ (padding) и рамку справа (border-right).
Назначьте элементам вложенного списка ссылок (правило #MainMenu li li) такой же фоновый цвет, как и в списке категорий, а также небольшой отступ и рамку снизу. Кроме того, уберите маркировку списка (list-style-type).
Уберите у списка ссылок (правило #MainMenu li ul) поля и отступы (marginи padding).
Небольшой проблемой является то, что некоторые элементы списка категорий увеличиваются в ширину при наведении на них указателя. Это является следствием того, что ширина элемента списка определяется шириной всего содержимого - включая вложенный список. Однако если выбросить вложенный список из нормального потока и позиционировать его абсолютно, то его ширина более не будет влиять на ширину родительского элемента. Поэтому укажите для списка ссылок абсолютное позиционирование, а для элементов списка категорий - относительное. Проверьте в браузере. Затем уточните положение вложенного списка относительно его контейнера путём задания значения свойств left и top (не опускайте выпадающий список слишком низко, иначе он станет пропадать при попытке выбрать в нём ссылку).
5. Добавьте последний штрих: пусть элементы обоих списков при наведении указателя немного изменяют цвет фона (правило #MainMenu li:hover).