Html css меню


  • Вертикальное меню
  • Горизонтальное меню
  • Выпадающее меню

Если ваш веб-сайт не ограничивается одной веб-страницей, то стоит подумать о добавлении панели навигации (меню). Меню — раздел веб-сайта, предназначенный помогать посетителю перемещаться по сайту. Любое меню представляет собой список ссылок, ведущих на внутренние страницы сайта. Самым простым способом добавить панель навигации на сайт является создание меню с помощью CSS и HTML.

Вертикальное меню

Первым шагом создания вертикального меню будет создание маркированного списка. Также нам нужно будет иметь возможность идентифицировать список, поэтому мы добавим к нему атрибут id с идентификатором «navbar». Каждый элемент <li> нашего списка будет содержать по одной ссылке:

  <ul id="navbar">   <li><a href="#">Главная</a></li>   <li><a href="#">Новости</a></li>   <li><a href="#">Контакты</a></li>   <li><a href="#">О нас</a></li>  </ul>  

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


  #navbar {   margin: 0;   padding: 0;   list-style-type: none;   width: 100px;  }  

Теперь пришло время стилизовать сами ссылки. Мы добавим к ним фоновый цвет, изменим параметры текста: цвет, размер и насыщенность шрифта, уберем подчеркивание, добавим небольшие отступы и переопределим отображение элемента <a> со строчного на блочный. Дополнительно были добавлены левая и нижняя рамки к пунктам списка.

Самой важной частью наших изменений является переопределение строчных элементов на блочные. Теперь наши ссылки занимают все доступное пространство пунктов списка, то есть для перехода по ссылке нам больше не нужно наводить курсор точно на текст.

  #navbar a {   background-color: #949494;   color: #fff;   padding: 5px;   text-decoration: none;   font-weight: bold;   border-left: 5px solid #33ADFF;   display: block;  }  #navbar li {   border-left: 10px solid #666;   border-bottom: 1px solid #666;  }  

Мы объединили весь код, описанный выше, в один пример, теперь, нажав на кнопку попробовать, вы можете перейти на страницу с примером и увидеть результат:


ay: block; } </style> </head> <body> <ul id="navbar"> <li><a href="#">Главная</a></li> <li><a href="#">Новости</a></li> <li><a href="#">Контакты</a></li> <li><a href="#">О нас</a></li> </ul> </body> </html>

Попробовать »

При наведении курсора мыши на пункт меню его внешний вид может изменяться, привлекая к себе внимание пользователя. Создать такой эффект можно с помощью псевдо-класса :hover.

Вернемся к рассмотренному ранее примеру вертикального меню и добавим в таблицу стилей следующее правило:

  #navbar a:hover {   background-color: #666;   border-left: 5px solid #3333FF;  }  

Попробовать »

Горизонтальное меню

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


Горизонтальное меню можно создать путем стилизации обычного списка. Свойству display для элементов <li> нужно присвоить значение inline, чтобы пункты списка располагались друг за другом.

Для размещения пунктов меню по горизонтали, сначала создадим маркированный список с ссылками:

  <ul id="navbar">   <li><a href="#">Главная</a></li>   <li><a href="#">Новости</a></li>   <li><a href="#">Контакты</a></li>   <li><a href="#">О нас</a></li>  </ul>  

Напишем для нашего списка пару правил, сбрасывающих стиль используемый для списков по умолчанию, и переопределим пункты списка с блочных на строчные:

  #navbar {   margin: 0;   padding: 0;   list-style-type: none;  }  #navbar li { display: inline; }  

Попробовать »

Теперь нам осталось лишь определить стилевое оформление для нашего горизонтального меню:

  #navbar {   margin: 0;   padding: 0;   list-style-type: none;   border: 2px solid #0066FF;   border-radius: 20px 5px;   width: 550px;   text-align: center;   background-color: #33ADFF;  }  #navbar a {   color: #fff;   padding: 5px 10px;   text-decoration: none;   font-weight: bold;   display: inline-block;   width: 100px;  }  #navbar a:hover {   border-radius: 20px 5px;   background-color: #0066FF;  }  

Попробовать »

puzzleweb.ru

1. Горизонтальное выпадающее меню на CSS3


Html css меню

Источник | Пример

Первый туториал CSS3 Dropdown Menu — самый новый в подборке (за апрель 2016). Плюсы решения: в данном горизонтальном выпадающем меню для сайта в подпунктах есть иконки, реализация и сам CSS код достаточно простые для понимания и внедрения.

Шаг1 — HTML разметка

