Как Создать Выпадающее Меню CSS
Sait
access_time9 декабря, 2020
hourglass_empty2мин. чтения
ВведениеДля сайта время его загрузки и удобство использования являются одними из самых важных аспектов. Поэтому, вы не должны загромождать ваш сайт дополнительными JavaScript и большими изображениями. Но что, если вы хотите красивое выпадающее CSS меню? Для этого не нужно использовать JavaScript, сегодня выпадающее меню можно сделать используя только CSS. В этом руководстве вы научитесь, как создать выпадающее меню CSS.
Нужен недорогой, но надёжный хостинг для вашего нового проекта? Обратите внимание, что в Hostinger действуют скидки на все тарифы хостинга. Воспользуйтесь предложением и разместите сайт до 90% дешевле!
К предложению
Что вам понадобитсяПеред тем, как мы начнем это руководство, вам понадобится следующее:
- Доступ к контрольной панели вашего хостинга
Во-первых, вам нужно создать пустой HTML-файл. В этом руководстве мы создадим новый файл под названием menu.html. Для этого мы будем использовать Файловый менеджер. Однако тот же результат может быть достигнут с использованием FTP-клиента (создайте файл menu.html на вашем компьютере и загрузите его на ваш хостинг).
Шаг 2 — Добавление кода HTML менюНаше меню будет сделано из одного родительского элемента под названием Главное меню и пяти подразделов. Изменяя адрес внутри атрибута href, вы можете связать каждый подраздел с разными страницами вашего сайта. Вы наверное заметили, что каждый элемент имеет разный класс — dropdown, mainmenubtn и dropdown-child. Классы необходимы для применения правил CSS.
<div> <button>Главное меню</button> <div> <a href="http://www.вашдомен.ru/page1.html">Подраздел 1</a> <a href="http://www.вашдомен. ru/page2.html">Подраздел 2</a> <a href="http://www.вашдомен.ru/page3.html">Подраздел 3</a> <a href="http://www.вашдомен.ru/page4.html">Подраздел 4</a> <a href="http://www.вашдомен.ru/page5.html">Подраздел 5</a> </div> </div>
Вот, как это выглядит без применения каких-либо CSS-правил:
Как вы видите обычное HTML меню не оптимизировано и выглядит не очень красиво. Однако мы применим CSS правила и изменим это в следующем шаге.
Шаг 3 — Как создать выпадающее меню CSSМы стилизуем наш HTML код используя следующие CSS правила:
.mainmenubtn { background-color: red; color: white; border: none; cursor: pointer; padding:20px; margin-top:20px; } .mainmenubtn:hover { background-color: red; } .dropdown { position: relative; display: inline-block; } .dropdown-child { display: none; background-color: black; min-width: 200px; } .dropdown-child a { color: white; padding: 20px; text-decoration: none; display: block; } .dropdown:hover .dropdown-child { display: block; }
Как вы видите, класс .dropdown-child имеет CSS правило display: none. Однако, как только пользователь проведет курсором (.dropdown:hover) по родительскому элементу, это правило изменит его отображение на display: block. Это и создаст эффект выпадающего меню.
Ниже представлен финальный результат нашего файла menu.html:
<html> <head> <style> .mainmenubtn { background-color:red; color: white; border: none; cursor: pointer; padding:20px; margin-top:20px; } .dropdown { position: relative; display: inline-block; } .dropdown-child { display: none; background-color: black; min-width: 200px; } .dropdown-child a { color: white; padding: 20px; text-decoration: none; display: block; } . dropdown:hover .dropdown-child { display: block; } </style> </head> <body> <div class="dropdown"> <button class="mainmenubtn">Главное меню</button> <div class="dropdown-child"> <a href="http://www.вашдомен.ru/page1.html">Подраздел 1</a> <a href="http://www.вашдомен.ru/page2.html">Подраздел 2</a> <a href="http://www.вашдомен.ru/page3.html">Подраздел 3</a> <a href="http://www.вашдомен.ru/page4.html">Подраздел 4</a> <a href="http://www.вашдомен.ru/page5.html">Подраздел 5</a> </div> </div> </body> </html>
В этом примере мы используем внутренние таблицы стилей, что означает CSS стили находятся в самом файле HTML. Однако существует множество способов для подключения CSS стилей к HTML документу.
Как только вы закончите, финальный результат должен быть похож на это:
Не бойтесь экспериментировать c CSS стилем, изменяя цвета и размер. Адаптируйте меню под ваши нужды.
ЗаключениеЗакончив данное руководство вы научились, как создать выпадающее меню CSS. Код приведенный в данном руководстве достаточно легок и не повлияет на время загрузки вашего сайта.
Выпадающее меню на HTML / CSS без использования JavaScript
Очень часто необходимо сделать на сайте выпадающее при наведении меню. Большинство веб-девелоперов используют для этого JavaScript / Jquery. Это конечно хорошо, но такого роди задачи легко решаются с помощью HTML / CSS.
Вот простой пример HTML-кода меню:
<ul> <li><a href=#>Menu 1</a> <ul> <li><a href=#>Sudmenu 1</a></li> <li><a href=#>Sudmenu 1</a></li> <li><a href=#>Sudmenu 1</a></li> </ul> </li> <li><a href=#>Menu 2</a> <ul> <li><a href=#>Sudmenu 2</a></li> <li><a href=#>Sudmenu 2</a></li> <li><a href=#>Sudmenu 2</a></li> </ul> </li> <li><a href=#>Menu 3</a> <ul> <li><a href=#>Sudmenu 3</a></li> <li><a href=#>Sudmenu 3</a></li> <li><a href=#>Sudmenu 3</a></li> </ul> </li> <li><a href=#>Menu 4</a> <ul> <li><a href=#>Sudmenu 4</a></li> <li><a href=#>Sudmenu 4</a></li> <li><a href=#>Sudmenu 4</a></li> </ul> </li> <li><a href=#>Menu 5</a> <ul> <li><a href=#>Sudmenu 5</a></li> <li><a href=#>Sudmenu 5</a></li> <li><a href=#>Sudmenu 5</a></li> </ul> </li> </ul>
Для построения меню был использован список с классом menu.
Теперь давайте как-нибудь минимально оформим наше меню стилями:
body { font: 14px 'Verdana'; margin: 0; padding: 0; } ul { display: block; margin: 0; padding: 0; list-style: none; } ul:after { display: block; content: ' '; clear: both; float: none; } ul.menu > li { float: left; position: relative; } ul.menu > li > a { display: block; padding: 10px; color: white; background-color: red; text-decoration: none; } ul.menu > li > a:hover { background-color: black; } ul.submenu { display: none; position: absolute; width: 120px; top: 37px; left: 0; background-color: white; border: 1px solid red; } ul.submenu > li { display: block; } ul.submenu > li > a { display: block; padding: 10px; color: white; background-color: red; text-decoration: none; } ul.submenu > li > a:hover { text-decoration: underline; }
Для класса submenu было установлено свойство ‘display: none’. Это позволило на спрятать наше выпадающее меню.
Теперь добавим в CSS такой код:
ul.menu > li:hover > ul.submenu {
display: block;
}
Это позволит показывать подменю при наведении.
Вот и все. Просто и легко без JavaScript.
Cоздание выпадающего меню на HTML и CSS просто
Автор статьи: admin
В этой статье мы разберём, как происходит создание выпадающего меню на HTML, CSS и JavaScript.
Также, если вы вообще не знаете как делать меню, то посмотрите статью: Меню навигации на HTML и CSS, там вы научитесь создавать простое меню навигации.
Создание горизонтального выпадающего меню:
Сперва на HTML и CSS сделаем выпадающее меню которое будет проявляться при наведении мышки, вот его HTML.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <header> <nav> <ul> <li><a href=»#»>Главная</a></li> <li>Галерея <ul> <li><a href=»#»>Машины</a></li> <li><a href=»#»>Горы</a></li> <li><a href=»#»>Компьютеры</a></li> </ul> </li> <li>О себе <ul> <li><a href=»#»>Имя</a></li> <li><a href=»#»>Аватарка</a></li> </ul> </li> </ul> </nav> </header> |
Тут всё как в обычном меню, если вы читали статью про то как сделать меню навигации, единственное что отмечу, это то, что обязательно меню должно находится в теги <nav>
, для лучшей индексации.
Теперь перейдём к CSS, но сначала мы не будем делать прям выпадающие меню, оно просто при наведении мыши, будет просто появляться, вот и всё.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | html, body { margin: 0; padding: 0; }
nav > ul { display: flex; margin: 0; width: 100%; background-color: green; }
nav > ul > li { margin-right: 20px; }
li { color: white; list-style: none; font-size: 20px; }
li a { color: white; text-decoration: none; }
li > ul{ display: none; position: absolute; background-color: tomato; padding: 0; }
li:hover > ul{ display: block; } |
В самом начале, мы убираем отступы со всего документа, чтобы, меню было чётко прибито ко краям страницы.
Дальше настраиваем внешний вид, делаем FlexBox и задаём отступы, самое главное, что нужно сделать, это тегам <ul>
, которые находятся внутри тега <li>
, сделать позиционирование absolute
и добавить ему свойство display: none
, что бы блок не показывался на экране.
Последнее важное изменение, это при наведении мышкой на <li>
, внутри которого есть <ul>
, он появлялся, вот что получилось.
Такое латовый вариант получился, теперь сделаем так, что бы меню выпадало с анимацией, а не просто появлялась, для этого не много изменим стили.
Примечание:
Тут покажу только те селекторы, которые изменим, а не весь CSS, так как, там добавилось не много.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | nav > ul { display: flex; margin: 0; width: 100%; height: 25px; background-color: green; }
li > ul{ position: absolute; top: 40px; visibility: hidden; opacity: 0; background-color: tomato; padding: 0; transition: 400ms; }
li:hover > ul{ visibility: visible; top: 25px; opacity: 1; } |
В первом селекторе мы добавляем высоту, чтобы было проще менять позицию, во втором, добавляем позицию
top
равного 45 пикселем, также устанавливаем свойство visibility: hidden
, которое отвечает за скрытие элемента, и opacity: 0
, для прозрачности, значение ноль, означает что элемент полностью прозрачен.В последнем селекторе который мы изменяем, который ещё отвечает за наведение мышки, убираем display
и добавляем visibility: visible
, для показа элемента, top
равный 25 пикселям и opacity: 1
, для полной не прозрачности.
Также появилось свойство transition
, для плавных переходов, мы задаём ему время перехода 400 миллисекунды.
Вывод:
В этой статье мы рассказали о создание выпадающего меню на HTML и CSS, если вам что то не понятно, то посмотрите наш учебник по HTML и CSS.
Подписываетесь на соц-сети:
Оценка:
(Пока оценок нет)
Загрузка…Также рекомендую:
Как сделать многоуровневое выпадающее меню только с HTML и CSS (возможно, крошечное JavaScript)
Новичок в CSS и может найти только одноуровневые меню. Вот меню и список пунктов:
<ul> <li> <a href="#">Home</a> </li> <li> <a href="#">Forums</a> <ul> <a href="#">Basketball</a> <ul> <li> <a href="#">Trading</a> </li> <li> <a href="#">Personal Collections</a> </li> <li> <a href="#">Box Breaks</a> </li> </ul> </ul> </li> </ul>
Как видите, он будет многоуровневым. Теперь, когда у меня есть CSS, сначала отображаются только главная страница и форумы, а когда я навожу курсор на форумы, баскетбол-это displayed…but, как и последующие пункты меню. Я хочу, чтобы они оставались скрытыми, пока я не нависну над баскетболом. Кто-нибудь знает, как сделать это только с CSS или как можно меньше JavaScript? Спасибо. Вот код CSS, который у меня есть:
ul
{
margin: 0;
padding: 0;
list-style: none;
width: 150px;
border-bottom: 1px solid #ccc;
}
ul li
{
position: relative;
}
li ul
{
position: absolute;
left: 149px;
top: 0;
display: none;
}
ul li a
{
display: block;
text-decoration: none;
color: #777;
background: #bad8f8;
padding: 2px 0 2px 10px;
border: 1px solid #ccc;
border-bottom: 0;
}
li:hover ul
{
display: block;
}
/* Styles for validation helpers
-----------------------------------------------------------*/
.field-validation-error
{
color: #ff0000;
}
.field-validation-valid
{
display: none;
}
. input-validation-error
{
border: 1px solid #ff0000;
background-color: #ffeeee;
}
.validation-summary-errors
{
font-weight: bold;
color: #ff0000;
}
.validation-summary-valid
{
display: none;
}
html
css
menu
stylesheet
drop-down-menu Поделиться Источник XstreamINsanity 20 января 2011 в 22:09
3 ответа
1
Вот рабочая демонстрация:
http://jsfiddle.net/rcravens/aqz8q/
Я сделал две вещи.
Небольшая реструктуризация списка ul/li. Некоторые элементы были не в Ли.
Используется ‘li:hover > ul’ для выбора только прямых дочерних элементов.
Надеюсь, это поможет.
Боб
Поделиться rcravens 20 января 2011 в 22:17
0
То, как вы структурировали свой css, приводит к тому, что все потомки «Basketball» наследуют его css. Вместо этого вы должны использовать child(«>») или :first-child selector. Посмотрите на разделы 5.5 и 5.6 здесь, чтобы понять, о чем я говорю: http:/ / www.w3.org/TR/CSS2 / selector. html
Если вы хотите сделать динамические меню, я бы настоятельно рекомендовал использовать javascript, а не полагаться исключительно на css, если только вы не уверены, что многие люди, просматривающие ваш сайт, будут отключены от javascript.
Поделиться Bhavya 20 января 2011 в 22:23
0
Попробуйте добавить
ul li ul{position: absolute; top: 0; left: 0; width: 250px; height: 250px; background-color: #EEE;}
И идите оттуда 🙂
Поделиться plebksig 20 января 2011 в 22:18
Похожие вопросы:
CSS выпадающее меню
Есть ли хорошее решение для выпадающего меню css, которое можно использовать на обычном веб-сайте html? Или лучше использовать javascript?
многоуровневое меню с css &html?
Я хочу создать многоуровневое меню с чистым css & html. положение меню должно контролироваться css. Кто-нибудь может мне помочь?
Многоуровневое выпадающее меню без css эффектов наведения asp.net jquery
Я хочу создать многоуровневое выпадающее меню в asp.net, используя c# для составного элемента управления. Кто-нибудь знает или знает какие-нибудь указания о том, как его создать? Я посмотрел на…
Twitter Многоуровневое Выпадающее Меню Bootstrap
Можно ли иметь многоуровневое выпадающее меню с помощью элементов twitter bootstrap 2? В оригинальной версии этой функции нет.
WordPress многоуровневое выпадающее меню
Я создал собственную тему для своего сайта. Здесь я хочу создать многоуровневое выпадающее меню, и я сделал это с помощью панели мониторинга, но появляется только выпадающее меню.
Javascript многоуровневое выпадающее меню
HTML код: <ul class=nav-menu> <li id=no onmouseover=dropDown() onmouseout=reverseDropDown()> <a href=# >Birds</a> <ul class=menu> <li id=no2 ><a href=#. ..
Как сделать выпадающее меню полной ширины и push-контент только с HTML+CSS?
Я пытаюсь создать чистое и простое выпадающее меню HTML+CSS, которое будет открываться в режиме полной ширины под каждым элементом, а также будет нажимать контент. Это изображение и jsfiddle лучше…
Как сделать многоуровневое выпадающее меню с помощью select option mentod
я хочу сделать многоуровневое выпадающее меню с помощью метода select и option <select> <option value= data-display-text=Select>None</option> <option…
Многоуровневое выпадающее меню Bokeh
Я хочу сделать многоуровневое выпадающее меню, что-то вроде того, что есть в этом XKCD: Есть ли какой-то способ, чтобы подкатегории складывались таким образом, используя выпадающее меню Боке? Мой…
Как развернуть выпадающее меню с помощью css , javascript и html?
У меня есть выпадающее меню на моей странице , когда пользователь нажимает кнопку выпадающего меню, кнопка должна развернуться и отобразить данные . вот чего я хочу Вот это HTML <div…
Плавно открывающееся меню с помощью CSS
Осуществим нашу задумку с помощью самого обычного CSS. В следующей статье, если не забуду, то опишу этот же эффект с помощью jQuery. Но а пока, давайте приступим к разбору данного метода. Но, сначала предложу посмотреть, что получится в итоге:
Первым делом, давайте напишем HTML код нашего меню. Меню будет простейшим. Для примера у него будет 2 пункта у каждого из которых будет выпадающий список с подпунктами.
<nav> <ul> <li> <a href="#">пункт 1</a> <ul> <li><a href="#">Выпадающий пункт 1</a></li> <li><a href="#">Выпадающий пункт 2</a></li> <li><a href="#">Выпадающий пункт 3</a></li> </ul> </li> <li> <a href="#">пункт 2</a> <ul> <li><a href="#">Выпадающий пункт 1</a></li> <li><a href="#">Выпадающий пункт 2</a></li> <li><a href="#">Выпадающий пункт 3</a></li> </ul> </li> </ul> </nav>
Думаю тут все понятно, самое простое 2-х уровневое меню. Как и говорил, меню имеет два главных пункта, можете добавить сколько угодно, если нужно. Дальше нужно просто добавить стили, которые и сделают всю магию 🙂
#slow_nav > ul{ width: 500px; margin:25px auto 0; } #slow_nav > ul > li{ list-style: none; display: inline-block; position:relative; padding:0; } #slow_nav a{text-decoration:none;} #slow_nav > ul > li > a{ font-size:18px; padding:5px; background-color:#333; color:#fff; } #slow_nav li ul{ position:absolute; list-style:none; text-align:center; top:15px; font-size:15px; left:0; margin:0; padding:0; /* Данные строки нужны для правильной работы анимации */ max-height:0px; overflow:hidden; -webkit-transition:max-height 0.4s linear; -moz-transition:max-height 0.4s linear; transition:max-height 0. 4s linear; /* конец */ } #slow_nav li:hover ul{ max-height:300px; } #slow_nav li ul li{ background-color:#333; border-bottom:1px solid #888; } #slow_nav li ul li:last-child{ border-bottom:none; } #slow_nav li ul li a{ padding:5px 12px; color:#fff; display:block; } #slow_nav li ul li:hover{ background-color:#444; } #slow_nav li ul li:first-child{ margin-top:25px; position:relative; } #slow_nav li ul li:first-child:before{ content:''; position:absolute; width:1px; height:1px; border:5px solid transparent; border-bottom-color:#333; left:10px; top:-10px; }
Код CSS не маленький., но по своей сути не сложный. Если Вы владеете навыками верстки, то запросто разберетесь что и как. Я лишь остановлюсь на некоторых моментах, которые являются важными.
Первым делом это сама анимация. Нужный код выделен комментариев в коде — /* Данные строки нужны для правильной работы анимации */. Удалять из нельзя, в противном случаи анимация перестанет работать. В данном отрезке кода, изначально мы задаем высоту в ноль пикселей —
max-height:0px; и прописываем свойство overflow:hidden;, чтобы скрыть наше дочернее меню, то есть выпадающее. Дальше уже прописываем кроссбраузерное свойство transition, которое совершит анимацию.
-webkit-transition:max-height 0.4s linear; -moz-transition:max-height 0.4s linear; transition:max-height 0.4s linear;
Тут можете изменить разве что время анимации. В данный момент время задано 0.4 секунды. Сразу после того как задали анимацию, добавлено свойство , для задания новой высоты при наведении на главные пункты меню:
#slow_nav li:hover ul{ max-height:300px; }
Тут такая картинка. Высота задается максимальная фиксированная, если у Вас высота выпадающего меню будет побольше, то и значение меняйте на больше. В противном случаи Ваше меню обрежет по высоте 300 пикселей.
Далее уже задаем стили для выпадающего меню, так что на них подробно останавливаться не буду. Ту как бы и все. Это и есть весь способ. Он простой и действенный и справляется со своей задачей на все 100%.
Данный способ можно применять не только к самописным меню но и к тем же динамическим меню, которые создаются системами управления сайтом, например WordPress. Для этого нужно немного подправить стили и все. То есть первый HTML код использовать не нужно, только стили. В стилях нужно заменить имя айди #slow_nav на то что будет у Вас, ну и возможно подправить еще что-то по мелочам. Подробно останавливаться не буду. Для каждого случая нужен персональный подход, так что уж извините 🙂 Я дал идею и способ, а Вам решать, применять его или нет.
На этом все, спасибо за внимание. 🙂
Выпадающее по клику меню на css
я однажды реализовывал подобное меню. там смысл достаточно прост: делаем обычное навигационное меню. раз меню выпадающее — делаем первый и второй уровень (допустим). первый уровень отображается всегда, а вот второй скрываем с помощью display: none;
. при наведении на определённый пункт меню первого уровня через псевдокласс :hover
отображаем ссылки второго уровня.
тут правильно задать позиционирование для второго уровня. а также очень важно (это проблема заставила меня долго мучаться) задать для пункта, при наведении на который будет появляться подменю, padding
по-больше. чтобы площадь реагирования на наведение увеличить.
Для большей наглядности мой код HTML (упрощённый):
<!DOCTYPE html PUBLIC "-//W3C/DTD//XTHML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtm1" xml:lang="en" lang="ru">
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<ul>
<li><a href="#">О компании</a></li>
<li><a href="#">Услуги</a>
<ul>
<li><a href="#">Все виды оценки</a></li>
<li><a href="#">Автоэкспертиза</a></li>
<li><a href="#">Автострахование</a></li>
<li><a href="#">Юридические услуги</a></li>
</ul><!--end sub_nav-->
</li>
<li><a href="#">Тарифы</a></li>
<li><a href="#">Новости</a></li>
<li><a href="#">Контакты</a></li>
</ul><!--end main_nav-->
</body>
</html>
И код CSS (тоже упрощён):
#main_nav {
position: relative;
top: 15px;
margin-top: 14px;
margin-left: 280px;
}
#main_nav li{
display: inline;
padding: 0 8px;
border-left: 1px dotted #8b6619;
position: relative;
z-index: 2;
}
#main_nav li:first-child, #main_nav ul li {
border-left: none;
}
#main_nav ul {
display: none;
position: absolute;
top: 19px;
left: 0;
z-index: 1;
width: 155px;
}
#main_nav li a, #main_nav li ul li a{
color: #8b6619;
font-family: "Times New Roman", serif;
font-size: 0. 9em;
font-weight: bold;
text-decoration: none;
outline: none;
padding-bottom: 17px;
}
#main_nav li a:hover,
#main_nav li ul a:hover {
color: black;
}
/*--------------Подменю--------------*/
#main_nav li:hover ul {
display: block;
}
Вот и всё. Спасибо за голоса!)
Создаем анимированное выпадающее меню при помощи CSS3
Я убежден, что CSS3 функции, такие как переходы, анимация и трансформация могут добавить дополнительную привлекательность многим элементам в Ваших проектах.
В этой статье вы увидите, как можно построить симпатичное, анимированное выпадающее меню при помощи одного только CSS3.
Онлайн-демо
HTML
Структура меню очень простая — это неупорядоченный список с ссылками. Вот фрагмент его кода:
<ul>
<li><a href=»#»>Home</a></li>
<li>
<a href=»#»>Categories</a>
<ul>
<li><a href=»#»>CSS</a></li>
<li><a href=»#»>Graphic design</a></li>
<li><a href=»#»>Development tools</a></li>
<li><a href=»#»>Web design</a></li>
</ul>
</li>
<li><a href=»#»>Work</a></li>
<li><a href=»#»>About</a></li>
<li><a href=»#»>Contact</a></li>
</ul>
CSS
Сначала сбрасываем стили по-умолчанию:
#menu, #menu ul {
margin: 0;
padding: 0;
list-style: none;
}
Первый уровень меню.
Возможности CSS3 по созданию таких вещей как градиент, тени и закругленные углы легко позволят нам реализовать следующее:
#menu {
width: 960px;
margin: 60px auto;
border: 1px solid #222;
background-color: #111;
background-image: -moz-linear-gradient(#444, #111);
background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#111));
background-image: -webkit-linear-gradient(#444, #111);
background-image: -o-linear-gradient(#444, #111);
background-image: -ms-linear-gradient(#444, #111);
background-image: linear-gradient(#444, #111);
-moz-border-radius: 6px;
-webkit-border-radius: 6px;
border-radius: 6px;
-moz-box-shadow: 0 1px 1px #777;
-webkit-box-shadow: 0 1px 1px #777;
box-shadow: 0 1px 1px #777;
}
Clear floats.
Это метод Nicolas Gallagher, который я обычно использую:
#menu:before,
#menu:after {
content: «»;
display: table;
}
#menu:after {
clear: both;
}
#menu {
zoom:1;
}
Список элементов.
Обратите внимание на селектор #menu li:hover>a
. Это, пожалуй, наиболее важный CSS трюк для этого выпадающего меню.
Итак, вот как это работает: выбираем элемент «а», который является дочерним для «li», а элемент «li» должен быть в свою очередь потомком «#menu». Подробнее о селекторах читайте здесь.
#menu li {
float: left;
border-right: 1px solid #222;
-moz-box-shadow: 1px 0 0 #444;
-webkit-box-shadow: 1px 0 0 #444;
box-shadow: 1px 0 0 #444;
position: relative;
}
#menu a {
float: left;
padding: 12px 30px;
color: #999;
text-transform: uppercase;
font: bold 12px Arial, Helvetica;
text-decoration: none;
text-shadow: 0 1px 0 #000;
}
#menu li:hover > a {
color: #fafafa;
}
*html #menu li a:hover { /* IE6 only */
color: #fafafa;
}
Подпункты меню.
С помощью свойства CSS3 transitions мы можем создать анимацию изменяя такие CSS-свойства, как margin или opacity. И я использовал это для анимации подменю. Вот что в результате получилось:
#menu ul {
margin: 20px 0 0 0;
_margin: 0; /*IE6 only*/
opacity: 0;
visibility: hidden;
position: absolute;
top: 38px;
left: 0;
z-index: 9999;
background: #444;
background: -moz-linear-gradient(#444, #111);
background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #111),color-stop(1, #444));
background: -webkit-linear-gradient(#444, #111);
background: -o-linear-gradient(#444, #111);
background: -ms-linear-gradient(#444, #111);
background: linear-gradient(#444, #111);
-moz-box-shadow: 0 -1px rgba(255,255,255,.3);
-webkit-box-shadow: 0 -1px 0 rgba(255,255,255,.3);
box-shadow: 0 -1px 0 rgba(255,255,255,.3);
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-webkit-transition: all .2s ease-in-out;
-moz-transition: all .2s ease-in-out;
-ms-transition: all . 2s ease-in-out;
-o-transition: all .2s ease-in-out;
transition: all .2s ease-in-out;
}
#menu li:hover > ul {
opacity: 1;
visibility: visible;
margin: 0;
}
#menu ul ul {
top: 0;
left: 150px;
margin: 0 0 0 20px;
_margin: 0; /*IE6 only*/
-moz-box-shadow: -1px 0 0 rgba(255,255,255,.3);
-webkit-box-shadow: -1px 0 0 rgba(255,255,255,.3);
box-shadow: -1px 0 0 rgba(255,255,255,.3);
}
#menu ul li {
float: none;
display: block;
border: 0;
_line-height: 0; /*IE6 only*/
-moz-box-shadow: 0 1px 0 #111, 0 2px 0 #666;
-webkit-box-shadow: 0 1px 0 #111, 0 2px 0 #666;
box-shadow: 0 1px 0 #111, 0 2px 0 #666;
}
#menu ul li:last-child {
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
#menu ul a {
padding: 10px;
width: 130px;
_height: 10px; /*IE6 only*/
display: block;
white-space: nowrap;
float: none;
text-transform: none;
}
#menu ul a:hover {
background-color: #0186ba;
background-image: -moz-linear-gradient(#04acec, #0186ba);
background-image: -webkit-gradient(linear, left top, left bottom, from(#04acec), to(#0186ba));
background-image: -webkit-linear-gradient(#04acec, #0186ba);
background-image: -o-linear-gradient(#04acec, #0186ba);
background-image: -ms-linear-gradient(#04acec, #0186ba);
background-image: linear-gradient(#04acec, #0186ba);
}
Стили для первого и последнего элемента меню.
#menu ul li:first-child > a {-moz-border-radius: 3px 3px 0 0;
-webkit-border-radius: 3px 3px 0 0;
border-radius: 3px 3px 0 0;
}
#menu ul li:first-child > a:after {
content: »;
position: absolute;
left: 40px;
top: -6px;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #444;
}
#menu ul ul li:first-child a:after {
left: -6px;
top: 50%;
margin-top: -6px;
border-left: 0;
border-bottom: 6px solid transparent;
border-top: 6px solid transparent;
border-right: 6px solid #3b3b3b;
}
#menu ul li:first-child a:hover:after {
border-bottom-color: #04acec;
}
#menu ul ul li:first-child a:hover:after {
border-right-color: #0299d3;
border-bottom-color: transparent;
}
#menu ul li:last-child > a {
-moz-border-radius: 0 0 3px 3px;
-webkit-border-radius: 0 0 3px 3px;
border-radius: 0 0 3px 3px;
}
jQuery
Данное меню работает во всех популярных современных браузерах, но если вам нужно добавить поддержку также IE6, то без использования JavaScript не обойтись.
$(function() {
if ($.browser.msie && $.browser.version.substr(0,1)<7)
{
$(‘li’).has(‘ul’).mouseover(function(){
$(this).children(‘ul’).css(‘visibility’,’visible’);
}).mouseout(function(){
$(this).children(‘ul’).css(‘visibility’,’hidden’);
})
}
});
Онлайн-демо
Данное меню протестировано в Firefox 8, Chrome 15, Opera 11.52, Safari и IE7.
Скачать исходники.
Перевод
Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим форумом
Popup Menus — Архив устаревшего контента
В последнем разделе мы рассмотрели создание меню в строке меню. XUL также имеет возможность создавать всплывающие меню. Всплывающие меню обычно отображаются, когда пользователь нажимает правую кнопку мыши.
XUL имеет три различных типа всплывающих окон, описанных ниже. Основное отличие заключается в том, как они появляются.
- Обычные всплывающие окна
- Простое всплывающее окно — это всплывающее окно, которое появляется, когда пользователь нажимает левую кнопку мыши на элементе. Они очень похожи на меню в строке меню, за исключением того, что они могут быть размещены где угодно и могут содержать любое содержимое. Хорошим примером является раскрывающееся меню, которое появляется, когда вы нажимаете маленькие стрелки вниз рядом с кнопками назад и вперед в окне браузера.
- Контекстные всплывающие окна
- Контекстное всплывающее окно — это всплывающее окно, которое появляется, когда пользователь нажимает кнопку контекстного меню, которой обычно является правая кнопка мыши. Точный способ открытия контекстного меню зависит от платформы.Например, на Macintosh пользователь может либо нажать клавишу Control и щелкнуть кнопкой мыши, либо удерживать кнопку мыши на мгновение. Также обратите внимание, что контекстные меню можно открывать без использования мыши, например, нажав клавишу меню на клавиатуре.
- Подсказки
- Всплывающее окно всплывающей подсказки появляется, когда пользователь наводит курсор на элемент с помощью мыши. Этот тип всплывающего окна обычно используется для предоставления более подробного описания кнопки, чем может быть предоставлено на самой кнопке.
Все три типа всплывающих окон различаются способом их вызова пользователем. Тип всплывающего окна определяется элементом, который вызывает всплывающее окно.
Всплывающее окно описывается с помощью элемента
. Он не имеет особых атрибутов и является разновидностью ящика. При вызове он отображает окно, содержащее все, что вы поместили в всплывающее меню menupopup
. Однако вы всегда должны помещать атрибут
во всплывающее меню, поскольку он используется для связывания всплывающего окна с элементом.Мы скоро увидим, что это значит. Во-первых, пример: id
<всплывающее окно>
Как видно здесь, было создано простое всплывающее меню с тремя командами. Элемент
окружает три элемента menupopup
. Вы также заметите, что menuitem
был установлен в самом элементе меню id
menupopup
.
Элемент popupset
окружает все объявление всплывающего меню. Это общий контейнер для всплывающих окон, который не является обязательным. Он не отображается на экране, а вместо этого используется как заполнитель, в котором вы объявляете все свои всплывающие окна. Как следует из названия
, вы можете поместить в него несколько объявлений всплывающих окон. Просто добавьте дополнительные после первого элемента popupset
. В файле может быть несколько всплывающих окон menupopup
, но обычно у вас будет только одно.
Теперь, когда мы создали всплывающее окно, пора его создать. Для этого нам нужно связать всплывающее окно с элементом, в котором оно должно появиться. Мы делаем это, потому что хотим, чтобы всплывающее окно появлялось только тогда, когда пользователь щелкает в определенной области окна. Как правило, это будет конкретная кнопка или поле.
Чтобы связать всплывающее окно с элементом, вы добавляете к элементу один из трех атрибутов. Добавляемый вами атрибут зависит от типа всплывающего окна, которое вы хотите создать.Для простых всплывающих окон добавьте к элементу атрибут . Для контекстных всплывающих окон добавьте атрибут
. Наконец, для всплывающих подсказок добавьте атрибут context
. tooltip
Значение атрибута должно быть установлено на
из id
всплывающего меню
, которое вы хотите отобразить. Вот почему вы должны поместить идентификатор во всплывающее окно. Таким образом, можно легко создать несколько всплывающих окон в одном файле.
В приведенном выше примере мы хотим сделать всплывающее контекстное меню.Это означает, что нам нужно использовать атрибут
и добавить его к элементу, с которым мы хотим связать всплывающее окно. В приведенном ниже примере показано, как это можно сделать: context
Пример 1 : Исходный код
<всплывающее окно>
Здесь всплывающее меню связано с окном.Каждый раз, когда вы щелкаете контекстным (правым) щелчком в любом месте внутри поля, появляется всплывающее меню. Всплывающее окно также появится, даже если вы нажмете на дочерние элементы поля, поэтому оно будет работать, если вы также щелкните элемент
. Атрибут контекста label
использовался для связывания окна со всплывающим меню с тем же идентификатором. В этом случае появится всплывающее меню
clipmenu
. Таким образом, вы можете создать несколько всплывающих окон и связать их с разными элементами.
Вы можете связать несколько всплывающих окон с одним и тем же элементом, добавив к элементу несколько атрибутов разных типов. Вы также можете связать одно и то же всплывающее окно с несколькими элементами, что является одним из преимуществ использования этого синтаксиса всплывающих окон. Всплывающие окна могут быть связаны только с элементами XUL; они не могут быть связаны с элементами HTML.
Всплывающие подсказки
Здесь мы рассмотрим простой способ создания всплывающих подсказок. Есть два способа создать всплывающую подсказку. Самый простой способ, который встречается гораздо чаще, — это добавить атрибут
к элементу, для которого вы хотите назначить всплывающую подсказку. tooltiptext
Второй метод — использовать элемент всплывающей подсказки
, содержащий содержимое всплывающей подсказки. Это требует, чтобы у вас был отдельный блок содержимого для каждой всплывающей подсказки или сценарий, который устанавливает содержимое. Однако он позволяет вам использовать во всплывающей подсказке любой контент, кроме текста.
Пример 2 : Исходный код
У этих двух кнопок есть всплывающая подсказка.Первый использует стиль всплывающей подсказки по умолчанию. Второй использует настраиваемую всплывающую подсказку с другим цветом фона и стилизованным текстом. Всплывающая подсказка связана с кнопкой «Еще» с помощью атрибута
, который установлен на соответствующий tooltip
элемента всплывающей подсказки id
. Обратите внимание, что элемент всплывающей подсказки
по-прежнему размещается внутри элемента всплывающего окна
, как и другие типы всплывающих окон.
По умолчанию всплывающее и контекстное окна появляются там, где находится указатель мыши.Всплывающие подсказки будут размещены немного ниже элемента, чтобы указатель мыши не закрыл его. Однако есть случаи, когда вам нужно будет указать более подробно, где появляется всплывающее окно. Например, всплывающее меню, которое появляется при нажатии кнопки «Назад» в браузере, должно появляться под кнопкой «Назад», а не там, где находится указатель мыши.
Чтобы изменить положение всплывающего окна, вы можете использовать дополнительный атрибут
в всплывающем меню position
.Вы также можете добавить его в элемент меню
. Этот атрибут используется для указания размещения всплывающего окна относительно элемента, вызывающего всплывающее окно. Он может быть установлен на несколько значений, которые кратко описаны ниже: menupopup
- after_start
- Всплывающее окно появляется под элементом с выравниванием левого края элемента и всплывающего окна. Если всплывающее окно больше элемента, оно расширяется вправо. Это значение, используемое для раскрывающихся меню, связанных с кнопками браузера «Назад» и «Вперед».
- after_end
- Всплывающее окно появляется под элементом с выравниванием правого края элемента и всплывающего окна.
- before_start
- Всплывающее окно появляется над элементом с выравниванием левого края элемента и всплывающего окна.
- до_конца
- Всплывающее окно появляется над элементом с выравниванием правого края элемента и всплывающего окна.
- end_after
- Всплывающее окно появляется справа от элемента, при этом нижние края элемента и всплывающее окно выровнены.
- end_before
- Всплывающее окно появляется справа от элемента, при этом верхние края элемента и всплывающее окно выровнены.
- start_after
- Всплывающее окно появляется слева от элемента с выровненными нижними краями элемента и всплывающим окном.
- начало_до
- Всплывающее окно появляется слева от элемента, при этом верхние края элемента и всплывающее окно выровнены.
- перекрытие
- Всплывающее окно появляется поверх элемента.
- at_pointer
- Всплывающее окно появляется в позиции указателя мыши (at_pointer в настоящее время не реализован по отношению к указателю мыши. В настоящее время он отображается в верхней части привязки).
- after_pointer
- Всплывающее окно появляется в том же горизонтальном положении, что и указатель мыши, но под элементом. Так появляются всплывающие подсказки (after_pointer в настоящее время не реализован по отношению к указателю мыши. В настоящее время он смещает 21 пиксель по вертикали от привязки, см. Ошибка 619887).
Добавляя атрибут position
к всплывающему элементу, вы можете точно указать, где появляется всплывающее окно. Вы не можете указать точное положение в пикселях. Атрибут position
может использоваться со всеми тремя типами всплывающих окон, хотя вы, вероятно, не измените значение для всплывающих подсказок. Пример ниже демонстрирует создание кнопки возврата со всплывающим меню:
Пример 3 : Исходный код
<всплывающее окно>
Наш пример поиска файлов
Давайте добавим простое всплывающее меню в диалог поиска файлов.Для простоты мы просто скопируем содержимое меню «Правка». Пусть при нажатии на первую панель вкладок появляется всплывающее окно:
<всплывающее окно>. . .
Здесь к первой панели вкладок добавлено простое всплывающее окно, похожее на меню редактирования. Если вы щелкните правой кнопкой мыши (на Macintosh, удерживая нажатой клавишу «Control») в любом месте первой панели, появится всплывающее окно. Однако всплывающее окно не появится, если вы щелкните в другом месте. Обратите внимание, что у текстового поля есть собственное встроенное всплывающее меню, которое переопределит указанное нами.
Наш пример поиска файлов на данный момент : Source View
Далее мы рассмотрим, как создавать прокручиваемые меню.
Как создать раскрывающееся меню в HTML
В HTML мы можем легко создать раскрывающееся меню в документе Html, используя следующие различные способы:
- Использование HTML-формы
- Использование внутреннего CSS
Использование HTML-формы
Если мы хотим создать раскрывающееся меню в документе Html с помощью формы, мы должны выполнить шаги, указанные ниже.Используя эти шаги, мы можем легко создать раскрывающееся меню:
Шаг 1: Во-первых, мы должны ввести код Html в любом текстовом редакторе или открыть существующий файл Html в текстовом редакторе, в котором мы хотим использовать форму для создания раскрывающегося меню.
<Голова> <Название> Создайте раскрывающееся меню с помощью HTML-формы <Тело> Эта страница поможет вам понять, как создать раскрывающееся меню в HTML-документе.И этот раздел поможет вам понять, как создать раскрывающееся меню с помощью формы Html.