Выпадающее меню и дропдауны
Пользуясь интернетом, вы наверняка уже видели выпадающее меню. Это когда наводишь мышью на элемент меню и появляется подменю.
Весь секрет в том, чтобы изначально скрыть выпадающее меню, а при наступлении какого-то события (наведение мыши на какую-то кнопку), отобразить выпадающее меню.
Сразу же перейдём к вёрстке. HTML предельно прост: есть меню, состоящее из четырёх элементов, а во втором элементе, помимо ссылки, есть вложенное меню.
<ul> <li> <a>Магазины</a> </li> <li> <a>Покупателям</a> <ul class="dropdown"> <li> <a>Бонусная программа</a> </li> <li> <a>Подарочные карты</a> </li> <li> <a>Доставка</a> </li> </ul> </li> <li> <a>Юридическим лицам</a> </li> <li> <a>Контакты</a> </li> </ul>
CSS тоже не слишком сложный. Фактически, все стили вертятся вокруг оформления. Единственное - применен "магический"
селектор. На самом деле, никакой магии здесь нет. menu li:hover .dropdown
означает, что при наведении
курсора мыши :hover
, на элемент меню menu li
, дропдаун .dropdown
получит некоторые стили, в данном случае, display: block
.
* { box-sizing: border-box; } ul { list-style: none; padding: 0; margin: 0 auto 100px; max-width: 800px; display: flex; } ul li { display: block; position: relative; width: 25%; } ul li a { padding: 8px 16px; background: lightblue; display: inline-block; width: 100%; text-decoration: none; color: black; text-align: center; } ul li a:hover { background: teal; color: white; } ul li:hover .dropdown { /* Магия здесь */ display: block; } .dropdown { display: none; position: absolute; top: 100%; left: 0; padding: 0; margin: 0; min-width: 100%; list-style: none; } .dropdown li { display: block; width: auto; } .dropdown li a { text-align: left; }
a { cursor: pointer !important; } a:hover { text-decoration: underline; } @media print { .dropdown { display: block !important; } ul { margin-bottom: 250px; } }
Результат представлен ниже. Попробуйте навести мышью на элементы меню.
Похожим способом можно сделать и дропдаун для кнопки
<button>О нас <ul class="dropdown"> <li><a>О компании прессе</a></li> <li><a>Юридическая информация</a></li> <li><a>Контактная информация</a></li> </ul> </button>
button { background: white; border: 1px solid gray; border-radius: 4px; padding: 8px 16px; position: relative; margin-bottom: 100px; } button:hover { background: lightblue; } *:hover > .dropdown { /* при наведении на любой элемент, содержащий .dropdown ... */ display: block; } .dropdown { display: none; position: absolute; top: 100%; left: 0; padding: 16px; margin: 0; list-style: none; box-shadow: 0 0 5px 0 black; border-radius: 4px; background: white; min-width: 200px; } .dropdown li { display: block; margin-bottom: 8px; text-align: left; }