Вертикальное навигационное меню Ормана Кларка: версия от CSS3

Вертикальное навигационное меню Ормана Кларка

От автора: следующее в серии кодированных Орманом Кларком (Orman Clark) PSD – его потрясающее Вертикальное навигационное меню. Мы воссоздадим его с помощью CSS3 и jQuery, используя минимально возможное количество изображений.

Единственные изображения, которые мы применим – для иконок; с помощью нового инструмента под названием SpriteRight я создам спрайт, но это необязательно. Дополнительно для создания градиентов CSS3 я использую GradientApp, но это тоже необязательно.

скачать исходникидемо

Шаг 1: Основная разметка HTML

Давайте начнём с добавления основной разметки в пустой документ HTML5:

А теперь разметка нашего меню: неупорядоченный список внутри контейнера- упаковщика.

Наконец, создаём подменю, помещая внутрь каждого из существующих элементов неупорядоченный список.

Да, возможно, покажется слишком много, но пусть это вас не смущает. Сначала мы создали неупорядоченный список из пяти элементов, каждый с тегом-привязкой внутри. Затем добавили вложенные неупорядоченные списки, каждый из которых состоит из трёх элементов.

Я также добавил каждому элементу списка класс, позже это облегчит работу со стилями. Наконец, для чисел мы создали тег внутри каждого тега-привязки. Если посмотреть через браузер, это должно выглядеть так:

Шаг 2: «Подвижный» шрифт

Сначала убедимся, что наше меню правильно отображается. Добавьте в css/styles.css эти правила, они установят поля и отступ для всех ul на 0 и удалят стиль списка.

Перед назначением стилей нашему меню давайте создадим упаковщик с фиксированной шириной и размером шрифта 13px (выраженном в em). Сначала добавим правило font-size:100%; для body. Это гарантирует, что стили будут основаны на размерах шрифта по умолчанию для браузера (обычно 16px).

Теперь объясню, как работает упаковщик размера шрифта. Нам нужно выразить его как em – пропорционально размеру шрифта его родительского элемента. Нам нужен размер 13px, так, если родительский размер — 16px, наш конечный em получится: 13 / 16 = 0.8125. 13px это 0.8125*16px.

Измеряя шрифты (и прочие элементы) в единицах em, мы делаем их «подвижными». Теперь, если изменить размер шрифта упаковщика (или его значение по умолчанию в браузере), то в зависимости от этого подстроится все меню. Пусть это вас не смущает: если потребуется помощь с конвертированием шрифтов, советую вам посетить сайт pxtoem.com.

Мы назначили упаковщику фиксированную ширину в 220px и отцентрировали его с небольшим верхним полем, добавив margin:100px auto;.

Шаг 3: CSS главного меню

Далее добавим меню несколько стилей. Установим ширину и высоту ul меню на auto, затем применим к нему тень. Установив высоту на auto, мы добьёмся того, что при открытии слайдера тень станет подстраиваться.

Затем тэги-привязки; мы добавим ширину в 100%, это значит, что они будут растягиваться до 220px – ширины упаковщика. Для высоты применим em’ы – значит, вернёмся к основному размеру шрифта 13px. Наш .psd показывает высоту 36px и является нашей целью. Возьмём 36, разделим на 13, получится примерно 2.75em (36 / 13 = 2.76923077). Кроме того, для высоты строки (чтобы выровнять весь текст по вертикали) возьмем 2.75em, затем применим текстовый отступ, чтобы отодвинуть текст, оставив немного места для будущей иконки.

Добавим в фон градиент CSS3, я создал его с помощью GradientApp. Затем изменим шрифт, применив Helvetica Neue и белый цвет наряду с текстовой тенью. Отметьте, что здесь мы не использовали размер шрифта. Это оттого, что основной шрифт упаковщика — 13px, и его унаследовали наши привязки, так что нет нужды его добавлять.

Так! Теперь все уже смотрится получше, а еще у нас появилась структура! А как насчёт добавить цвет фона, чтобы лучше выделить меню?

Совет: помните об EM’ах

Из вышеприведенного CSS заметно, что забыть о фактическом значении единиц em легко. Представить в комментариях свои исходные вычисления было бы отличной идеей, чтобы, вернувшись в будущем к коду, можно было расшифровать сделанное ранее. Помните формулу: желаемый размер (px) / родительский размер (px) = результант (em) и используйте символ приблизительности (≈), если округляете результат.

Шаг 4: CSS Подменю

Пора добавить CSS для белых подменю. Нам нужно добавить белый фон с серыми границами. Обратите внимание, что у последнего элемента нет нижней границы, поэтому мы обратимся к нему для ее удаления посредством псевдоселектора :last-child. У него имеется темно-синяя граница, поэтому мы удалим серый цвет и добавим синий.

Следующий шаг аналогичен предыдущему; снова добавим высоту и ширину и изменим фон на белый. На этот раз нам придется изменить размер шрифта. Нам нужно 12px, поэтому с помощью своей формулы желаемый размер (px) / родительский размер (px) = результант (em) получим 0.923em.

Еще давайте поменяем цвет текста на серый. Заметьте, что использован display:block. Если бы мы использовали float:left, меню плавно не анимировались бы, так что применим display: block для того, анимация происходила красиво и плавно. Также обратите внимание, что добавлен дополнительный стиль; мы применяем его к последнему дочернему элементу в под-ul. Это следует сделать для того, чтобы иметь возможность менять цвет границы.