Первым делом создаем неупорядоченный список в HTML с якорными ссылками (#) для его элементов. Туда же в один из пунктов добавляем еще один вложенный список, который будет отвечать за подменю.

Шаг2 — отображение меню

Удаляем лишние отступы в CSS для элементов горизонтального выпадающего меню сайта. На этом же этапе установим фиксированную ширину и высоту пунктов меню, а также добавим закругленные углы.

Шаг3 — оформление ссылок


Кроме базовых фишек в стилях (шрифт, цвет, высота) используем опцию тени text-shadow и создаем плавный переход цвета текста при наведении. Также добавляем в меню разделители, убирая границу у первого элемента слева и у последнего справа.

Шаг4 — подменю

Поскольку у нас меню сайта на CSS выпадающее, то следует задать также оформление вложенному списку. Вначале ставим отступ 40px сверху и 0px слева + добавлем округленные углы. Для показа/скрытия подменю изначально устанавливаем свойство прозрачности (opacity) равное нулю, а при наведении — единице. Для создания эффекта появления подменю указываем значение высоты списка в ноль, а при hover = 36px.

Ширину ссылок ставим = 100px, внизу всех элементов кроме последнего добавляется граница border-bottom. Также, по желанию, вы можете разместить картинки для пунктов подменю (внимание! не забудьте изменить пути к изображениям в коде на используемые вами).

Мне лично нравится простота реализации и использование иконок. Вот итоговый код с codepen:


2. Простое выпадающее CSS3 меню

Html css меню

Источник

Вариант от Josh Riser визуально похож на предыдущее выпадающее меню на HTML и CSS. В коде нет дочернего селектора " > " (полезен в многоуровневых конструкциях), но автор удачно использует эффекты CSS3 (transition, box-shadow и text-shadow) для более красивого результата. По ссылке в источнике отсутствует описание процесса создания горизонтального выпадающего меню, поэтому я сразу приведу итоговый код:

3. Выпадающее меню с блоком поиска

Html css меню

Источник | Пример

В данном примере мы рассмотрим как сделать выпадающее меню на CSS, в котором кроме пунктов будет находится блок поиска. Подобную реализацию часто можно встретить в современных шаблонах сайтов. По времени внедрения и сложности решение является чуть сложнее предыдущих. Оно опубликовано в мае 2013, поэтому, возможно, некоторые вещи вам придется подправить, хотя при нашем тестировании все отлично работало.


HTML код

Для навигации, как всегда, используется неупорядоченный список (с классом nav). Обычные пункты меню являются элементами списка (li) и содержат ссылки (a href) без каких-либо классов и ID. Исключением являются 3 специализированных элемента данного горизонтального выпадающего меню с такими ID:

  • settings — ссылка картинка;
  • search — блок с поиском и соответствующей кнопкой;
  • options — содержит подменю (реализовано через список с классом subnav).

Также в коде увидите скрипт prefixfree для использования свойств CSS без префиксов. Итоговый вариант HTML для выпадающего меню имеет вид:

CSS для меню

1. Базовые стили и элементы меню

Во-первых, указываем шрифт Montserrat, темный серый фон и фиксированную высоту для пунктов меню. Все элементы имеют выравнивание float: left и позиционирование relative дабы потом можно было добавить подменю с position: absolute;

2. Оформление ссылок

Для пунктов меню применяется базовое оформление + css hover эффект при наведении. Высота такая же как и в классе nav. Для #settings ссылки-картинки в начале меню задается выравнивание.


3. Блок поиска

Данный элемент имеет фиксированную ширину и состоит из нескольких частей — поля ввода (#search_text) с зеленым фоном и кнопки поиска (#search_button). В некоторых браузерах цвет фона может быть серым.

4. Выпадающее подменю

Финальный штрих позволит нам как сделать выпадающее меню на CSS, которое срабатывает для последнего пункта #options.

В стилях найдете вставку фонового изображения треугольника (triangle.png) для обозначения подменю — не забудьте указать правильный путь для этой и других картинок в примере. Появлением подменю реализуется с помощью свойства opacity. Итоговое решение на codepen:

4. Многоуровневое выпадающее CSS меню

Html css меню

Источник

В данном варианте в основном используются приемы CSS2.1, решение плюс-минус новое — за март 2015. Если вам не хватает одного подуровня в горизонтальном выпадающем меню для сайта, то этот пример содержит сразу три. С помощью псевдокласса :only-child для пунктов добавляется символ «+» обозначающих наличие подменю.


В целом, неплохой и несложный пример. Не будем детально описывать процесс реализации, т.к. он похож на предыдущие — сначала создаете HTML каркас, а потом постепенно добавляете для него стили. Итоговый код скачивайте по ссылке на источник, частично его можно глянуть в Codepen:

Итого

Выше мы рассмотрели 4 варианта как сделать выпадающее меню на CSS + HTML для шапки сайта (header), хотя подобных примеров в сети гораздо больше. Есть решения с jQuery, но это, скорее всего, пригодится только для реализации каких-то специальных эффектов и нестандартных задач. В большинстве случаев хватит связки CSS + HTML, тем более, что сейчас главные требования к меню — это удобство и быстрая скорость загрузки.

Напоследок два замечания по кодам выше. В некоторых примерах для выпадающего меню в CSS используются изображения, поэтому вам придется внимательно просмотреть пути к картинкам и указать правильные значения для своего сайта. Во-вторых, часть решений 2х-3х летней давности, поэтому следует еще раз дополнительно проверять их работоспособность в разных браузерах.


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

design-mania.ru

Начинаем верстку нашего горизонтального меню!

Как вы наверняка догадываетесь первым делом нам нужно создать html стараницу со стандартной разметкой и подключить к ней файл стилей. Не буду подробно останавливаться на данном шаге, так как все-таки надеюсь, что  вы не настолько начинающие, чтобы подробно разсказывать вам, что такое body и head и как подключаются стили. Скажу лишь, что помимо стилей для нашего меню в файл css я напишу самый простой reset, чтобы обнулить стили и добиться одинакового отображения отступов во всех браузерах. Вот собственно так выглядит мой простейший ресет:

  *{  	padding:0;  	margin:0;  }  

Про обнуление стилей тоже пока ничего подробно говорить не буде, так как по сути это тема для  еще одной статьи, единственное, что вам нужно знать о вышеописанном коде, это то что благодаря данному коду у всех элементах страницы которые мы будем писать обнулятся отступы margin и padding, это нужно делать, для того чтобы наша страница одинаково выглядела во всех браузерах.

Итак что в нас есть на данном этапе? У нас есть html страница со стандартной разметкой:

  <!DOCTYPE html>  <html>  <head>      <meta charset="UTF-8">      <title>Горизональное меню</title>      <link rel="stylesheet" href="style.css">  </head>  <body>       </body>  </html>  

И у нас есть подключенный к данной странице файл стилей (у меня это style.css), со следующем содержимым:

  *{  	padding:0;  	margin:0;  }  

Следующим этапом будет создания html разметки для нашего меню.

Создаем разметку для меню

В нашей разметке мы будем использовать новый тег <nav>, который появился в HTML5,  я решил вас сразу приучать к новым тегам, чтобы так сказать следовать тренду и стандарту.Несмотря на то, что новые теги HTML 5 не поддерживаются старыми браузерами я все же настоятельно рекомендую использовать их в своей верстка, так как рано или позно вам всеравно нужно будет перейти на них, как в свое время верстальщики перешли от с табличной верстке к блочной, такова реальность, лучше следовать тренду!

И раз мы уже заговорили о поддержке новых тегов html 5, чтобы у нас не возникало проблем с этим в старых браузерах, в наш документ нужно подключить специальную библиотеку — html5shiv. Делается это вставкой в
раздел head вашей страницы следующего кода:

  <!--[if lt IE 9]>  <script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>  <![endif]-->  

Все после этого тег <nav>(и другие теги оносящиеся к HTML5) будут нормально восприниматься старыми браузерами.

Вернемся непосредственно к нашей разметке. Далее нам нужно в наш тег  <nav> вставить маркированый список, у меня это выглядит так:

  <nav class="menu">          <ul>              <li><a href="#">Главная</a></li>              <li><a href="#">О нас</a></li>              <li><a href="#">Портфолио</a></li>              <li><a href="#">Блог</a></li>              <li><a href="#">Контакты</a></li>          </ul>      </nav>  

Так же как видите я к нашему меню <nav>  добавил класс .menu, сделал я это для того, чтобы если вдруг на нашей странице будет использоваться еще один тег <nav> у нас небыло проблем со стилями.

Итак с разметкой мы вроде закончили пора приступать непосредственно к написанию стилей, так как сейчас наше меню выглядит мягко говоря не очень:

html_ul

Пишем стили нашего горизонтального меню

И так первым делом при верстке меню нам нужно убрать маркеры списка, они нам явно не нужны, делается это так:

  ul{  	list-style:none;  }  

После этого наше меню станет таким:

menu2

Мне не очень нравится, что наше меню прилеплено к краям браузера, давайте исправим это:

  .menu{  	width:960px;  	margin:50px auto;  }  

Данным кодом мы задали ширину нашему меню, дали ему отступы сверху и низу по 50px и расположили по центру. Кто не знает если в блочного элемента есть ширина то для того чтобы расположить данный элемент строго по центру нам нужно всего лишь задать ему внешний отступ (margin) справа и слева со значением auto.

Следующим этапом нам нужно уже наконец-то сделать наше меню горизонтальным, делается это заданием элементам  <li> float: left

  .menu li{  	float:left;  }  

Все теперь наше меню стало горизонтальным.

gorizont-menu

Если вы не поняли, что именно случилось и что делает свойство float рекомендую погуглить информацию о данном свойстве и хорошенько изучить его, так как
без него не обходится ни одна страница верстки, это я вам точно говорю. Ну да ладно продолжаем!

Давайте теперь немного поработаем с ссылками меню и преобразуем их в нормальный вид. Предлагаю задать нашим ссылкам отступы слева и сверху, убрать нижнее подчеркивание, задать цвет текста и цвет фона:

  .menu li а{   display:block;/* Делаем ссылку блочным элементом*/   padding:12px 20px;/* Задаем внутрение отступы */   text-decoration: none; /* убираем нижнее подчеркивание */   color:#fff;/* делаем цвет ссылки белым */   background:#444;/* делаем цвет фона темным */   font:14px Verdana, sans-serif;/* задаем размер и название шрифта */  }  

Здесь одно из самых важных правил — display:block;. Дело в том, что по умолчанию ссылки являются строчными элементами, а к строчным элементам отступы в разных браузерах применяются по разному, поэтому  желательно ссылку сделать блочным элементом и только тогда применять к ней свойства связанные с внешним или внутренним отступами. Сейчас не хочется нагружать вас лишней информацией со временем на реальных примерах вы  сами поймете зачем здесь делается такой акцент.

Давайте посмотрим что у нас получилось, обновляем страницу браузера и тадам!:

menu3

Как видите выглядит не плохо, можно сказать, что в принципе наше меню готово. Единственное, что нужно еще сделать — это задать свет ссылок при наведении, ну еще как мне кажется меню лучше будет смотреться с разделителями между пунктами.

Начнем с разделителей:

  .menu li{  	border-left:1px solid #666;  }  .menu li:first-child{  	border-left:none;  }  

Что мы здесь сделали? Да все очень просто мы задали для наших пунктов (<li>) границу слева размером в 1px и цветом #666;. Что касается селектора .menu li:first-child , то здесь мы используем специальный псевдо- класс, который позволяет выбрать первый дочерний элемент списка. Про псевдоклассы тоже рекомендую более подробно почитать в интернете, узнаете много полезного.

Опять смотрим, что у нас получилось:

menu4

По моему с разделителями намного лучше.

Итак нам остается только задать цвет ссылки при наведении курсора, здесь тоже все очень просто:

  .menu li a:hover{  	background:#888;  }    

Опять используя специальный псевдокласс, в это раз — hover, мы задаем цвет ссылке при наведении на неё курсора, смотрим:

hover-menu

По моему крутяк ? , надеюсь у вас вышло такое же меню как у меня.

На этом буду заканчивать данный урок, очень надеюсь, что он вам был полезен и теперь вы знаете, как верстать простое горизонтальное меню на чистом html и css. Конечно, мы сверстали одноуровневое меню, немного сложней будет с двухуровневым мену (с вложенным списком), но это уже тема для другого урока, на этом у меня все. Заходите еще, буду рад!!!

webmox.ru

Как сделать в html5 меню

От автора: приветствую вас на нашем блоге о сайтостроении. Это цикл статей, посвященный новой спецификации и сегодня я бы хотел вам рассказать, как сделать в html5 меню и чем этот процесс отличается от такого же в предыдущих версиях языка.

В чем отличия

Прежде всего я хотел бы сказать, что спецификация не является уж такой и новой – она начала свое становление еще в 2009 году. Собственно, с тех пор происходит постоянное развитие – в html5 появляются новые возможности, современные браузеры все больше и больше поддерживают эти самые возможности, так что уже скоро можно будет говорить о полной поддержке этой технология, хотя она и не является чем-то единым целым, это скорее набор новых возможностей, каждая из которых является самостоятельной.

Ну хорошо, а чем же отличается создание главной навигации (меню), раз уж вы читаете статью на эту тему, то какие-то отличия точно должны быть. Ну а как раньше создавалось меню? Обычно для этого использовали маркированный список, который помещали в дополнительный контейнер для всей навигации – обычный div.

Так вот, с появлением новых тегов теперь можно поступить более правильно – вместо тега div обернуть меню в nav – новый семантический элемент, который создан специально для того, чтобы собирать в него самые главные ссылки, группировать их вместе.

В nav можно поместить как список, так и просто набор ссылок. Мне кажется, это даже более простое и правильное решение, хотя во многих шаблонах по-прежнему видно реализацию меню с помощью тегов ul, li, a.

Интересно, что контейнер nav создан именно для приоритетных ссылок на странице. На самом деле таких конйтенеров на странице может быть больше одного, но помещать в них стоит только те ссылки, которые действительно формируют главную навигацию (например, верхнее главное меню и его дубль в футере страницы).

Как сделать с помощью html5 горизонтальное меню

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

Даже не нужно никакого обрамления в список, все изначально будет отображаться в одну строку, так как ссылки – строчные элементы.

Другое дело, что по оформлению они очень ограничены из-за своих строчных свойств. Вы сможете оперировать только такими свойствами как: цвет, размер шрифта, внешние отступы. Если же вы захотите задать определенный фоновый цвет, сделать разделители и добавить внутренние отступы (либо определить размер каждого пункта меню) то со строкой так сделать не получится.

Тут нам придется преобразовывать наши пункты в блочные элементы. Для этого им нужно записать свойство:

Теперь они идут сверху вниз, то есть наша навигация стала вертикальной. Чтобы вновь превратить ее в горизонтальную, нужно добавить определенные свойства. Например, вместо блочного типа определить для них блочно-строчный, либо задать им (float: left). Читайте подробнее об этих способах здесь.

Html css меню

Вертикальная навигация

Обычно, чтобы сделать вертикальное меню в html5 используют список, но нам годится и та разметка, которую я дал вам выше. Как вы увидели, если преобразовать ссылки в блочные, то они автоматически выстроятся друг за другом сверху вниз, потому что два блока не могут стоять на одной строке.

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

Html css меню

В качестве фонового цвета был использован градиент, чтобы меню выглядело более эффектно. Также мы ограничили ширину блоков, хотя на реальном сайте вертикальная навигация обычно стоит где-то в боковой колонке, для которой уже стоят ограничения по ширине, поэтому там это может и не пригодится.

Что еще можно сделать

Наконец, давайте посмотрим, как можно сделать меню в html5 с изменением цвета пунктов при наведении. За добавление стилей к элементу при наведении отвечает псевдокласс hover. Соответственно, достаточно его добавить к ссылкам и написать нужные стили.

Html css меню

Теперь при наведении на ссылку она будет черного цвета, а фоновый цвет будет белым. Если вам нужно произвести изменение плавно, допишите свойство transition, значением которого выступает время в секундах, за которое должны поменяться стили.

Ну а что еще можно сделать с нашей навигацией, это уже вы сами можете решить. Это был просто пример того, как ее можно создать и оформить. Вы можете воспользоваться любыми css-свойствами, которые только знаете. Кстати, для очень эффектного оформления любых элементов на веб-странице я рекомендую вам просмотреть видеокурс по CSS3, который есть в нашем премиум-разделе.

Там вы можете найти всю соответствующую информацию: тени, повороты, трансформации, полупрозрачность и т.д. Все лучшие приемы из новой технологии вы можете найти там.

Итак, сегодня мы с вами разобрали процесс создания простейшей навигации с помощью нового тега, а также посмотрели, как это оформить. Подписывайтесь на webformyself, если вам нравятся наши уроки и вы хотите знать о сайтостроении больше.

Html css меню

webformyself.com

Инструменты для создания панели навигации

В языке разметки существует несколько способов создания меню. Основная их концепция заключается в использовании ненумерованного списка. Таким образом, в привычном для нас html 4 разработчики прописывают на станице теги <ul> и <li>.

Как оговаривалось в предыдущих публикациях, парный элемент <ul> создает маркированный список, а <li> — один элемент списка. Для наглядности давайте напишем код простого меню:

Однако с появлением платформы html5 язык разметки пополнился дополнительными тегами. Именно поэтому меню современных веб-сайтов создается при помощи специального тега <menu>. В использовании этот элемент ничем не отличается от маркированных списков.

Вместо единицы <ul> прописывается <menu>. Однако существенные различия появляются если судить со стороны работы браузеров. Так, второй пример ускоряет работу поисковых программ и роботов в интернете. При анализе структуры сайта они сразу понимают, что данный кусок кода отвечает за карту сайта.

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

Создадим-ка горизонтальную навигационную модель

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

В качестве примера мы создадим горизонтальную панель, пункты меню которого будут оформлены при помощи css (каскадных таблиц стилей), а точнее трансформированы. Так, каждый отдельный элемент будет находится в скошенном прямоугольнике. Заинтриговал?

Горизонтальное меню

Для трансформации мы используем свойство css под названием transform. Чтобы указать трансформацию, используется встроенная функция skewX, в которой угол наклона указывается в градусах.

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

  • -ms- (Internet Explorer)
  • -o- (Opera)
  • -webkit- (Chrome, Safari)
  • -moz- (Firefox)

А теперь полученные знания применим к написанию примера.

А теперь вертикально. Я сказал вертикально!

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

Для этого я воспользовался еще одним свойством css border-radius.

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

Как вы уже заметили, главное изменение в этом коде – это отсутствие объявления display: inline-block, который собственно и отвечал за горизонтальное расположение пунктов навигации.

Подпункты в меню: выпадающий список

Мы с вами рассмотрели основные группы навигационных панелей, однако существует еще несколько разновидностей или лучше сказать дополнений.

Выпадающее меню на css

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

Ниже я прикрепил код небольшой программки, в которой реализуется данный подход.

В данном примере я разделил единицы меню на два класса:

  1. m-menu
  2. s-menu

Первый класс отвечает за основное меню, а s-menu – за подменю.

В коде можно встретить такой прием, как .m-menu > li:hover или .m-menu > li.

Так, при помощи :hover указывается, как будет вести себя элемент при наведении на него курсора.

При этом знак «>» видоизменяет селектор так, чтобы блочно-строчными были только объекты, относящиеся к верхнему уровню.

Изначально подменю было задано display: none, что оповещает обработчик скрывать данный объект. После наведения на элемент навигации с указанием hover, значение свойства display меняется на block и поэтому открывается выпадающий список.

Как видите, реализация такого приема очень простая.

Теперь вы освоили основные виды навигационных панелей и можете самостоятельно их видоизменять, дополнять и модернизировать. Если вам понравилась моя статья, то подписывайтесь на обновления блога и делитесь источником знаний с друзьями и коллегами. Пока-пока!

С уважением, Роман Чуешов

romanchueshov.ru

Простое HTML меню

По смыслу меню является списком разделов сайта, поэтому логично для меню использовать тег ul — маркированный список. Кроме того, в HTML5 появился новый тег, который следует использовать для обозначения области навигации по сайту — nav. Использование этих двух тегов позволит поисковой системе точнее разобраться в структуре нашего сайта.

В качестве примера возьмём меню из 4-х пунктов: Главная, Статьи, Услуги и Контакты. Таким образом код HTML нашего меню будет выглядеть так:

 <nav class='hmenuA'>  <ul>  <li><a href="#">Главная</a></li>  <li><a href="#">Статьи</a></li>  <li><a href="#">Услуги</a></li>  <li><a href="#">Контакты</a></li>  </ul> </nav> 

Если у вас nav используется только для главного горизонтального меню, можно обойтись без указания класса и все стили описать с использованием nav в качестве опорного селектора. Но я буду показывать несколько вариантов меню, поэтому добавил класс hmenuA, чтобы можно было применить разные стили к разным вариантам меню. Буква A на конце класса потому, что будут еще варианты B и С

Пока что наше меню совсем не похоже на горизонтальное. Выглядит оно вот так:

В первую очередь необходимо убрать маркеры списка и лишние отступы:

  .hmenuA > ul {  list-style: none;  margin: 0px;  padding: 0px;  } 

К элементам списка мы применяем режим inline-block:

  .hmenuA > ul > li {  display: inline-block;  } 

Этот режим означает, что «снаружи» элементы списка будут обрабатываться как строчные элементы, т.е. они вытянутся в одну строку. Внутри же они будут по-прежнему блочными элементами. Получается горизонтальная строка меню:

Видите пробелы между элементами меню? Это не отступы, а реальные текстовые пробелы. Они возникли из-за того, что HTML-код был разбит на несколько строк, и «пустые» символы между пунктами меню браузер интерпретировал как пробелы между «словами». Эту особенность надо учитывать при использовании режима inline-block.

В принципе, эти пробелы нам не очень мешают. Но если вам при вёрстке меню потребуется задать точные расстояния отступов между пунктами меню или прижать пункты меню друг к другу вообще без отступов, пробелы нам помешают. Поэтому при вёрстке горизонтальных панелей inline-block-ом принято все ненужные пробелы убирать. Я исправил HTML код меню так, чтобы между тегами не было лишних пробелов. Чтобы код оставался нормально читаемым, я поместил переводы строк внутрь тегов, перед закрывающей угловой скобкой. Вот такой код получился:

 <nav class='hmenuA'>  <ul>  <li><a href="#">Главная</a></li  ><li><a href="#">Статьи</a></li  ><li><a href="#">Услуги</a></li  ><li><a href="#">Контакты</a></li>  </ul> </nav> 

Теперь пробелы исчезли:

Не бойтесь, что пункты меню сливаются. Сейчас мы добавим немного оформления, и всё станет намного симпатичнее:

  .hmenuA > ul {  list-style: none;  margin: 0px;  padding: 0px;  background-color: #d0e0ff;  text-align: center;  }   .hmenuA > ul > li {  display: inline-block;  }   .hmenuA > ul > li > a {  display: block;  padding: 0 30px;  text-decoration: none;  color: #088;  line-height: 50px;  font-family: "Verdana", "Arial";  font-size: 18px;  } 

text-align: center используется, чтобы выровнять меню по центру страницы. Та как мы указали, что пункты меню следует воспринимать как строчные элемениты, они выравниваются при помощи text-align.

Высоту меню я задал, указав line-height. Этот приём позволяет одновременно указать высоту блока и выровнять текст по центру блока в вертикальном направлении.

Для тега a я также задал режим display: block, это делает ссылкой, на которую можно надать, весь прямоугольник пункта меню, а не только небольшую область текста.

Результат:

Как поведёт себя наше меню при уменьшении ширины страницы? Уменьшите окно браузера по ширине так, чтобы меню перестало в него помещаться. Что происходит? Меню из однострочного становистя двустрочным. (Или даже трёх- и четырёхстрочным, если сделать окно браузера совсем узким.)

Если вы не хотите, чтобы меню становилось многострочным, вам придётся ограничить минимальную ширину страницы, подобрав подходящее значение min-width для тега body.

Давайте добавим немного анимации. Самый простой вариант — подчёркивание пунктов меню при наведении мыши. Но так как простое подчёркивание — это совсем скучно, давайте сделаем, чтобы оно появлялось и исчезало плавно.

Добавим к стилям следующее:

  .hmenuA > ul > li > a {  position: relative;  }   .hmenuA > ul > li > a:after {  content: ' ';  position: absolute;  height: 2px;  background-color: transparent;  bottom: 10px;  left: 30px;  right: 30px;  transition: background-color 0.6s ease;  }   .hmenuA > ul > li > a:hover:after {  background-color: #088;  } 

Результат:

Другой вариант анимации:

  .hmenuA > ul > li > a {  position: relative;  }   .hmenuA > ul > li > a:after {  content: ' ';  position: absolute;  height: 2px;  background-color: #088;  bottom: 10px;  left: 30px;  right: 100%;  transition: right 0.7s ease;  }   .hmenuA > ul > li > a:hover:after {  right: 30px;  }  

Посмотрим еще несколько вариантов, как можно оформить меню. Всё ограничивается лишь вашей фантазией.

Меню с плоскими кнопками

Вариант меню с плоскими кнопками и появлением окантовки при наведении:

 <style>  .hmenuB > ul {  list-style: none;  margin: 0px;  padding: 0px;  text-align: center;  }   .hmenuB > ul > li {  display: inline-block;  padding: 3px;  }   .hmenuB > ul > li > a {  display: block;  padding: 0 15px;  text-decoration: none;  background-color: #349;  color: #fff;  line-height: 36px;  font-family: "Verdana", "Arial";  font-size: 16px;  transition: background-color 0.7s ease;  position: relative;  }   .hmenuB > ul > li > a:hover {  background-color: #119;  }   .hmenuB > ul > li > a:after {  content: ' ';  position: absolute;  background-color: transparent;  border: 1px solid transparent;  transition: border-color 0.7s ease;  top: 2px;  bottom: 2px;  left: 2px;  right: 2px;  }   .hmenuB > ul > li > a:hover:after {  border-color: #fff;  }  </style>  <nav class='hmenuB'>  <ul>  <li><a href="#">Главная</a></li  ><li><a href="#">Статьи</a></li  ><li><a href="#">Услуги</a></li  ><li><a href="#">Контакты</a></li>  </ul> </nav> 

Меню с рельефными разделителями

Манипулируя цветом границ на стыке пунктов меню, можно добиться появления псевдо-рельефной линии. Похожее меню используется в шапке этого сайта.

 <style>  .hmenuC > ul {  list-style: none;  margin: 0px;  padding: 0px;  text-align: center;  background-color: #322;  }   .hmenuC > ul > li {  display: inline-block;  border-left: 1px solid rgba(255, 255, 255, 0.1);  border-right: 1px solid rgba(0, 0, 0, 0.5);  }   .hmenuC > ul > li:first-child {  border-left-color: transparent;  }   .hmenuC > ul > li:last-child {  border-right-color: transparent;  }   .hmenuC > ul > li > a {  display: block;  padding: 0 15px;  text-decoration: none;  color: #fff;  line-height: 36px;  font-family: "Verdana", "Arial";  font-size: 16px;  transition: all 0.7s ease;  }   .hmenuC > ul > li > a:hover {  text-decoration: underline;  } </style>  <nav class='hmenuC'>  <ul>  <li><a href="#">Главная</a></li  ><li><a href="#">Статьи</a></li  ><li><a href="#">Услуги</a></li  ><li><a href="#">Контакты</a></li>  </ul> </nav> 

www.helpful-stuff.ru

Как сделать горизонтальное меню: разметка и примеры оформления

  • Содержание:
  • HTML-разметка и базовые стили для горизонтального меню
  • 1. Адаптивное меню с эффектом подчёркивания при наведении на ссылку
  • 2. Адаптивное меню для свадебного сайта
  • 3. Адаптивное меню с фестонами
  • 4. Адаптивное меню на ленточке
  • 5. Адаптивное меню с логотипом по середине
  • 6. Адаптивное меню с логотипом слева

HTML-разметка и базовые стили для горизонтального меню

По умолчанию все элементы списка <li>...</li> располагаются вертикально, занимая по ширине всю ширину элемента контейнера <ul>...</ul>, который в свою очередь занимает всю ширину его блока-контейнера.

HTML разметка для горизонтальной навигации

<ul>  <li><a href="">Пункт меню</a></li>  <li><a href="">Пункт меню</a></li>  <li><a href="">Пункт меню</a></li>  ...  </ul>

Горизонтальное меню, находящееся внутри тега <ul>...</ul>, можно дополнительно помещать внутрь элемента <nav>...</nav> и/или <header>...</header>. Благодаря этому html-разметке придается семантический смысл, а также появляется дополнительная возможность для форматирования блока меню.

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

ul {   list-style: none; /*убираем маркеры списка*/   margin: 0; /*убираем верхнее и нижнее поле, равное 1em*/   padding-left: 0; /*убираем левый отступ, равный 40px*/  }  a {text-decoration: none; /*убираем подчеркивание текста ссылок*/}

See the Pen GJxayB by Elena Nazarova (@nazarelen) on CodePen.

Способ 1. li {display: inline;}

Делаем элементы списка строчными. В результате они располагаются по горизонтали, с правой стороны между ними добавляется промежуток, равный 0.4em (вычисляется относительно размера шрифта). Чтобы убрать его, добавляем для li отрицательное правое поле li {margin-right: -4px;}. Дальше стилизуем ссылки по своему желанию.

Способ 2. li {float: left;}

Делаем элементы списка плавающими. В результате они располагаются по горизонтали. Высота блока-контейнера ul становится равной нулю. Чтобы решить эту проблему, добавляем для ul {overflow: hidden;}, расширяя его и позволяя ему таким образом содержать плавающие элементы. Для ссылок добавляем a {display: block;} и стилизуем их по своему желанию.

Способ 3. li {display: inline-block;}

Делаем элементы списка строчно-блочными. Они располагаются по горизонтали, с правой стороны образуется промежуток, как и в первом случае. Для ссылок добавляем a {display: block;} и стилизуем их по своему желанию.

Способ 4. ul {display: flex;}

Делаем список ul гибким контейнером с помощью модели CSS3 flexbox. В результате элементы списка располагаются горизонтально. Добавляем для ссылок a {display: block;} и стилизуем их по своему желанию.

1. Адаптивное меню с эффектом подчёркивания при наведении на ссылку

<ul class="menu-main">   <li><a href="" class="current">Work</a></li>   <li><a href="">About</a></li>   <li><a href="">Blog</a></li>   <li><a href="">Contact</a></li>  </ul>
@import url('https://fonts.googleapis.com/css?family=Ubuntu+Condensed');  .menu-main {   list-style: none;   margin: 40px 0 5px;   padding: 25px 0 5px;   text-align: center;   background: white;  }  .menu-main li {display: inline-block;}  .menu-main li:after {   content: "|";   color: #606060;   display: inline-block;   vertical-align:top;  }  .menu-main li:last-child:after {content: none;}  .menu-main a {   text-decoration: none;   font-family: 'Ubuntu Condensed', sans-serif;   letter-spacing: 2px;   position: relative;   padding-bottom: 20px;   margin: 0 34px 0 30px;   font-size: 17px;   text-transform: uppercase;   display: inline-block;   transition: color .2s;  }  .menu-main a, .menu-main a:visited {color: #9d999d;}  .menu-main a.current, .menu-main a:hover{color: #feb386;}  .menu-main a:before,  .menu-main a:after {   content: "";   position: absolute;   height: 4px;   top: auto;   right: 50%;   bottom: -5px;   left: 50%;   background: #feb386;   transition: .8s;  }  .menu-main a:hover:before, .menu-main .current:before {left: 0;}  .menu-main a:hover:after, .menu-main .current:after {right: 0;}   @media (max-width: 550px) {  .menu-main {padding-top: 0;}  .menu-main li {display: block;}  .menu-main li:after {content: none;}  .menu-main a {   padding: 25px 0 20px;    margin: 0 30px;  }  }

2. Адаптивное меню для свадебного сайта

<nav class="top-menu">   <ul class="menu-main">   <li><a href="" class="current">Work</a></li>   <li><a href="">About</a></li>   <li><a href="">Blog</a></li>   <li><a href="">Contact</a></li>   </ul>  </nav>
@import url('https://fonts.googleapis.com/css?family=PT+Sans');  .top-menu {   position: relative;    background: #fff;   box-shadow: inset 0 0 10px #ccc;  }  .top-menu:before,  .top-menu:after {   content: "";   display: block;   height: 1px;   border-top: 3px solid #575350;   border-bottom: 1px solid #575350;   margin-bottom: 2px;  }  .top-menu:after {   border-bottom: 3px solid #575350;   border-top: 1px solid #575350;   box-shadow: 0 2px 7px #ccc;   margin-top: 2px;  }  .menu-main {   list-style: none;   padding: 0 30px;   margin: 0;   font-size: 18px;   text-align: center;   position: relative;  }  .menu-main:before,  .menu-main:after {   content: "25C8";   line-height: 1;   position: absolute;   top: 50%;   transform: translateY(-50%);  }  .menu-main:before {left: 15px;}  .menu-main:after {right: 15px;}  .menu-main li {   display: inline-block;   padding: 5px 0;  }  .menu-main a {   text-decoration: none;   display: inline-block;   margin: 2px 5px;   padding: 6px 15px;   font-family: 'PT Sans', sans-serif;   font-size: 16px;   color: #777777;   border-bottom: 1px solid transparent;   transition: .3s linear;  }  .menu-main .current, .menu-main a:hover {   border-radius: 3px;   background: #f3ece1;   color: #313131;   text-shadow: 0 1px 0 #fff;   border-color: #c6c6c6;  }  @media (max-width: 500px) {   .menu-main li {display: block;}  }

3. Адаптивное меню с фестонами

<ul class="menu-main">   <li><a href="" class="current">Work</a></li>   <li><a href="">About</a></li>   <li><a href="">Blog</a></li>   <li><a href="">Contact</a></li>  </ul>
@import url('https://fonts.googleapis.com/css?family=PT+Sans+Caption');  .menu-main {   list-style: none;   padding: 0 30px;   margin: 0;   font-size: 18px;   text-align: center;   position: relative;   background: white;  }  .menu-main:after {   content: "";   position: absolute;   width: 100%;   height: 20px;   left: 0;   bottom: -20px;   background: radial-gradient(white 0%, white 70%, rgba(255,255,255,0) 70%, rgba(255,255,255,0) 100%) 0 -10px;   background-size: 20px 20px;   background-repeat: repeat-x;  }  .menu-main li {display: inline-block;}  .menu-main a {   text-decoration: none;   display: inline-block;   margin: 0 15px;   padding: 10px 30px;   font-family: 'PT Sans Caption', sans-serif;   color: #777777;   transition: .3s linear;   position: relative;  }  .menu-main a:before,  .menu-main a:after {   content: "";   position: absolute;   top: calc(50% - 3px);   width: 6px;   height: 6px;   border-radius: 50%;   background: #F58262;   opacity: 0;   transition: .5s ease-in-out;  }  .menu-main a:before {left: 5px;}  .menu-main a:after {right: 5px;}  .menu-main a.current:before,  .menu-main a.current:after,  .menu-main a:hover:before,   .menu-main a:hover:after {opacity: 1;}  .menu-main a.current,  .menu-main a:hover {color: #F58262;}  @media(max-width:680px) {   .menu-main li {display: block;}  }

4. Адаптивное меню на ленточке

<nav class="top-menu">   <ul class="menu-main">   <li><a href="" class="current">Work</a></li>   <li><a href="">About</a></li>   <li><a href="">Blog</a></li>   <li><a href="">Contact</a></li>   </ul>  </nav>
@import url('https://fonts.googleapis.com/css?family=PT+Sans+Caption');  .top-menu {   margin: 0 60px;   position: relative;   background: #5A394E;    box-shadow:    inset 1px 0 0 rgba(255,255,255,.1),    inset -1px 0 0 rgba(255,255,255,.1),    inset 150px 0 150px -150px rgba(255,255,255,.12),    inset -150px 0 150px -150px rgba(255,255,255,.12);  }  .top-menu:before,  .top-menu:after {   content: "";   position: absolute;   z-index: 2;   left: 0;   width: 100%;   height: 3px;  }  .top-menu:before {   top: 0;   border-bottom: 1px dashed rgba(255,255,255,.2);  }  .top-menu:after {   bottom: 0;   border-top: 1px dashed rgba(255,255,255,.2);  }  .menu-main {   list-style: none;   padding: 0;   margin: 0;   text-align: center;  }  .menu-main:before,   .menu-main:after {   content: "";   position: absolute;   width: 50px;   height: 0;   top: 8px;   border-top: 18px solid #5A394E;   border-bottom: 18px solid #5A394E;   transform: rotate(360deg);   z-index: -1;  }  .menu-main:before {   left: -30px;   border-left: 12px solid rgba(255, 255, 255, 0);  }  .menu-main:after {   right: -30px;   border-right: 12px solid rgba(255, 255, 255, 0);  }  .menu-main li {   display: inline-block;   margin-right: -4px;  }  .menu-main a {   text-decoration: none;   display: inline-block;   padding: 15px 30px;   font-family: 'PT Sans Caption', sans-serif;   color: white;   transition: .3s linear;  }  .menu-main a.current,  .menu-main a:hover {background: rgba(0,0,0,.2);}  @media (max-width: 680px) {  .top-menu {margin: 0;}  .menu-main li {   display: block;   margin-right: 0;  }  .menu-main:before,   .menu-main:after {content: none;}  .menu-main a {display: block;}  }

5. Адаптивное меню с логотипом по середине

<nav class="top-menu">   <ul class="menu-main">   <li class="left-item"><a href="">Work</a></li>   <li class="left-item"><a href="">About</a></li>   <li class="left-item"><a href="">Story</a></li>   <li class="right-item"><a href="">Contact</a></li>   <li class="right-item"><a href="">Shop</a></li>   <li class="right-item"><a href="">Gallery</a></li>  </ul>   <a class="navbar-logo" href=""><img src="https://html5book.ru/wp-content/uploads/2017/04/lily-logo.png"></a>  </nav>
@import url('https://fonts.googleapis.com/css?family=Arimo');  .top-menu {   position: relative;   background: rgba(34,34,34,.2);  }  .menu-main {   list-style: none;   margin: 0;   padding: 0;  }  .menu-main:after {   content: "";   display: table;   clear: both;  }  .left-item {float: left;}  .right-item {float: right;}  .navbar-logo {   position: absolute;   left: 50%;   top: 50%;   transform: translate(-50%,-50%);  }  .menu-main a {   text-decoration: none;   display: block;   line-height: 80px;   padding: 0 20px;   font-size: 18px;   letter-spacing: 2px;   font-family: 'Arimo', sans-serif;   font-weight: bold;   color: white;   transition: .3s linear;  }  .menu-main a:hover {background: rgba(0,0,0,.3);}  @media (max-width: 830px) {  .menu-main {   padding-top: 90px;   text-align: center;  }  .navbar-logo {   position: absolute;   left: 50%;   top: 10px;   transform: translateX(-50%);  }  .menu-main li {   float: none;   display: inline-block;  }  .menu-main a {   line-height: normal;   padding: 20px 15px;   font-size: 16px;  }  }  @media (max-width: 630px) {  .menu-main li {display: block;}  }

6. Адаптивное меню с логотипом слева

<nav class="top-menu">   <a class="navbar-logo" href=""><img src="https://html5book.ru/wp-content/uploads/2017/04/lily-logo.png"></a>   <ul class="menu-main">   <li><a href="">Work</a></li>   <li><a href="">About</a></li>   <li><a href="">Story</a></li>   <li><a href="">Shop</a></li>   <li><a href="">Gallery</a></li>   <li><a href="">Contact</a></li>   </ul>  </nav>
@import url('https://fonts.googleapis.com/css?family=Arimo');  .top-menu {   background: rgba(255,255,255,.5);   box-shadow: 3px 0 7px rgba(0,0,0,.3);   padding: 20px;  }  .top-menu:after {   content: "";   display: table;   clear: both;  }  .navbar-logo {display: inline-block;}  .menu-main {   list-style: none;   margin: 0;   padding: 0;   float: right;  }  .menu-main li {display: inline-block;}  .menu-main a {   text-decoration: none;   display: block;   position: relative;   line-height: 61px;   padding-left: 20px;   font-size: 18px;   letter-spacing: 2px;   font-family: 'Arimo', sans-serif;   font-weight: bold;   color: #F73E24;   transition:.3s linear;  }  .menu-main a:before {   content: "";   width: 9px;   height: 9px;   background: #F73E24;   position: absolute;   left: 50%;   transform: rotate(45deg) translateX(6.5px);   opacity: 0;   transition: .3s linear;  }  .menu-main a:hover:before {opacity: 1;}  @media (max-width: 660px) {  .menu-main {   float: none;   padding-top: 20px;  }  .top-menu {   text-align: center;   padding: 20px 0 0 0;  }  .menu-main a {padding: 0 10px;}  .menu-main a:before {transform: rotate(45deg) translateX(-6px);}  }  @media (max-width: 600px) {  .menu-main li {display: block;}  }

html5book.ru


You May Also Like

About the Author: admind

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.