С появлением CSS3 у веб-дизайнеров и разработчиков появился целый мир новых возможностей. С анимацией, тенями, закругленными углами и более, элементы могут быть легко стилизованы..
Навигация по веб-сайту является одним из наиболее важных аспектов хорошего или неудачного опыта пользователей. Вместо того чтобы загружать ваше меню с отдельными изображениями или спрайтами, почему бы не сделать всю необходимое в CSS3? Нет необходимости в JQuery или JavaScript; не нужно загружать Photoshop. И давайте встанем на ступеньку выше за счет включения значка шрифта, чтобы добавить индивидуальности нашему меню.
Так что берите вашу любимую чашечку кофе, открывайте ваш любимый редактор кода, и давайте сделаем уникальное навигационное меню, используя только CSS3.
До того как мы начнем
Прежде чем мы углубимся в код для нашего меню, я хотел бы пройтись по некоторым инструментам, которые мы будем использовать в этом уроке, вы их также можете скачать и использовать в то время как вы будете следовать за уроком. Все они включены в. ZIP файла в конце статьи, которая также включает в себя окончательный код.
Фоновое изображение: Dark Denim от Subtle Patterns
Шрифт: Droid Droid Sans от WebFonts Google
Иконка шрифта: Iconic Icon Set от Анонима
CSS3 JavaScript: -prefix-free от Lea Verou
Хорошо, загрузили все нужное? Мы начнем с HTML, потом основной CSS, и наконец, приправим все CSS3.
HTML
Поскольку мы прогрессивны с CSS3 в нашей системе меню, я решил установить для нас самый простой HTML5. Мы не собираемся строить полный веб-сайта в этом уроке, а только меню.
Давайте начнем с кода для меню. Меню – это простой неупорядоченный список, с вложенными списками для субменю. Неупорядоченный список завернут в теги HTML5.
Как вы видите, у нас есть пять меню, четыре из которых имеют субэлементы. Следующий шаг, это сделать основное CSS стилирование, и только потом применить CSS3 и диапазоны к меню, чтобы получить иконки.
CSS
Чтобы создать хорошую базу для работы, мы добавим деним шаблон из Subtle Patterns и центрируем меню, основанное на 960.gs сетки. Мы также создадим класс Clearfix, который используются в нашей системе меню.
/* //meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-collapse: collapse; border-spacing: 0; } body { background: url('img/denim.png'); font-family: 'Droid Sans', sans-serif;; } .clearfix { clear: both; } .wrap { width: 940px; margin: 4em auto; }
Теперь мы вернемся к работе над дизайном меню. Во-первых, мы делаем дизайн верхнего уровня навигации, чтобы создать основные рамки.
Давайте пройдемся по этому коду. Меню будет охватывать всю ширину .wrap класса, который составляет 940 пикселей. Чтобы добавить немного пробела в первом пункте меню, мы добавим 10 пикселей паддинга(padding) на левой и правой стороне, и установить положение панели навигации на относительное(relative).
Этот момент будет очень важным позже. Элементы верхнего уровня меню размещаются слева, а также имеют относительное (relative) позиционирование. Затем мы стилизуем ссылки, которые устанавливаются для отображения: block;. Это немного отличается от системы меню в CSS, у которой отображается: inline;.
Выпадающие меню
В выпадающих меню вложен неупорядоченный список, поэтому давайте модифицировать их следующими. Опять же, мы собираемся работать с основными CSS.
/* Dropdown styles */ .menu ul { position: absolute; left: -9999px; list-style: none; } .menu ul li { float: none; } .menu ul a { white-space: nowrap; } /* Displays the dropdown on hover and moves back into position */ .menu li:hover ul { left: 5px; } /* Persistent Hover State */ .menu li:hover a { color: #222; } .menu li:hover ul a { background: none; } .menu li:hover ul li a:hover { }
Что? Куда делось наше меню? Не забывайте, мы пока находимся в процессе создания меню. Все станет на свои места, я обещаю. .menu ul устанавливает позицию в абсолютную (absolute) (помните, это неупорядоченный список находится внутри верхнего уровня списка элементов, который позиционируется относительно (relative), таким образом, .menu ul расположено относительно (relatively) к верхнему уровню списка элементов).
Далее, мы задаем команду выпадающем элементам из списка всплывать слева, создавая этим аккуратный вид выпадающим пунктам. На теге мы вкладываем пробел: nowrap; которая предотвратит длинные ссылки завертываться на две линии. Это действие поможет поддержать аккуратный стиль и сохранит пользовательский интерфейс простым в использовании.
Переходим к выкатывающемся елементам (hover states), при наведении курсора на элементы списка из верхнего уровня (.menu li) мы подкинем выкатку (hover) и нацелимся на наш суб неупорядоченный список, затем переместим список с «вне экрана» на 5 пикселей влево от списка элемента . Опять же, позиционирование относительное (relative) по отношению к верхнему уровню элементов списка, поэтому оно смещено на 5 пикселей от списка. Если бы вы убрали все относительные позиции верхнего уровня li, все ваши элементы выскочили быт под ссылкой “Home/Главная”.
Теперь нам надо убедиться, что, когда мы наводим мышкой на наше выпадающее меню, верхней уровень li поддерживает стиль, а выпадающее меню нет. Именно здесь вступает в игру ваше .menu li:hover и .menu li:hover ul. Эта модель задает фиксированую функцию при навождении мышки.
CSS3
Теперь мы подошли к самому интересному. Спецификации CSS3 представила много захватывающих инструментов для веб-дизайнеров и разработчиков, которые используют современные веб-браузеры. Конечно, не все браузеры поддерживают все функции CSS3 (проверьте css3files.com для большей инфо что работает, а что нет), но многие из характеристик ухудшаются изящно и не нарушают дизайн.
Давайте добавим немного CCS3 в панель навигации, в неупорядоченный список верхнего уровня и в элементы списка.
nav { background: -webkit-gradient(linear, center top, center bottom, from(#fff), to(#ccc)); background-image: linear-gradient(#fff, #ccc); border-radius: 6px; box-shadow: 0px 0px 4px 2px rgba(0,0,0,0.4); padding: 0 10px; position: relative; } .menu li a:hover { background: -webkit-gradient(linear, center top, center bottom, from(#ededed), to(#fff)); background-image: linear-gradient(#ededed, #fff); border-radius: 12px; box-shadow: inset 0px 0px 1px 1px rgba(0,0,0,0.1); color: #222; }
Сначала в приведенном выше коде находится панель навигации. Мы добавим линейный градиент от белого до светло-серого (с использованием как стандартных описаний градиента, так и старых-WebKit-стилей, чтобы сохранить совместимость со старыми браузерами. Мы закругляем панель навигации с 6 пикселевым радиусом границ.
«При наведении мышкой» описании, мы добавляем противоположные линейнные градиенты, а также немного закругленные углы, и вставляем тени для окн, давая нашим ссылкам вид, как будто элементы меню выпадают в навигационную панель. В общем, очень аккуратный вид. Прежде чем мы перейдем к настройкам «вождение мышкой», я хочу вернуться к рассмотрению некоторых HTML в связи с некоторыми CSS3.
Я использовал шрифт под названием Iconic, который встроен с CSS3 @font-face имение, а затем вызвал диапазонные тэги на элементах меню. После загрузки файлов, вы можете получить код с CSS из архива, а также можете скопировать файлы для шрифтов. Если вы измените относительный путь, не забудьте изменить src в @font-face.
@font-face { font-family: 'IconicStroke'; src: url("fonts/iconic/iconic_stroke.eot"); src: local('IconicStroke'), url("fonts/iconic/iconic_stroke.svg#iconic") format('svg'), url("fonts/iconic/iconic_stroke.otf") format('opentype'); } .iconic { color:inherit; font-family: "IconicStroke"; font-size: 38px; line-height: 20px; vertical-align: middle; }
- Home
- About
- Services
- Products
- Contact
Так как верхний уровень навигации обновлен, мы переходим к окончательному стилированию выпадающего меню, который будет иметь некоторые новые свойства CSS3, таких как затененность и переход. Итак, во-первых, .menu ul:
.menu ul { position: absolute; left: -9999px; list-style: none; opacity: 0; transition: opacity 1s ease; }
Две большие свойства, которые нам нужно рассмотреть, это описание непрозрачности и перехода. Непрозрачность установлена на 0, и переход заставит выпадающее меню перейти от непрозрачности 0 до прозрачности 1 в течение 1 секунды. Теперь давайте напишем функциональность для «при наведение мышкой»:
.menu li:hover ul { background: rgba(255,255,255,0.7); border-radius: 0 0 6px 6px; box-shadow: inset 0px 2px 4px rgba(0,0,0,0.4); left: 5px; opacity: 1; }
Функционал «Наведение мышкой» достаточно сложный. Давайте построчно его разберем.
Верхнея строка делает фон чисто белым, а затем задает непрозрачность до 70%, чтобы некоторый дизайн заднего фона мог проблеснуть.
Я закруглил два нижних угла, оставляя верхние углы квадратными, чтобы создать иллюзию, что выпадающие меню выходит из панели навигации.
Третья строка, это там где начинается магия. В связи с расположением панели управления и списка элементов, использование Z-индекса практически невозможно для слоения, чтобы получить соответствующий эффект. Для достижения впечатление, что выпадающее меню находится под панелью навигации, мы установили свет, подобно вставке тени для окна, которая опускается в выпадающем меню. И, наконец, установили прозрачность до 1, что координирует переход, который мы установили ранее.
Остальной CSS3 довольно прост, и в основном повторяющийся от того, что мы уже прошли:
.menu li:hover a { background: -webkit-gradient(linear, center top, center bottom, from(#ccc), to(#ededed)); background-image: linear-gradient(#ccc, #ededed); border-radius: 12px; box-shadow: inset 0px 0px 1px 1px rgba(0,0,0,0.1); color: #222; } .menu li:hover ul a { background: none; border-radius: 0; box-shadow: none; } .menu li:hover ul li a:hover { background: -webkit-gradient(linear, center top, center bottom, from(#eee), to(#fff)); background-image: linear-gradient(#ededed, #fff); border-radius: 12px; box-shadow: inset 0px 0px 4px 2px rgba(0,0,0,0.3); }
Готово!
Высокий конверсий!