Начинает смотреться реально хорошо!

Шаг 5: Стили активного состояния и проведения мышью над объектом

Сейчас мы добавим стили активного состояния меню и состояния проведения над ним мышью, специально для того момента, когда «аккордеон» развернут! Кроме того, добавим в активное меню нижнюю границу. Теперь вы думаете: «Почему мы не добавили класс активного состояния?». Что ж, друзья, как раз этим позже займется jQuery.

Шаг 6: Иконки главного меню

Добавим иконки, используя псевдокласс :before. Сначала возьмем все теги-привязки во вложенных ul, применим фоновый спрайт и установим его на no repeat. Назначим размер шрифта 36px, хотя здесь нет текста; применим 36px, чтобы можно было использовать ширину и высоту в 1em, что равняется сейчас 36px. Затем сдвинем элемент на 50% вниз и удалим .5em с верхнего поля, чтобы отцентрировать его.

Используя классы для каждого элемента списка под-ul’ов, возьмем их и назначим каждому соответствующую фоновую позицию спрайта.

Примечание: Я создал этот спрайт с помощью нового приложения под названием SpriteRight, если хотите поработать над ним, то в исходники я включил изображения и файлы проекта.

Шаг 7: Числа основного меню

Так, помните добавленные нами диапазоны? Ими создадутся числа!

Сначала добавим размер шрифта 11px (что примерно соответствует 0.857em). Мы разместим их абсолютно и сдвинем справа на 1em – снова em, чтобы они были «подвижными». Сдвинем число вниз на 50% от верха и удалим верхнее поле, чтобы разместить его по центру. Фон будет добавлен вместе с тенями блока, внутренней и внешней. Для создания ширины и высоты и «подвижности» снова применим отступ. Мы даже для border radius использовали em’ы; нам это пригодится, потому что если увеличить текст, они окажутся непропорциональными. Еще я добавил другой стиль для моментов, когда к ссылке применяется проведение курсором или активное состояние.

Шаг 8: Числа и указатели подменю

Этот процесс подобен предыдущему шагу, поэтому не стану вдаваться в подробности. Основные отличия здесь состоят в том, что я удалил цвет фона, изменил границу и цвет шрифта. Нам нужно добавить указатель, а для этого ещё раз довериться псевдоклассу :before. Определяем ширину и высоту и добавляем позиционирование слева, используя em, чтобы гарантировать «подвижность».

И наконец, состояние при наведении курсора (спасибо тем, кто в комментах указал это важное упущение). Просто применим к тексту-привязке, псевдоуказателю и числу внутри диапазона более тёмный цвет (#32373D).

Теперь все выглядит весьма круто, верно? Думаю, самое время добавить функциональность!

Шаг 9: Пора jQuery

Держу пари, вы ждали этого момента! Ну что ж, мы, наконец, добрались до jQuery. Прежде всего, нужно обратиться к библиотеке jQuery с помощью сервиса, предоставляемого Google’ом. Последняя текущая версия — 1.7.1. В раздел head своей HTML-страницы добавьте следующее:

Теперь добавьте кое-что в конец html-документа перед закрывающим тегом body. Не беспокойтесь о том, что это сбивает с толку, через минуту я все объясню.

Сначала сохраняем подменю и теги-привязки основного меню в две разные переменные, так к ним станет легче обращаться.

Так скрываются все подменю при загрузке страницы.

Сначала отдаем указание что-либо делать при щелчке по одному из тэгов-привязок основного меню.

Здесь мы препятствуем тэгам-привязкам следовать по ссылкам или менять адрес в адресной строке. Например, если вы создадите тэг-привязку со ссылкой на ‘#’ при щелчке на его, то теперь он не станет отображаться в адресной строке. Тэги-привязки в основном отключены.

Теперь отдадим указание о том, что ЕСЛИ у menu_a имеется класс ‘active’, то его следует удалить.

Здесь мы используем ‘.filter’ и ‘:visible’. Если меню открыто, сдвиньте его вверх с нормальной скоростью.

Если меню закрыто, добавить класс ‘active’ (так мы можем обратиться к хорошему стилю CSS) и сдвинуть его вниз с нормальной скоростью.

Теперь нужно использовать ELSE как часть своего условного оператора. Так, ELSE удаляет класс «active», и сдвигает меню вверх, чтобы скрыть его. Именно так можно кодировать любое меню без необходимости в перезагрузке страницы.

Примечание: Если вы хотите изменить скорость скольжения, измените normal на, скажем, ‘500’. Так меню станет сдвигаться за 500 миллисекунд.

Заключение

Итак, мы сделали все полностью! Создали код отличного вертикального навигационного меню Ормана с помощью CSS3 и jQuery! Оставайтесь на связи, чтобы получить подсказки и советы о том, как создать его с помощью одного лишь CSS3 и псевдоселектора :target.

Надеюсь, вы довольны этим учебником, спасибо за чтение!

Автор: Luke Spoor

Источник: //webdesign.tutsplus.com/

Редакция: Команда webformyself.

Метки: , , ,

Похожие статьи:

Комментарии Вконтакте:

Комментарии (41)