Май 14, 2020 Запись была обновлена
Выпадающее меню на CSS3
Возможности CSS3 смогут добавить вашему сайту красивые переходы, анимацию и преобразования. И в этом уроке мы создадим выпадающее меню на CSS3, а также подстрахуемся в том случае, если пользователь зайдет из браузера Internet Explorer. Существует огромное множества различных меню, но данное меню отличается своей компактностью.
Реальный пример можно увидеть здесь:
Посмотреть примерСкачать
Обратите внимание на уроки, написанные раннее, о том как создать разные виды меню. Возможно какой-то из них вам понравится:
- CSS3 навигация с переходами
- Меню для сайта в стиле аккордеона
- Классное меню для сайта на основе спрайтов
- Создание выдвигающегося меню
- Выпадающее горизонтальное меню с поиском на CSS3 и HTML5
- Красивое горизонтальное меню с помощью CSS
HTML часть
В основе данного меню лежит HTML список. Чтобы быстро разобраться с этим меню изучите данный урок по основам создания списков в сайтостроении — как сделать список в HTML.
Весь HTML код с подпунктами я не писал, так как он займет очень много места на странице, а оставил лишь примерное меню. Я думаю вам не составит труда самостоятельно по примеру, который находится в демо, дописать или удалить ненужные пункты меню:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <nav id="menu-wrap"> <div id="menu-trigger">Меню</div> <ul id="menu"> <li><a href="#">Главная</a></li> <li> <a href="">Категории</a> <ul> <li> <a href="">CSS</a> <ul> <li><a href="">Подпункт 11</a></li> .... </ul> </li> ..... <li> <a href="">Работы</a> ..... </ul> </li> <li><a href="">Об авторе</a></li> <li><a href="">Контакты</a></li> </ul> </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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | a { color: #2A679F; } #menu, #menu ul { margin: 0; padding: 0; list-style: none; } #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, 0 1px 0 #666 inset; -webkit-box-shadow: 0 1px 1px #777, 0 1px 0 #666 inset; box-shadow: 0 1px 1px #777, 0 1px 0 #666 inset; } #menu:before, #menu:after { content: ""; display: table; } #menu:after { clear: both; } #menu { zoom:1; } #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 только */ color: #fafafa; } #menu ul { margin: 20px 0 0 0; _margin: 0; /*IE6 только*/ opacity: 0; visibility: hidden; position: absolute; top: 38px; left: 0; z-index: 1; background: #444; background: -moz-linear-gradient(#444, #111); background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#111)); 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 только*/ -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 только*/ -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 только*/ 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; } |
Также в демо-примере присутствуют стили меню для мобильных устройств, но чтобы не писать статью состоящую из кода, я эти стили не писал.
…. хитрости для Internet Explorer и не только
Подключаем библиотеку jQuery
1 | <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script> |
И добавим небольшой JS код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $(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'); }) } /* Mobile */ $('#menu-wrap').prepend('<div id="menu-trigger">Меню</div>'); $("#menu-trigger").on("click", function(){ $("#menu").slideToggle(); }); // iPad var isiPad = navigator.userAgent.match(/iPad/i) != null; if (isiPad) $('#menu ul').addClass('no-transition'); }); |
Вывод
Вы, наверное, подумаете что очень много стилей, но эффект того стоит :).
Успехов!
Источник: www.red-team-design.com
Спасибо за ваше обращение!
Мы свяжемся с вами в течение 2-х часов (график работы: пн-пт, с 10 до 19)
А есть решение под вертикальное многоуровневое меню?
Хорошее меню. Следовало ещё добавить вариант чистого подпункта, то есть код для тех, кто хочет добавить выпадающий подпункт в своё меню. Просто пришлось долго разбираться. 🙂
А есть такое же вертикальное?
Здравствуйте, Анна!
На сайте такого вертикального меню нет, но его можно легко переделать, если вы поймете как оно устроено. Это всего лишь маркированный список, который содержит вложенные списки. Вложенные списки по умолчанию скрыты и появляются только при наведении на соответствующий пункт меню.
оно у вас не работает для мобильной версии ((