Создание навигационного ретро меню на CSS3

В этом учебном руководстве Вы узнаете, как создать навигационное меню в ретро стиле, используя только CSS3.

Шаг 1: HTML разметка навигационного меню

<ul class="nav"> 
    <li><a href="#">Home</a></li>
    <li>
        <a href="#">Portofolio</a>
        <ul>
            <li><a href="#">Webdesign</a></li>
            <li><a href="#">Development</a></li>
            <li><a href="#">App Design</a></li>
            <li>
                <a href="#">Identity</a>
                <ul>
                    <li><a href="#">Level 2</a></li>
                    <li><a href="#">Level 2</a></li>
                    <li>
                        <a href="#">Level 2</a>
                        <ul>
                            <li><a href="#">Level 3</a></li>
                            <li><a href="#">Level 3</a></li>
                            <li><a href="#">Level 3</a></li>
                            <li><a href="#">Level 3</a></li>
                        <ul>
                    </li>
                    </li><a href="#">Level 2</a></li>
                </ul>
            </li>
            <li><a href="#">Marketing</a></li>
        </ul>
    </li>
    <li><a href="#">About</a></li>
    <li><a href="#">Blog</a></li>
    <li><a href="#">Services</a></li>
    <li><a href="#">Contact</a></li>
</ul>

Мы будем использовать шрифт Oswald из сервиса Google Web Fonts:

<link  href='http://fonts.googleapis.com/css?family=Oswald:700'  rel='stylesheet'  type='text/css'>

Шаг 2: Фоновые узоры

Обратите внимание, меню имеет тонкий синий узор в качестве фона, но как я уже сказал, мы будем использовать только CSS3. Мы будем использовать технику, называемую - данные URI схемы. Это позволяет создавать ресурсы в базе 64 кода и добавить этот код в файл CSS. Что является главным преимуществом этого метода? Это позволит сократить количество HTTP запросов.

Давайте откроем Photoshop и загрузим пиксельные узоры. Создаем новый файл (Ctrl/Command + N) размером 10 х 10 пикселей. Залейте фоновый слой цветом #65c0bb и продублируйте его (правый клик по слою>Duplicate Layer). Выберите фоновый слой, перейдите в Blending Options>Pattern Overlay и примените следующие настройки:

Выберите копию слоя и перейдите в Filter> Noise> Add Noise:

Затем установите параметры смешивания слоя на "Soft Light" и уменьшите непрозрачность до 50%:

Сохраните файл как изображение в формате PNG и зайдите на этот сайт, в котором есть очень полезный инструмент, он позволит нам преобразовать изображение в код. Загрузите изображение (выберите "Обзор") и нажмите кнопку "Конвертировать". Держите страницу открытой или сохраните строку кода с фоновым изображением.

Шаг 3: Стиль навигационного меню

Для начала сбросим стандартные стили:

.nav, .nav ul {
    margin: 0;
    padding: 0;
    list-style: none;
    line-height: 1;
}

Далее, перейдем к основной панели навигации. Мы сделаем её шириной в 900px, текст по центру и добавим немного теней. Кроме того, мы добавим свойство background (position, image, repeat) и наш сгенерированный код:

.nav {
    position: relative;
    margin: auto; /* установка меню по центру */
    height: 46px;
    width: 900px;
    text-align: center;
    box-shadow: 0 1px 2px rgba(0, 0, 0, .3);
    background: #65c0bb;
    background-image:url(data:image/png;base64,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);
}

Вначале мы спрячем навигационное меню:

.nav ul {
    display: none;
}

Теперь давайте стилизуем ссылки:

.nav>li {
    margin: 0;
    line-height: 1;
    padding: 0;
    display: inline;
    position: relative;
    margin: 0 12px;
}

Навигационное меню должно выглядеть следующим образом:

Шаг 4: Декоративные ленты

Мы создадим ленты при помощи псевдо-элементов и некоторых приемов с рамками, пример которых вы можете увидеть на сайте Trade12 отзывы:

.nav::after, .nav::before {
    content: "";
    display: block;
    position: absolute;
    top: 6px;
    height: 0px;
    width: 0px;
    border: 23px solid #65c0bb;
    z-index: -1;
}
 
/* левая лента */
.nav::before {
    border-left-color: transparent;
    left: -30px;
}
 
/* правая лента */
.nav::after {
    border-right-color: transparent;
    right: -30px;
}

Шаг 5: Основные ссылки

Основные ссылки мы сделаем белыми и добавим к ним тень для улучшения ретро эффекта. При наведении, они будут менять цвет на светло желтый:

.nav>li>a {
    display: inline-block;
    padding: 15px 20px;
    position: relative;
 
    font-family: 'Oswald', sans-serif;
    font-size: 16px;
    text-transform: uppercase;
    text-decoration: none;
    color: #fff;
    text-shadow: 1px 2px rgba(0, 0, 0, .2);
 
    -webkit-transition: color .3s linear;
       -moz-transition: color .3s linear;
         -o-transition: color .3s linear;
        -ms-transition: color .3s linear;
            transition: color .3s linear;
}
 
.nav>li>a:hover, .nav>li:hover>a {
    color: #eae8a5;
}

Далее, мы должны создать звезды, которые отделяют ссылки. Снова откройте Photoshop и создайте новый файл размером 15 х 15 пикселей. Убедитесь, что ваш файл имеет прозрачный фон. Откройте PSD файл который Вы скачали с UI иконками и выберите слой иконок. Скопируйте слой в новый файл. Перейдите в Edit > Transform Path > Scale и уменьшите слой до 80% (ширина и высота). Затем нажмите правой кнопкой мыши на слое и выберите Clear Layer Style. Далее, выберите Blending Options и примените следующие настройки:

Сохраните файл как изображение в формате PNG. Снова сгенерируйте код изображения через сайт. Полученный код это - фоновое изображение для псевдо-элементов, расположенных справа от ссылок:

.nav>li>a::after {
    content: "";
    height: 15px;
    width: 15px;
    background-image:url(data:image/png;base64,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);
    position: absolute;
    right: -20px;
    top: 16px;
    display: block;
}

Последняя ссылка должна быть без иконки:

.nav>li:last-child>a::after {
    display: none;
}

Шаг 6: Стиль подменю

Во-первых, найдите и удалите такие строки:

.nav ul {
    display: none;
}

Далее, зададим общие стили. Все подменю будет скрыто (передвинул его на 9999px) и начальная непрозрачность будет 0. Для того, чтобы получить тонкий эффект затухания при помощи CSS3 transition.

.nav ul {
    position: absolute;
    left: -9999px;
    padding-top: 10px;
    border-bottom: 1px solid #ccc;
    opacity: 0;
    -webkit-transition: opacity .3s linear;
    -moz-transition: opacity .3s linear;
    -o-transition: opacity .3s linear;
    -ms-transition: opacity .3s linear;
}

Первый уровень подменю появится под родительской ссылкой:

.nav>li:hover>ul {
    left: 0;
    opacity: 1;
    top: 30px;
}

Остальное подменю должно появиться слева от родительской ссылки:

.nav ul li:hover>ul {
    left: 150px;
    opacity: 1;
    top: -11px;
    padding-left: 12px;
    border-bottom: 0;
    box-shadow: none;
}

На данный момент выпадающее навигационное меню имеет следующий вид:

Не очень хорошо, да? Для начала, разберемся с перечнем элементов, которые содержат ссылки:

.nav ul li {
    display: block;
    position: relative;
    border-top: 1px solid #ccc;
    border-left: 1px solid #ccc;
    border-right: 1px solid #ccc;
    width: 150px;
    text-align: justify;
    z-index: 9;
    background: #eee;
    box-shadow: 3px 4px 0 rgba(0, 0, 0, .1);
    -webkit-transition: background .3s linear;
    -moz-transition: background .3s linear;
    -ms-transition: background .3s linear;
    -o-transition: background .3s linear;
}

