Лого SiteHere.ru

Простое меню в стиле Youtube

Простое меню в стиле Youtube

Существует огромное множество различных меню: горизонтальных, вертикальных и круговых, выдвигающихся, появляющихся и тех, которые видны сразу при загрузке на сайте. Каждый выбирает для своего сайта то, которое больше нравится и подходит по дизайну. Я также опубликовал уже немало уроков о том как создать то или иное меню. Выбор делать конечно вам. А в этом уроке мы создадим меню в стиле Youtube.

Вот уроки (как создать меню) опубликованные раннее:

Приступим!

Реальный пример можно увидеть здесь:

Посмотреть примерСкачать



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 комментария к записи
  • Елена

    НА данный момент я изучаю сайтостроение и все что с ним связано. На вашем сайте я нашла много интересной информации.Спасибо за работу.

     
    • Юрий

      Приятно видеть что есть люди которые постоянно развиваются :)!

       

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *