Май 14, 2020 Запись была обновлена
Простое меню в стиле Youtube
Существует огромное множество различных меню: горизонтальных, вертикальных и круговых, выдвигающихся, появляющихся и тех, которые видны сразу при загрузке на сайте. Каждый выбирает для своего сайта то, которое больше нравится и подходит по дизайну. Я также опубликовал уже немало уроков о том как создать то или иное меню. Выбор делать конечно вам. А в этом уроке мы создадим меню в стиле Youtube.
Вот уроки (как создать меню) опубликованные раннее:
- Круговая навигация с помощью CSS преобразований
- Анимированное выдвигающееся меню
- Выпадающее меню на CSS3
- Адаптивное меню для сайта
- CSS3 навигация с переходами
- Меню для сайта в стиле аккордеона
- Классное меню для сайта на основе спрайтов
- Создание выдвигающегося меню
- Выпадающее горизонтальное меню с поиском на CSS3 и HTML5
- Красивое горизонтальное меню с помощью CSS
Приступим!
Реальный пример можно увидеть здесь:
Посмотреть примерСкачать
HTML часть
Меню будет полностью находится внутри тега <nav>, а внутри находится переключатель и само меню в ненумерованном списке. Каждый элемент списка содержит текстовую часть и иконку:
1 2 3 4 5 6 7 8 9 10 11 12 | <nav class="dr-menu"> <div class="dr-trigger"><span class="dr-icon dr-icon-menu"></span><a class="dr-label">Аккаунт</a></div> <ul> <li><a class="dr-icon dr-icon-user" href="#">Ваше Имя</a></li> <li><a class="dr-icon dr-icon-camera" href="#">Видео</a></li> <li><a class="dr-icon dr-icon-heart" href="#">Избранные</a></li> <li><a class="dr-icon dr-icon-bullhorn" href="#">Подписки</a></li> <li><a class="dr-icon dr-icon-download" href="#">Загрузки</a></li> <li><a class="dr-icon dr-icon-settings" href="#">Настройки</a></li> <li><a class="dr-icon dr-icon-switch" href="#">Выход</a></li> </ul> </nav> |
CSS часть
Для начала пропишем класс, чтобы затем мы могли использовать иконки из файла:
1 2 3 4 5 6 7 8 9 10 | @font-face { font-family: 'icomoon'; src:url('../fonts/icomoon.eot'); src:url('../fonts/icomoon.eot?#iefix') format('embedded-opentype'), url('../fonts/icomoon.woff') format('woff'), url('../fonts/icomoon.ttf') format('truetype'), url('../fonts/icomoon.svg#icomoon') format('svg'); font-weight: normal; font-style: normal; } |
Тег <nav> имеет также некоторые свойства, такие как размер текста, высота строки, цвет и так далее:
1 2 3 4 5 6 7 8 9 10 11 | .dr-menu { width: 100%; max-width: 400px; min-width: 300px; position: relative; font-size: 1.3em; line-height: 2.5; font-weight: 400; color: #fff; padding-top: 2em; } |
Переключатель, который находится внутри тега <nav> имеет абсолютное позиционирование и z-index 100 чтобы меню не перекрывало переключатель:
1 2 3 4 5 6 | .dr-menu > div { cursor: pointer; position: absolute; width: 100%; z-index: 100; } |
Иконка переключателя также имеет абсолютное позиционирование:
1 2 3 4 5 6 7 8 9 | .dr-menu > div .dr-icon { top: 0; left: 0; position: absolute; font-size: 150%; line-height: 1.6; padding: 0 10px; transition: all 0.4s ease; } |
После того как мы нажали на переключатель меню присваивается свойство dr-menu-open:
1 2 3 4 5 | .dr-menu.dr-menu-open > div .dr-icon { color: #60a773; left: 100%; transform: translateX(-100%); } |
Для переключателя установим иконку из трех полосок:
1 2 3 4 5 6 7 8 | .dr-menu > div .dr-icon:after { content: "\e008"; position: absolute; font-size: 50%; line-height: 3.25; left: -10%; opacity: 0; } |
Элементы списка будут появляться с некоторой задержкой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | .dr-menu.dr-menu-open ul li:nth-child(2) { transition-delay: 35ms; } .dr-menu.dr-menu-open ul li:nth-child(3) { transition-delay: 70ms; } .dr-menu.dr-menu-open ul li:nth-child(4) { transition-delay: 105ms; } .dr-menu.dr-menu-open ul li:nth-child(5) { transition-delay: 140ms; } .dr-menu.dr-menu-open ul li:nth-child(6) { transition-delay: 175ms; } .dr-menu.dr-menu-open ul li:nth-child(7) { transition-delay: 205ms; } |
И последним шагом установим иконки для каждого пункта меню:
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 | .dr-icon:before, .dr-icon:after { position: relative; font-family: 'icomoon'; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; -webkit-font-smoothing: antialiased; } .dr-menu ul .dr-icon:before { margin-right: 15px; } .dr-icon-bullhorn:before { content: "\e000"; } .dr-icon-camera:before { content: "\e002"; } .dr-icon-heart:before { content: "\e003"; } .dr-icon-settings:before { content: "\e004"; } .dr-icon-switch:before { content: "\e005"; } .dr-icon-download:before { content: "\e006"; } .dr-icon-user:before { content: "\e001"; } .dr-icon-menu:before { content: "\e007"; } |
Javascript часть
Нам необходимо сделать так, чтобы при клике на переключатель меню присваивался класс dr-menu-open. Иконка переключателя перемещается вправо, а при повторном нажатии всё возвращается обратно:
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 | var YTMenu = (function() { function init() { [].slice.call( document.querySelectorAll( '.dr-menu' ) ).forEach( function( el, i ) { var trigger = el.querySelector( 'div.dr-trigger' ), icon = trigger.querySelector( 'span.dr-icon-menu' ), open = false; trigger.addEventListener( 'click', function( event ) { if( !open ) { el.className += ' dr-menu-open'; open = true; } }, false ); icon.addEventListener( 'click', function( event ) { if( open ) { event.stopPropagation(); open = false; el.className = el.className.replace(/\bdr-menu-open\b/,''); return false; } }, false ); } ); } init(); })(); |
Вывод
Существует действительно очень много форм и разновидностей меню, у вас есть большой выбор. Если вам приглянулось данное меню, тогда забирайте его :).
Успехов!
Источник: tympanus.net
Спасибо за ваше обращение!
Мы свяжемся с вами в течение 2-х часов (график работы: пн-пт, с 10 до 19)
НА данный момент я изучаю сайтостроение и все что с ним связано. На вашем сайте я нашла много интересной информации.Спасибо за работу.
Приятно видеть что есть люди которые постоянно развиваются :)!