Я немного объясню свои действия. Я сделал список элементов с фиксированной шириной в 150px, на светло-сером фоне, добавил небольшие рамки и четкие тени в стиле ретро. Кроме того, они унаследовали свойство text-align от своих родителей, поэтому мне пришлось изменить его на text-align: justify.

Далее, перейдем к стилю ссылок:

.nav ul li a {
    font-family: "Oswald", sans-serif;
    font-size: 14px;
    text-decoration: none;
    display: block;
    padding: 7px 12px 7px 20px;
    color: #65c0bb;
    -webkit-transition: color .3s linear;
    -moz-transition: color .3s linear;
    -ms-transition: color .3s linear;
    -o-transition: color .3s linear;
}

Состояние при наведении:

.nav ul li:hover>a, .nav ul li a:hover {
    color: #4db6b0;
}
 
.nav ul li:hover {
    background: #f7f7f7;
}

Теперь наше ретро меню выглядит так:

Оно выглядит довольно неплохо, но есть одна проблема: первое подменю имеет нижнюю рамку, а второе нет.

.nav ul ul li:last-child {
    border-bottom: 1px solid #ccc;
}

Наверно вы задаетесь вопросом, почему я не сделал рамку для неупорядоченного списка. Потому что, маркированный список имеет отступы в 12px слева и рамка была бы больше чем нужно. Вот как это будет выглядеть:

А как выглядит сейчас:

Всплывает другая проблема: тень подменю второго уровня больше, чем в пером подменю. Давайте решим эту проблему:

.nav ul ul li {
    box-shadow: 3px 3px 0 rgba(0, 0, 0, .1);
}

Сейчас ретро меню выглядит довольно хорошо, но я по-прежнему чувствую, что чего-то не хватает. В окне предварительного просмотра подменю были маленькие стрелки. Мы собираемся создать их с помощью псевдо-элементов. Псевдо-элементы будут размером 9 на 9 пикселей, повернем их на 45 градусов. Фон и рамки должны совпадать с подменю. Установим некоторые базовые стили:

.nav ul::after, .nav ul::before {
    content: "";
    display: block;
    z-index: 1;
    position: absolute;
    height: 9px;
    width: 9px;
}

Вначале, разберемся с первым уровнем подменю:

.nav>li>ul::after {
    border: 1px solid #ccc;
    background: #eee;
    border-right: 0;
    border-bottom: 0;
    top: 5px;
    left: 25px;
    -webkit-transform: rotate(45deg);
    -moz-transform: rotate(45deg);
    -o-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
}

Оно выглядит неплохо, вот только верхняя рамка немного раздражает:

.nav>li>ul::before {
    height: 1px;
    width: 12px;
    background: #eee;
    border-right: 0;
    border-bottom: 0;
    top: 10px;
    left: 24px;
    z-index: 99;
}

Давайте сделаем то же самое для высшего уровня подменю:

.nav ul ul::after {
    border: 1px solid #ccc;
    background: #eee;
    border-right: 0;
    border-bottom: 0;
    top: 20px;
    left: 8px;
    position: absolute;
    -webkit-transform: rotate(-45deg);
    -moz-transform: rotate(-45deg);
    -o-transform: rotate(-45deg);
    -ms-transform: rotate(-45deg);
}
 
.nav ul ul::before {
    height: 10px;
    width: 1px;
    background: #eee;
    z-index: 99;
    top: 20px;
    left: 12px;
}

Вот и все! Я надеюсь, вам понравился урок и вы узнали что-то новое! Делитесь своим опытом в комментариях.

Перевод статьи Create a Retro Navigation Menu with CSS3

 

Тэги: transitionmenuanimatestyle

Вход

Уважаемый пользователь! Мы обнаружили, что вы используете AdBlock и вынуждены скрыть часть материалов на нашем сайте. Siteacademy существует и развивается за счет доходов от рекламы. Просим внести наш сайт в список исключений или отключить Блокировщик рекламы на нашем сайте.