Наша группа в Telegram для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov

Выпадающие меню с помощью CSS

Используя грамотно структурированный HTML-код и несложные CSS-правила, можно создать симпатичное выпадающее меню, которое легко менять и дополнять, и при этом оно будет работать во всех браузерах.

Вот пример действующего меню.

Создаем меню

Первым и самым важным этапом создания нашего меню является построение его структуры. Лучше всего делать это, используя ненумерованный список, в котором размещены подменю, выступающие как списки в рамках пунктов родительского списка. Звучит заумно? Фактически это очень просто:

<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a>
<ul>
<li>
<a href="#">History</a>
</li> <li><a href="#">Team</a></li>
<li><a href="#">Offices</a></li>
</ul>
</li>
<li><a href="#">Services</a>
<ul>
<li><a href="#">Web Design</a></li>
<li><a href="#">Internet Marketing</a></li>
<li><a href="#">Hosting</a></li>
<li><a href="#">Domain Names</a></li>
<li><a href="#">Broadband</a></li>
</ul>
</li>
<li><a href="#">Contact Us</a>
<ul>
<li><a href="#">United Kingdom</a></li>
<li><a href="#">France</a></li>
<li><a href="#">USA</a></li>
<li><a href="#">Australia</a></li>
</ul>
</li>
</ul>

Вот так: простой HTML код, доступный и легко редактируемый.

Наводим красоту

Давайте-ка добавим немного стилей.

Первым делом удалим отступы и маркеры в ненумерованном списке, а затем зададим ширину пунктов меню.

ul { margin: 0; padding: 0; list-style: none; width: 150px; }

Теперь нам надо задать положение элементов списка. К счастью, они по умолчанию будут расположены вертикально, что нам и нужно. Однако, нам необходимо задать значение для position как relative, и всё потому, что нам нужно будет относительно их абсолютно позиционировать подменю.

ul li { position: relative; margin: 0; padding: 0; }

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

li ul {
    position: absolute;
    left: 149px;
    top: 0;
    display: none; }

Используя атрибуты "left" и "top", мы можем абсолютно позиционировать каждое субменю в рамках пункта меню предка. Вы заметите, что я задал атрибуту "left" значение в 149px (одним пикселем меньше, чем ширина родительского пункта), это позволяет субменю перекрывать главное меню, не создавая при этом двойной границы. (Поймёте, о чём я, чуть позже.)

Нам надо также присвоить атрибуту "display" значение "none", так как мы не хотим видеть подменю при открытии страницы.

Что ж, у нас теперь есть каркас, но он всё ещё выглядит невзрачно. Давайте зададим стили для ссылок.

ul li a { display: block;
    text-decoration: none;
    color: #777;
    background: #fff;
    padding: 5px;
    border: 1px solid #ccc;
    border-bottom: 0; }

Я применил к ссылкам стили по своему вкусу, но их можно легко поменять на те, что вам нравятся. Важно присвоить атрибуту "display" значение "block", ведь мы хотим, чтобы каждая ссылка занимала всё отведённое для неё место внутри содержащего её элемента списка.

Также обратите внимание, что мы забыли "закрыть" блок меню. Добавим дополнительно нижнюю границу к каждому элементу списка. Итак, вот полный список стилей для ul:

ul {    margin: 0;
    padding: 0;
    list-style: none;
    width: 150px;
    border-bottom: 1px solid #ccc; }

Все сложилось удачно, и теперь все могут увидеть красивое, но нефункционирующее меню.

Заставим его работать

А теперь - самое веселое. Нам надо сделать так, чтобы подменю появлялись в тот момент, когда курсор находится над элементом списка.

li:hover ul { display: block; }

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

Вот и всё! Не противоречащий стандартам метод создания красивых горизонтально выпадающих меню. Всё, что вам надо сделать - добавить несколько ваших стилей для hover, создав своё меню. Дабы дать толчок вашей фантазии, я добавил еще пару штрихов. Наслаждайтесь!

Автор статьи: Oleg http://mas.moy.su


.