Html меню: Тег | htmlbook.ru

Содержание

Тег | htmlbook.ru

Internet ExplorerChromeOperaSafariFirefoxAndroidiOS
HTML43.0+1.0+3.5+1.0+1.0+1.1+1.0+
HTML5

Спецификация

HTML:3.24.015.0XHTML:1.01.1

Описание

Тег <menu> предназначен для отображения списка пунктов меню. Аналогично тегам <ol> и <ul> внутри контейнера <menu> список формируется с помощью тегов <li>.

В HTML4 тег <menu> вышел из употребления, вместо него рекомендуется использовать тег <ul>. В HTML5 тег <menu> вновь включен, но уже в другом качестве. Теперь он выступает контейнером для тега <command> и создания меню.

Синтаксис

HTML
<menu>
  <li>пункт меню</li>
  <li>пункт меню</li>
</menu>
HTML5
<menu>
  ...
</menu>

Атрибуты

label
Устанавливает видимую метку для меню.
type
Задает тип меню.

Закрывающий тег

Обязателен.

Валидация

Использование этого тега осуждается спецификацией HTML4, валидный код получается только при использовании переходного <!DOCTYPE>. В HTML5 применение тега <menu> корректно.

Пример 1

HTML 4.01IECrOpSaFx

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Тег MENU</title>
 </head>
 <body>
  <p><strong>В этом выпуске:</strong></p>
  <menu>
   <li>Русская кухня. Уха бурлацкая</li>
   <li>Украинская кухня. Вареники</li>
   <li>Молдавская кухня. Паприкаш</li>
   <li>Кавказская кухня. Суп-харчо</li>
   <li>Прибалтийская кухня. Вертиняй</li>
  </menu>
 </body>
</html>

Результат данного примера показан на рис. 1.

Рис. 1. Вид списка, созданного с помощью тега <menu>

Пример 2

HTML5IECrOpSaFx

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Тег MENU</title>
 </head>
 <body>
  <menu type="toolbar">
   <li>
    <menu label="Файл">
      <button type="button">Новый...</button>
      <button type="button">Открыть...</button>
      <button type="button">Сохранить</button>
    </menu>
   </li>
   <li>
     <menu label="Правка">
      <button type="button">Копировать</button>
      <button type="button">Вырезать</button>
      <button type="button">Вставить</button>
     </menu>
    </li>
  </menu>
 </body>
</html>

Горизонтальное меню для сайта на HTML+CSS готовые шаблоны | Как создать красивое горизонтальное выпадающее меню с примером

Доброго времени суток, дорогие читатели. Сегодня мы разберем тему «как сделать горизонтальное меню используя HTML и CSS». Меню, как правило, находится в шапке сайта и является перечнем ссылок на самые важные страницы, его также называют главным меню. Данные ссылки пользователи будут постоянно нажимать. То, как вы их расположите и какой дизайн вы зададите меню будет влиять на поведение пользователей, конверсию, их общее впечатление от вашего сайта и, конечно, на seo-продвижение.

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

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

Для создания меню используют теги <ul>, <li> и <a>.

Если вам не совсем понятно, что такое эти html-теги, css, таблицы, то почитайте об основных технологиях для создания сайта.

Пример использования html тегов для создания меню в коде ниже:

<ul>
<li><a href="#">Главная</a></li>
<li><a href="#">Услуги</a></li>
<li><a href="#">Цены</a></li>
<li><a href="#">Контакты</a></li>
</ul>

Стандартные CSS стили для горизонтального меню

ul {
  list-style: none; /*убираем маркеры списка*/
  margin: 0; /*убираем отступы*/
  padding-left: 0; /*убираем отступы*/
}
a {
  text-decoration: none; /*убираем подчеркивание текста ссылок*/
}
li {
  float:left; /*Размещаем список горизонтально для реализации меню*/
  margin-right:5px; /*Добавляем отступ у пунктов меню*/
}

Мы получаем готовое верхнее меню в шапку, без каких-либо особых стилей и наворотов это можно назвать каркасом вашего будущего красивого меню. Если вы скопируете и поставите у себя данный html и css это будет выглядеть следующим образом.

Пример каркаса (шаблона) вашего будущего меню

Получилось все достаточно простенько, вы ,конечно же, хотите сразу красивое главное меню, но без понимания основ у вас просто не получится создать хорошее меню без ошибок в html и css.

Существует так же несколько других CSS методов используемых для того чтобы сделать меню горизонтальным помимо float:left;, например, display:inline-block; или display:flex;, но рекомендуется использовать способ описанный выше.

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

Примеры красивого горизонтального меню для сайта

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

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

Простое меню синего цвета с раздельными пунктами

CSS стили «верхнего» меню

Ниже расположены стили данного меню. HTML остается тем же, что и в «каркасе» меню.

ul {
  list-style: none; /*убираем маркеры списка*/
  margin: 0; /*убираем отступы*/
  padding-left: 0; /*убираем отступы*/
  margin-top:25px; /*делаем отступ сверху*/
}
a {
  text-decoration: none; /*убираем подчеркивание текста ссылок*/
  background:#30A8E6; /*добавляем фон к пункту меню*/
  color:#fff; /*меняем цвет ссылок*/
  padding:10px; /*добавляем отступ*/
  font-family: arial; /*меняем шрифт*/
  border-radius:4px; /*добавляем скругление*/
  -moz-transition: all 0.3s 0.01s ease; /*делаем плавный переход*/
  -o-transition: all 0.3s 0.01s ease;
  -webkit-transition: all 0.3s 0.01s ease;
}
a:hover {
  background:#1C85BB;/*добавляем эффект при наведении*/
}
li {
  float:left; /*Размещаем список горизонтально для реализации меню*/
  margin-right:5px; /*Добавляем отступ у пунктов меню*/
  
}

Главное меню, расположенное на цветной линии с красным фоном

CSS стили меню на цветной линии
ul {
  list-style: none; /*убираем маркеры списка*/
  margin: 0; /*убираем отступы*/
  padding-left: 0; /*убираем отступы*/
  margin-top:25px; /*делаем отступ сверху*/
  background:#FF4444; /*добавляем фон всему меню (заменив этот параметр, вы поменяете цвет всего меню)*/
  height: 50px; /*задаем высоту*/
}
a {
  text-decoration: none; /*убираем подчеркивание текста ссылок*/
  background:#FF4444; /*добавляем фон к пункту меню (заменив этот параметр, вы поменяете цвет всех пунктов меню)*/
  color:#fff; /*меняем цвет ссылок*/
  padding:0px 15px; /*добавляем отступ*/
  font-family: arial; /*меняем шрифт*/
  line-height:50px; /*ровняем меню по вертикали*/
  display: block; 
  border-right: 1px solid #F36262; /*добавляем бордюр справа*/
  -moz-transition: all 0.3s 0.01s ease; /*делаем плавный переход*/
  -o-transition: all 0.3s 0.01s ease;
  -webkit-transition: all 0.3s 0.01s ease;

}
a:hover {
  background:#D43737;/*добавляем эффект при наведении*/
}
li {
  float:left; /*Размещаем список горизонтально для реализации меню*/
}

Выпадающее меню на HTML+CSS

Для реализации дополнительного выпадающего (раскрывающегося) меню на сайте у какого-либо пункта меню нам необходимо добавить дополнительный перечень пунктов в HTML-код для какой-либо ссылки из горизонтального меню и изменить стили CSS. В стилях мы будем применять простой трюк — изменение отображения раскрывающегося меню по средствам наведения на нужный нам пункт в верхнем меню. Для примера возьмем пункт «услуги».

Пример создания простого выпадающего меню

HTML код выпадающего меню
<ul>
    <li><a href="#">Главная</a></li>
    <li><a href="#">Услуги</a>
        <ul>
            <li><a href="#">Услуга 1</a></li>
            <li><a href="#">Длинная услуга 2</a></li>
            <li><a href="#">Услуга 3</a></li>
        </ul>
    </li>  
    <li><a href="#">Цены</a></li>
    <li><a href="#">Контакты</a></li>
</ul>
Стили CSS выпадающего меню
ul {
  list-style: none; /*убираем маркеры списка*/
  margin: 0; /*убираем отступы*/
  padding-left: 0; /*убираем отступы*/
  margin-top:25px; /*делаем отступ сверху*/
  background:#819A32; /*добавляем фон всему меню*/
  height: 50px; /*задаем высоту*/
}
a {
  text-decoration: none; /*убираем подчеркивание текста ссылок*/
  background:#819A32; /*добавляем фон к пункту меню*/
  color:#fff; /*меняем цвет ссылок*/
  padding:0px 15px; /*добавляем отступ*/
  font-family: arial; /*меняем шрифт*/
  line-height:50px; /*ровняем меню по вертикали*/
  display: block; 
  border-right: 1px solid #677B27; /*добавляем бордюр справа*/
  -moz-transition: all 0.3s 0.01s ease; /*делаем плавный переход*/
  -o-transition: all 0.3s 0.01s ease;
  -webkit-transition: all 0.3s 0.01s ease;

}
a:hover {
  background:#D43737;/*добавляем эффект при наведении*/
}
li {
  float:left; /*Размещаем список горизонтально для реализации меню*/
  position:relative; /*задаем позицию для позиционирования*/
}
     
    /*Стили для скрытого выпадающего меню*/
    li > ul {
        position:absolute;
        top:25px;
        display:none;   
    }
     
    /*Делаем скрытую часть видимой*/
    li:hover > ul {
        display:block; 
        width:250px;  /*Задаем ширину выпадающего меню*/      
    }
   li:hover > ul > li {
        float:none; /*Убираем горизонтальное позиционирование*/
    }

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

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

Поделитесь в одной из социальных сетей и скачивание сразу же будет доступно.

Благодарю за внимание.

Создание выпадающего (drop-down) меню, используя только HTML и CSS, без jQuery

Сразу говорю, здесь мы не будем рассматривать меню с различными эффектами на jQuery (типо выпадания, выдвижения и прочее).

Только CSS и HTML, невероятно, но этого вполне достаточно для создания весьма неплохих менюшек.

HTML

Обычно менюшки создаются при помощи <ul>-списков. Кстати говоря, если на WordPress меню будет сгенерировано функцией wp_list_categories или функцией wp_nav_menu(), то тоже всё будет отлично работать. Главное не напутать с классами и айдишниками элементов списка. Это предельно важно.

Пока что я покажу вам только как сделать менюшку с одним уровнем вложенности, в данном случае главное — уловить саму суть.

<ul>
	<li><a href="#">WordPress</a>
		<ul>
		<li><a href="#">плагины</a></li>
		<li><a href="#">темы</a></li>
		<li><a href="#">хаки</li>
		</ul>
	</li>
	<li><a href="#">Joomla</a>
		<ul>
		<li><a href="#">компоненты</a></li>
		<li><a href="#">модули</a></li>
		</ul>
	</li>
	<li><a href="#">Drupal</a></li>
</ul>

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

CSS

Здесь тоже всё довольно просто, к тому же часть кода ниже я использовал чисто для оформления, свой цвет фона, цвет ссылок и прочее (важное отмечено /* (!) */).

#my-drop-down-menu ul, ul#my-drop-down-menu{
	list-style:none;
}
 
#my-drop-down-menu{ 
	position:relative; /* (!) */
	z-index:3;
	width:300px;
	height:20px;
	margin:0 auto;
}
 
#my-drop-down-menu li.list{
	float:left; /* (!) */
	display:block; /* (!) */
	margin:0 5px;
}
 
#my-drop-down-menu a{
	color: #61ADB0;
	text-decoration:none;
}
 
#my-drop-down-menu ul.child{ 
	background: #463935;
	padding:5px;
	position:absolute; /* (!) */
	top:29px; /* (!) */
	left:-9999px; /* (!) */
	z-index:3;
	border-top: 1px solid #3A2E2B;
	-moz-box-shadow: 0px 3px 7px #251d1b;
	-webkit-box-shadow: 0px 3px 7px #251d1b;
	box-shadow: 0px 3px 7px #251d1b;
}
 
#my-drop-down-menu li:hover ul.child{
	left:auto; /* (!) */
}
 
#my-drop-down-menu li a.link{
	display:block;
	padding:5px;
}
 
#my-drop-down-menu li:hover a.link{
	background: #463935;
}

Аналогично можно добавлять ещё больше уровней вложенности, вставляя <ul> в <li>

Повторяюсь, зеленым цветом я отметил стили, которые необходимы для того, чтобы меню нормально работало (выпадало).

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

Создание простого меню для сайта на HTML и CSS

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

 

Данный урок был записан по просьбе одного из наших постоянных читателей, поэтому другие темы и не рассматривались. После чего я, вместе со своим напарником по разработке, Евгением Кузьменко, подготовил для Вас выпадающее меню для сайта. С данным уроком Вы можете ознакомиться, как на сайте прочитав статью, так и по видео уроку, чтобы более детально понять основные принципы реализации выпадающего меню. Кстати, по поводу создания меню, также рассказывали и в других уроках, например таких как: Создание меню в Битрикс, Делаем меню как в nexus или например, как Адаптивное меню SlickNav, поэтому можете рассмотреть и их, вдруг что-то окажется полезным и пригодится!

 

 

Первый шаг. HTML.

 

И так, переходим к первому шагу данного урока и сначала нам нужно подключить файл demo.css, который лежит у нас в папочке css, а затем уже подключаем шрифт Open Sans. Ребята, я рассказываю все по демо, поэтому Вы можете все делать по своему усмотрению. 

 


<link rel="stylesheet" href="css/demo.css">
<link href="http://allfont.ru/allfont.css?fonts=open-sans" rel="stylesheet" type="text/css" />

 

Далее нам нужно создать обычный маркированный список ul li, а также задать первому ul идентификатор nav, чтобы мы могли работать через него, обращаясь к стилям css. Делается это очень просто, не знаю, что тут можно описать, поэтому скидываю сразу структуру, как в демо.

 


<ul>
	<li>
	<a href="">Ссылка</a>
		<ul>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
		</ul>
	</li>
	<li>
	<a href="">Ссылка</a>
		<ul>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
		</ul>
	</li>
	<li>
	<a href="">Ссылка</a>
		<ul>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
		</ul>
	</li>
	<li>
	<a href="">Ссылка</a>
		<ul>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
		</ul>
	</li>
	<li>
	<a href="">Ссылка</a>
		<ul>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
			<li><a href="">Ссылка</a></li>
		</ul>
	</li>
</ul>

 

 

Второй шаг. CSS.

 

 

Переходим к стилям CSS и первым делом, мы должны установить тот шрифт, который прописали вначале данного урока, а именно Open Sans. После того, как наш шрифт успешно прописан, переходим уже к самому каркасу нашего маркированного списка, которому зададим определенные свойства, а также расположение и позиционирование элементов. Заметим, что мы создаем горизонтальное меню, поэтому применяем свойство float left

 


#nav{
	font-family: 'Open Sans', arial;
}

#nav li{
	float:left; /* все ссылки идут слева на право */
    position:relative;
    list-style:none; /* убираем точки */
    background:#ff3131;
	width:190px;
}

 

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

 


#nav a{
    text-decoration:none;
    display:block; /* делаем блочным элементов тег "a" */
    padding:35px 65px;
    color:#ffffff;
}

#active a, #nav li:hover > a{
    background:#b32424;
}

#nav ul {
	visibility:hidden; /* скрываем выпадающее меню */
    padding:0;  
    position:absolute;
}

 

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

 


#nav li:hover > ul{
    visibility:visible; /* показываем выпадающее меню при наведении */
	position: relative;
}

#nav ul a{
	padding:18.5px 65px; /* делаем отступы выпадающего меню меньше от основного */
}

#nav ul li:hover{
    background:#d92a2a;
}

#nav li:first-child:hover > ul{
	left: 0px; /* при наведении на первый элемент чтобы не съежало выпадающее меню */
}

 

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

 


#nav > li{
	border-right: 2px solid #d92a2a; /* добавляем рамку к основному меню справа */
}

#nav > li:last-child{
	border-right: none; /* убираем рамку справа основного меню */
}

 

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

 


#nav > li ul li{
	border-left: 2px solid #d92a2a; /* добавляем рамку к выпадающему меню слева */
	border-right:2px solid #d92a2a; /* добавляем рамку к выпадающему меню справа */
}

#nav li:first-child ul li,#nav li:first-child ul{
	border-left:none; /* убираем рамку у выпадающего меню слева */
} 
#nav li:last-child ul li,#nav li:last-child ul{
	border-right:none; /* убираем рамку у выпадающего меню справа */
} 

 

Проверяем все на сайте и видим, что все отлично работает, кроме одной детали, а именно наше выпадающее меню при наведении на вторую ссылку и последующую сдвигается немного вправо. Для этого, чтобы устранить данную проблему, мы задаем элементу меню с идентификатором nav свойство left и в качестве параметра даем ему минус два. (см. пункт 1)

 


#nav li:hover > ul{
    left: -2px; /* смещаем выпадающее меню слева от размера рамки*/
}

 

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

 

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



Роман Краутер

Адаптивное меню на CSS flexbox

Всем привет! На начало 2018 года, по данным сайта Can I Use, верстка на flexbox-ах, поддерживается браузерами на 97.8%. Это отличные показатели для этой уже далеко не новой технологии по верстки сайтов. Теперь уже нет причин, почему не пользоваться этим удобным способом верстки. Чем мы сейчас и займемся.

Сверстав несколько макетов на CSS flexbox-ах, уже не хочется возвращаться к устаревшим float-ам и даже к такому любимому среди верстальщиков фреймворку, как Bootstrap. Хотя, Bootstrap ещё рано списывать со счетов, ведь используя его знаменитую сетку, можно «не париться» по поводу медиа запросов.

На этом уроке мы сверстаем шапку сайта с типичным адаптивным меню с применением flexbox CSS метода.

Шапка состоит из трех логичных блоков:

  1. Блок с логотипом
  2. Блок с меню, сделанное на списках
  3. Блок с иконкой и номером телефона

Эти три блока будут помещены в общий внешний блок-обертку header, который внутри себя будет делать display: flex; для трех блоков.

Внутри блока nav, еще раз пропишем display: flex; для пунктов меню. Таким образом мы добьёмся гибкости, при уменьшении размеров экрана, пункты меню могут выстраиваться друг под другом.

Для наглядной демонстрации сделаем всю HTML разметку для шапки сайта.

<body>
  <header>
   <div>
   <a href="#"><img src="img/logo.png" alt=""></a>
   </div>
   <nav>
    <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>
   <div>
   <i aria-hidden="true"></i>
   +380973457685
   </div>
  </header>
</body>

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

А сейчас внимание! Достаточно указать двум блокам display: flex; и всё содержимое шапки вытянется в строчку.

.header {
   display: flex;
}

.header .menu ul {
   display: flex;
}

Вот так работает flexbox.

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

*{
  margin: 0;
  padding: 0;
}

body {
  background-color: #fff;
  font-family: "Open Sans", sans serif;
  line-height: 1.5;
}

.header {
  border: 2px solid #ccc;
  display: flex;
  flex-wrap: wrap; /*перенос строки */
  justify-content: space-between; /*прижимает содержимое к краям */
  align-items: center; /*выравнивает элементы по центру на вертикальной */
}

.header .logo {
  padding-left: 30px;
}

.header .menu ul {
  display: flex;
  list-style: none;
}

.header .menu ul li {
  margin: 20px 10px;
}

.header .menu ul a {
  text-transform: uppercase;
  text-decoration: none;
  font-weight: bold;
  color: #06a327;
}

.phone {
  font-size: 110%;
  color: #333;
  padding-right: 40px;
}


Работаем над адаптивностью шапки

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

Например, на ширине экрана 900 пикселей, блок с телефон прижался к левому краю шапки.

Решение проблемы, вы видите ниже. Выравниваем блок .phone по центру.

@media screen and (max-width: 900px) {
  .phone {
    margin: auto;
  }
}

На ширине экрана 500 пикселей начинает срезаться меню, так как не помещается в строчку.

Легким движением руки для ul, прописываем свойство flex-direction: column; которое возвращает списки в естественное блочное состояние.

@media screen and (max-width: 500px) {
  .header {
    flex-direction: column;
  }
  .header .menu ul {
    flex-direction: column;
    align-self: center;
  }
  .header .menu ul li {
    margin: 5px;
  }
}

Разобраться с адаптивной версткой на flexbox-ах, Вам поможет этот видеокурс «Вёрстка сайта с нуля»

  • Создано 08.03.2018 10:18:00
  • Михаил Русаков

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Большой обзор красивых многоуровневых меню с codepen / Блог компании mr. Gefest / Хабр

Хабр, привет!

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

Раньше я их выкладывал в группе продукта облачной IDE mr. Gefest, это были сборки из 5-8 решений. Но теперь у меня стало скапливаться по 15-30 скриптов в разных тематиках (кнопки, меню, подсказки и так далее).

Такие большие наборы следует показывать большему числу специалистов. Поэтому выкладываю их на Хабр. Надеюсь они будут Вам полезны.

В этом обзоре мы рассмотрим многоуровневые меню.

Flat Horizontal Navigation

Красивая навигационная панель с плавно появляющимся подменю. Код хорошо структурирован, используется js. Судя по использованным возможностям, работает в ie8+.
http://codepen.io/andytran/pen/kmAEy

Material Nav Header w/ Aligned Dropdowns

Адаптивная панель ссылок с двухколонным подменю. Все сделано на css и html. Применены css3 селекторы, которые не поддерживаются в ie8.
http://codepen.io/colewaldrip/pen/KpRwgQ

Smooth Accordion Dropdown Menu

Стильное вертикальное меню с плавно раскрывающимися элементами. Используется transition, transform js-код.
http://codepen.io/fainder/pen/AydHJ

Pure CSS Dark Inline Navigation Menu

Темная вертикальная навигационная панель с иконками из ionicons. Применяется javascript. В ie8 скорее всего будет работать без анимации.
http://codepen.io/3lv3n_snip3r/pen/XbddOO

Pure CSS3 Mega Dropdown Menu With Animation

Стильное меню с двумя форматами вывода: горизонтальным и вертикальным. Используются иконки и css3-анимация. В ie8 точно будет ужасно выглядеть, но зато в других браузерах все круто.
Ссылка на вертикальную: http://codepen.io/rizky_k_r/full/sqcAn/
Ссылка на горизонтальную: http://codepen.io/rizky_k_r/pen/xFjqs

CSS3 Dropdown Menu

Горизонтальное меню с большими элементами и выпадающим списком ссылок. Чистый и минималистичный код без js.
http://codepen.io/ojbravo/pen/tIacg

Simple Pure CSS Dropdown Menu

Простое, но стильное горизонтальное меню. Используется font-awesome. Все работает на css и html, без js. В ie8 будет работать.
http://codepen.io/Responsive/pen/raNrEW

Bootstrap 3 mega-dropdown menu

Отличное решение для интернет-магазинов. Отображает несколько уровней категорий и большие изображения (например, товар по акции). В его основе лежит boostrap 3.
http://codepen.io/organizedchaos/full/rwlhd/

Flat Navigation

Стильная навигационная панель с плавным подменю. В старых браузерах отобразится с проблемами.
http://codepen.io/andytran/pen/YPvQQN

3D nested navigation

Горизонтальное меню с очень крутой анимацией без js!
http://codepen.io/devilishalchemist/pen/wBGVor

Responsive Mega Menu — Navigation

Горизонтальное адаптивное меню. Выглядит неплохо, но мобильная версия немного «хромает». Используется css, html и js.
http://codepen.io/samiralley/pen/xvFdc

Pure Css3 Menu

Оригинальное меню. С простым и чистым кодом без js. Применяйте для «вау» эффектов.
http://codepen.io/Sonick/pen/xJagi

Full CSS3 Dropdown Menu

Красочное выпадающее меню с одним уровнем вложенности. Используются иконки из font-awesome, html и css.
http://codepen.io/daniesy/pen/pfxFi

Css3 only dropdown menu

Достаточно неплохое горизонтальное меню с тремя уровнями вложенности. Работает без js.
http://codepen.io/riogrande/pen/ahBrb

Dropdown Menus

Минималистичное меню с оригинальным эффектом появления вложенного списка элементов. Радует, что это решение тоже без javascript.
http://codepen.io/kkrueger/pen/qfoLa

Pure CSS DropDown Menu

Примитивное, но эффективное решение. Только css и html.
http://codepen.io/andornagy/pen/xhiJH

Pull Menu — Menu Interaction Concept

Интересный концепт меню для мобильного телефона. Я такого ещё не видел. Используется html, css и javascript.
http://codepen.io/fbrz/pen/bNdMwZ

Make Simple Dropdown Menu

Чистый и простой код, без js. В ie8 точно работать будет.
http://codepen.io/nyekrip/pen/pJoYgb

Pure CSS dropdown [work for mobile touch screen]

Решение неплохое, но слишком уж много используется классов. Радует, что нет js.
http://codepen.io/jonathlee/pen/mJMzgR

Dropdown Menu

Симпатичное вертикальное меню с минимальным javascript-кодом. JQuery не используется!
http://codepen.io/MeredithU/pen/GAinq

CSS 3 Dropdown Menu

Горизонтальное меню с дополнительными подписями может хорошо украсить Ваш сайт. Код простой и понятный. Javascript не применяется.
http://codepen.io/ibeeback/pen/qdEZjR

KVdKQJ (автор очень долго думал над названием)

Красивое решение с большим количеством кода (html, css и js). Придумано 3 формата подменю. Для интернет-магазинов решение хорошо подходит.
http://codepen.io/martinridgway/pen/KVdKQJ

CSS3 Menu Dropdowns (особенное решение)!

Темное горизонтальное меню с тринадцатью (13) вариантами анимации! Обязательно советую ознакомиться, пригодится в быту.
http://codepen.io/cmcg/pen/ofFiz

П.С.
Надеюсь, Вам понравилась сборка из 23 решений. Если хотите и дальше их читать, то пройдите снизу опрос.
Всем приятной работы.

Создание меню html / css

Основы верстки

Чаще всего меню создается на основе не упорядоченных списков ul. В каждый пункт li вкладывается гиперссылка a.

Можно создавать меню и на основе блоков div, таблиц table или списков определений dl.
Но традиционной является конструкция ul.

Код простейшего меню будет выглядеть так:

<ul>
  <li><a href="#/">пункт 1</a></li>
  <li><a href="#/">пункт 2</a></li>
  <li><a href="#/">пункт 3</a></li>
  <li><a href="#/">пункт 4</a></li>
  <li><a href="#/">пункт 5</a></li>
</ul>
×
Примечание

В процессе разработки удобно указывать адрес гиперссылки — #/. Во-первых, она никуда не ведет, а во-вторых — не происходит перехода к началу страницы.

Целью гиперссылки будет соответствующая страница вашего сайта или внешняя ссылка. Адрес внутренней страницы может быть как абсолютным, так и относительным. Внешней ссылки — только абсолютный. (Если забыли — смотрите Абсобютные и относительные ссылки).

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

Поэтому предварительно нужно создать файл, например my-menu.css, и подключить его. 

<!-- Подключение таблицы стилей -->
 
<!DOCTYPE html>
<html>
<head>
     ...
     <title>Создание меню</title>
     <link rel="stylesheet" href="css/MAIN.css" type="text/css" />
     <link rel="stylesheet" href="css/my-menu.css" type="text/css" />
     ...
</head>
<body>
...
</body>
</html>

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

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

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

/* Не желательно! */
ul li a {color: #f00;}

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

Вторая причина, по которой желательно работать с классами, а не с тегами напрямую — возможность разбить стили по группам. За каждую тематическую группу стилей будет отвечать свой класс.

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

Каким тегам нужно присваивать классы

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

Да, это дополнительная разметка, но оформлять меню будет гораздо удобнее. Кроме того, если в качестве контейнера использовать не div, а nav, то верстка будет более семантической (осмысленной) и удобной для поисковых систем (ПС), что является несомненным плюсом. Второй класс присваиваем тегу ul.

<nav>
  <ul>
    <li><a href="#/">пункт 1</a></li>
    <li><a href="#/">пункт 2</a></li>
    <li><a href="#/">пункт 3</a></li>
    <li><a href="#/">пункт 4</a></li>
    <li><a href="#/">пункт 5</a></li>
  </ul>
</nav>

Почему именно так?

Присвоение класса .menu_color тегу nav дает больше возможности для оформления, чем присовение его тегу ul, а класс .my_menu отвечает только за разметку меню и никакого отношения к содержащему контейнеру иметь не должен.

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

Какие имена должны быть у классов

Осмысленные. В идеале, любое имя класса должно давать представление об объекте и назначении. В приведенном выше примере используются классы nav.menu_color и ul.my_menu.

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

×
Внимание!

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

Имеено по-этому я выбрал класс .my_menu, так как на сайте уже есть класс .menu со своими стилями. 

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

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

Например, за цветовое оформление у нас отвечает класс .menu_color

/* === Группа цветового оформления === */
 
/* Цвет фона менд */
.menu_color {
  background: gray;
}
/* Оформление пункта меню */
.menu_color > ul > li > a {
  background: transparent;
  color: #f5f5f5;
}
...
/* === Группа разметки основного меню === */ 
 
/* Сброс и установка стилей по умолчанию */
.my_menu {
  list-style: none;
  margin: 0;
  padding: 0;
}
/* Разметка для пункта меню */
.my_menu li a {
  display: block;
  margin: 0;
  padding: 12px 20px;
  text-decoration: none;  
}

Т.е. все стили, определяющие цветовое оформление того или иного элемента меню, должны быть привязаны к классу .menu_color, а стили отвечающие за разметку — соответственно .my_menu.

При необходимости, для тега nav также можно добавить дополнительный класс, чтобы не залезать на территорию «цветового оформления» …

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

Простое вертикальное меню

Исходный html-код меню будет выглядеть так:

<nav>
  <ul>
    <li><a href="#/">пункт 1</a></li>
    <li><a href="#/">пунтк 2</a></li>
    <li><a href="#/">пункт 3</a></li>
    <li><a href="#/">пункт 4</a></li>
    <li><a href="#/">пункт 5</a></li>
  </ul>
</nav>

Кроме основных классов, рассмотренных в предыдущем материале, добавлен класс li.active для активного пункта (ссылка на текущую страницу).

Сброс и установка стилей по умолчанию

Файл my-menu.css

/* Убираем маркеры и отступы */
.my_menu {
  list-style:none;
  margin:0;
  padding:0;
}
.my_menu li {
  margin:0;
  padding:0;
  position:relative;
}
/* Общие правила для пунктов меню */
.my_menu li a {
  display:block;
  margin:0;
  padding:12px 20px;
  text-decoration: none;
}
/*Наведение на активный пункт меню - курсор обычный */
.my_menu li.active > a:hover {
  cursor: default;
}

Цветовое оформление

×
Примечание

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

/* === Цветовое оформление menu_color === */
.menu_color {
  background:#555;
}
/* Оформление пункта */
.menu_color > ul > li > a {
  color:#999;
  background: rgba(0, 0, 0, 0);
}
/* Подсветка пункта при наведении */
.menu_color > ul > li > a:hover {
  color: #bbb;
  background: rgba(0, 0, 0, 0.1);
}
/* Активный пункт */
.menu_color > ul > li.active > a,
.menu_color > ul > li.active > a:hover {
  color:#fff;
  background:rgba(0, 0, 0, 0.4);
}

Пояснения:

  • Если возникнет необходимость к определенным пунктам меню добавить подпункты, т.е. сделать меню многоуровневым, то конструкция .menu_color > ul > li > a позволит ограничить применение стилей только к пунктам меню первого уровня. Для подменю можно будет прописать другие стили оформления.
  • Использование прозрачности при задании цвета фона — background: rgba(0, 0, 0, 0.1). Это универсальное режение для любого темного бэкграунда. Если вы решите изменить цвет фона меню, фон активного пункта и подсветка пунктов при наведении изменятся автоматически. Впрочем, ничто не мешает вам задать понравившиеся цвета явно. 
×
Замечание

Цвет фона меню задавать не обязательно, если он наследуется от родительского блока.

Разделители пунктов

/* Разделитель пунктов меню */
.menu_color > ul > li + li > a {
   border-top: 1px solid rgba(255, 255, 255, 0.1);
   box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.15);
}

Повторяем тот же трюк с использованием rgba. Цвета для верхней границы и тени заданы полупрозрачными — черный 15% прозрачности и белый 10% соответственно.

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

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

Изначально любое меню нужно создавать как многоуровневое!

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

HTML-код 2-х уровневого меню:

<nav>
    <ul>
        <li><a href="#/">пункт 1</a></li>
        <li><a href="#/">родительский пункт 2</a>
            <ul>
                <li><a href="#/">дочерний подпункт 1</a></li>
                <li><a href="#/">дочерний подпункт 2</a></li>
            </ul>
        </li>
        <li><a href="#/">пункт 3</a></li>
        <li><a href="#/">пункт 4</a></li>
        <li><a href="#/">пункт 5</a></li>
    </ul>
</nav>

Добавлены классы li.parent — родительский тег, содержащий подменю, и ul.sub-menu — вложенный список выпадающего меню.

Цветовое оформление

/* Оформление sub-menu */
.menu_color .sub-menu {
  background: #f5f5f5;
  border: 1px solid #f5f5f5;
}
/* Офррмление подпунктов */
.menu_color .sub-menu li a{
  color: #555;
  background: rgba(0, 0, 0, 0);
}
/* Офррмление подпунктов при наведении */
.menu_color .sub-menu li a:hover{
  color: #fff;
  background: #555;
}
/* Разделитель для пунктов sub-menu */
.menu_color .sub-menu > li + li > a {
  border-top: 1px solid #fff;
  box-shadow: 0 -1px 0 #ddd;
  padding-left: 40px  /* Добавляем отступ для подпунктов */
}

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

Позиционирование и скрытие

Позиционирование осуществляется относительно родительского li.parent. (Именно для этого при сбросе и установке для него было задано position: relative;)

/*Общие*/
.my_menu .sub-menu {
  display: none;
  position: absolute;
  top: 0;
  min-width: 200px;
  z-index: 9999;
} 

Вывод

В зависимости от расположения основного меню (левая/правая боковая колонка), подменю может выпадать как вправо, так и влево. Поэтому для определения стилевых правил используем класс родительского блока .sidebar_left (В исходном html-коде класс не указан, т.к. к коду меню отношения не имеет). 

/* Вывод */
.my_menu .parent:hover .sub-menu {
  display: block;
  top: 4px;
}
/* со смещением вправо */
.sidebar_left .my_menu .parent:hover .sub-menu {
  left: 100%;
  margin-left: -10px;
}
×
Информация

Если у родительского блока нет класса, или он применяется как к правой так и к левой колонкам — нужно этот класс добавить к тегу nav.menu_color.sidebar_left.

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

/* Смещение влево */
.sidebar_right .my_menu .parent:hover .sub-menu {
  right: 100%;
  left: auto;
  margin-right: -5px;
}

Простая анимация

Что мы будем анимировать. В данном случае, эффекты довольно простые:

Переопределение существующих стилей:

/* Оформление пункта */
.menu_color >  ul >  li >  a {
  color: #999;  
  background: rgba(0, 0, 0, 0);
 
  /* добавляем код */
  -webkit-transition: all .3s;
  -moz-transition: all .3s;
  -o-transition: all .3s;
  transition: all .3s;
}
 
/* Офррмление подпунктов */
.menu_color .sub-menu li a{
   color: #555;
   background: rgba(0, 0, 0, 0);
 
  /* добавляем код */
  -webkit-transition: all .3s;
  -moz-transition: all .3s;
  -o-transition: all .3s;
  transition: all .3s;
}
 

А вот с плавным появленем подменю проблема …

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

Скрытие подменю. Вариант 2

Альтернативным способом является смещение меню в исходном состоянии за пределы экрана + полная прозрачность.

/* Переопределение sub-menu*/
.my_menu .sub-menu {
  display: block; /* переопределено */
  position: absolute;
  top: 0;
  width: 200px;
  z-index: 9999;
 
  /* Добавить */
  opacity: 0;
  -webkit-transition: opacity .5s, top .7s;
  -moz-transition: opacity .5s, top .7s;
  -o-transition: opacity .5s, top .7s;
  transition: opacity .5s, top .7s;
}
/* Смещение за экран */
.my_menu .sub-menu {
  left: -3000px;
}
/* Переопределяем эффект отображения при наведении*/
.my_menu .parent:hover > .sub-menu {
  display: block;
  top: 4px;
 
  /* Добавить */
  opacity: 1;
}

Раздвижное меню-аккордеон 

×
Несколько слов вступления

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

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

Аккордеон должен раскрываться по click, а это уже JS. А рассмотрение javascript выходит за рамки раздела HTML/CSS…

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

Добавлен класс my_accordion к классу родительского контейнера, а класс .sub-menu заменен на .sub-accordion-menu. Можно было бы не заменять, а просто переопределить, но это усложнит пример для понимания.

<nav>
    <ul>
        <li><a href="#/">пункт 1</a></li>
        <li><a href="#/">родительский пункт 2</a>
            <ul#/">дочерний подпункт 1</a></li>
                <li><a href="#/">дочерний подпункт 2</a></li>
            </ul>
        </li>
        <li><a href="#/">пункт 3</a></li>
        <li><a href="#/">пункт 4</a></li>
        <li><a href="#/">пункт 5</a></li>
    </ul>
</nav>
/* === Группировка классов === */
 
/* Убираем маркеры и отступы */
.my_menu, .sub-menu, 
.sub-accordion-menu {
  list-style:none;
  margin:0;
  padding:0;
}
/* Подсветка пункта при наведении */
.menu_color > ul > li > a:hover,
.my_menu .parent .sub-accordion-menu li a:hover {
  color: #bbb;
  background: rgba(0, 0, 0, 0.1);
}
/* Разделитель пунктов меню */
.menu_color > ul > li + li > a,
.menu_color .sub-accordion-menu li > a {
  border-top: 1px solid rgba(255, 255, 255, 0.1);
  box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.15);
}
 
 

После этого добавим стили, для закрытого и раскрытого аккордеона:

/* === Закрытый ===*/
.sub-accordion-menu {
  display: block;
  position: static;
  width: auto;
  overflow: hidden;
  border: none;
  margin: 0!important; 
  max-height: 0;   /* Скрываем выпадающее подменю */
  transition: max-height 1s;  /* Задержка раскрытия */
}
/* === Открытый ===*/
.sub-accordion-menu {
  max-height: 1000px;
}
.sub-accordion-menu > li > a {
  padding-left: 40px;  /* Добавляем отступ для подпунктов */
}

Примечание.
Почему было использовано свойство max-height, а не height? Потому что мы не знаем высоту раскрывающегося подменю, а при использовании значения height: auto — анимация не срабатывает.

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

По структуре горизонтальное меню ни чем не отличается от вертикального, html-код одинаковый. Теоретически, получить горизонтальное меню из вертикального можно заменой/добавлением класса содержащего контейнера.

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

В итоге наше меню будет выглядеть так:

За основу возьмем код вертикального выпадающего меню и заменим классы:

<nav>
  <ul>
    <li><a href="#/">punkt 1</a></li>
    <li><a href="#/">dropdown</a>
      <div>
        <ul>
          <li><a href="#/">sub punkt 1</a></li>
          <li><a href="#/">sub punkt 2</a></li>
        </ul>
      <div>
    </li>
    <li><a href="#/">punkt 3</a></li>
    <li><a href="#/">active</a></li>
    <li><a href="#/">punkt 5</a></li>
  </ul>
</nav>

Разметка

/* === Разметка основного меню === */
.hz-bar ul {
 list-style: none;
 margin:0;
 padding:0;
}
.hz_menu > li {
 float: left;
 margin:0;
 padding:0;
 position:relative;
}
.hz_menu li a {
 display:block;
 margin:0;
 padding:15px 20px;
 text-decoration: none;
}
Что было сделано:
  1. Сброс стилей по умолчанию для тега ul
  2. Создание горизонтального меню, путем присвоения тегам li, содержащим пунткы основного меню, свойства float: left
  3. Установка отступов для пунктов меню
Пояснения:

Конструкция .hz_menu > li распространяется только на пункты основного меню и не затрагивает выпадающее, в то время как .hz_menu li a задается для всех пунктов. Некоторые свойства, специфичные для подменю, будут переопределены в дальнейшем.

Разметка выпадающего меню

/* === Разметка выпадающего подменю === */
.dropdown_menu {
 display: block;
 position: absolute;
 left: -3000px;
 top: 100%;
}
.dropdown_menu > ul {
 border: 1px solid;
 margin-top: 10px;  /* отступ от основного меню */
 padding: 10px 1px;
 min-width: 140px;
 opacity: 0;
 transition: opacity .5s; /* анимация прозрачности */
}
.dropdown_menu li a {
 white-space: nowrap; /* если не очень длинные заголовки */
 z-index: 9999;
 padding: 10px 20px;
}
.parent_dropdown:hover .dropdown_menu {
 left: 0px;
}
.parent_dropdown:hover .dropdown_menu ul {
 opacity: 1;
}

Рассмотрим некоторые особенности:

  • Как было видно из html-кода, выпадающее меню обернуто в дополнительный контейнер div.dropdown_menu. Для чего? В принципе, можно вполне обойтись и без него, но эта обертка дает некоторые дополнительные возможности оформления. В частности, возможность задать отступ от основного меню.
    Если задать отступ непосредственно для тега ul без обертки, при перемещении курсора от основного пункта к подпункту hover-эффект прервется и подменю пропадет … Дополнительный контейнер обеспечивает, в данном случае, отсутствие разрыва.
  • Для подпункт определено правило white-space: nowrap. Дело в том что абсолютно позиционированное подменю имеет максимальную ширину родительского пункта, и, соответственно, текст подпунктов будет переноситься на новую строку. Это не очень удобно при коротких названиях основных пунктов.
    Данное правило предотвращает перенос. Как альтернатива (дополнение), минимальная ширина подменю была задана явно.

Оформление

Перед тем как заняться цветовым оформлением, необходимо добавить еще несколько стилевых правил разметки. Я специально перенес их в офомление, чтобы был понятнее смысл.

Если основному контейнеру назанчить цвет фона, то мы его не увидим по одной простой причине:

Теги li, которым присвоено float: left, выпадают из основного потока, их для основного контейнера как-бы не существует, поэтому он «схлопывается» и имеет высоту 0. Соответственно, никакого цветового оформления мы не увидим.

Решение

/* Предотвращаем схлопывание */
.hz-bar:after {
 content: '';
 display: table;
 clear: both;
}

Теперь контейнер будет вести себя более дружелюбно и можно его оформлять

/* === Оформление меню === */
.menu_bordo {
 background: #7D0000;
}
.menu_bordo .hz_menu > li > a {
 color: #DBE6B7;
}
.menu_bordo .hz_menu > li > a:hover {
 color: #fff;
}
.menu_bordo .hz_menu .active a{
 box-shadow: inset 0 15px 15px rgba(0, 0, 0, 0.2);
 color: #fff;
 cursor: default;
}

Здесь все достаточно очевидно. Единственное, cursor: default, следовало бы перенести в разметку, чтобы не привязывать к классу цветового оформления.

Для выделения активного пункта меню была применена тень.

/* === Оформление выпадающего подменю === */
.menu_bordo .dropdown_menu > ul {
 background: #fff;
 border-color: #ddd;
}
.menu_bordo .dropdown_menu > ul > li > a {
 color: #555;
}
.menu_bordo .dropdown_menu > ul > li > a:hover {
 background: #7D0000;
 color: #fff;
}

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

Дополнительно

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

/* Дополнительно. Разделители пунктов + маркер */
.hz_menu > li + li > a {
 border-left: 1px solid rgba(255, 255, 255, 0.1);
 box-shadow: -1px 0 0 rgba(0, 0, 0, 0.15);
}
.parent_dropdown > a:after {
 display: inline-block;
 padding: 1px 0 0 3px;
 content: "\25BC ";
 font-size: 10px;
 vertical-align: top;
}

Здесь вы можете скачать Код примера горизонтального меню

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


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

Чтобы создать вертикальную панель навигации, вы можете стилизовать элементы внутри списка, помимо кода с предыдущей страницы:

Объяснение примера:

Вы также можете установить ширину

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

    .

    Пример

    ул. {
    тип-стиль-список: нет;
    маржа: 0;
    отступ: 0;
    ширина: 60 ​​пикселей;
    }

    ли а {
    дисплей: блок;
    }

    Попробуй сам »

    Примеры вертикальной панели навигации

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

    Пример

    ul {
    list-style-type: none;
    маржа: 0;
    отступ: 0;
    ширина: 200 пикселей;
    цвет фона: # f1f1f1;
    }

    li a {
    дисплей: блокировать;
    цвет: # 000;
    отступ: 8 пикселей 16 пикселей;
    текст-оформление: нет;
    }

    / * Изменить цвет ссылки при наведении * /
    li a: hover {
    цвет фона: # 555;
    цвет: белый;
    }

    Попробуй сам »

    Активная / текущая ссылка для навигации

    Добавьте «активный» класс к текущей ссылке, чтобы пользователь знал, на какой странице он находится:

    Центральные ссылки и добавить границы

    Добавьте text-align: center к

  • или для центрирования ссылок.

    Добавьте свойство border в

      , чтобы добавить границу вокруг панели навигации. Если ты тоже хочешь границ внутри панели навигации, добавьте border-bottom ко всем элементам
    • , кроме последний:

      Пример

      ul {
      border: 1px solid # 555;
      }

      li {
      выравнивание текста: по центру;
      нижняя граница: твердое тело 1px # 555;
      }

      li: последний ребенок {
      нижняя граница: нет;
      }

      Попробуй сам »

      Полноростовая фиксированная вертикальная панель навигации

      Создать полноразмерную «липкую» боковую панель навигации:

      Пример

      ul {
      list-style-type: none;
      маржа: 0;
      отступ: 0;
      ширина: 25%;
      цвет фона: # f1f1f1;
      высота: 100%; / * Полная высота * / Позиция
      : фиксированная; / * Заставить прилипнуть, даже при прокрутке * /
      перелив: авто; / * Включить прокрутку, если в боковой навигации слишком много контента * /
      }

      Попробуй сам »

      Примечание: Этот пример может некорректно работать на мобильных устройствах.



      CSS Горизонтальная панель навигации


      Горизонтальная панель навигации

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

      Элементы встроенного списка

      Одним из способов создания горизонтальной панели навигации является указание элементов

    • как встроенный, в дополнение к «стандартному» коду с предыдущей страницы:

      Объяснение примера:

      • дисплей: встроенный; — По умолчанию элементы
      • являются блочными.Мы тут удалить разрывы строк до и после каждого элемента списка, чтобы отобразить их в одной строке

      Элементы плавающего списка

      Еще один способ создания горизонтальной панели навигации — разместить

    • элементов и укажите макет для ссылок навигации:

      Пример

      Ли {
      плыть налево;
      }

      а {
      дисплей: блок;
      отступ: 8 пикселей;
      цвет фона: #dddddd;
      }

      Попробуй сам »

      Объяснение примера:

      Совет: Добавьте цвет фона в

        вместо каждого элемента , если хотите цвет фона на всю ширину:


        Примеры горизонтальной панели навигации

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

        Пример

        ul {
        list-style-type: none;
        маржа: 0;
        отступ: 0;
        переполнение: скрытый;
        цвет фона: # 333;
        }

        ли {
        плыть налево;
        }

        li a {
        дисплей: блок;
        белый цвет;
        выравнивание текста: по центру;
        отступ: 14 пикселей 16 пикселей;
        текст-оформление: нет;
        }

        / * Измените цвет ссылки на # 111 (черный) при наведении * /
        li a: hover {
        background-color: # 111;
        }

        Попробуй сам »

        Активная / текущая ссылка для навигации

        Добавьте «активный» класс к текущей ссылке, чтобы пользователь знал, на какой странице он находится:

        Ссылки с выравниванием по правому краю

        Выровнять ссылки по правому краю, перемещая элементы списка вправо ( float: right; ):

        Пример

        Попробуй сам »

        Разделители границы

        Добавьте свойство border-right в

      • , чтобы создать разделители ссылок:

        Пример

        / * Добавляем серую правую границу ко всем элементам списка, кроме последнего элемента (последний ребенок) * /
        li {
        граница справа: 1px solid #bbb;
        }

        li: last-child {
        border-right: нет;
        }

        Попробуй сам »

        Фиксированная панель навигации

        Сделать так, чтобы панель навигации оставалась вверху или внизу страницы, даже когда пользователь прокручивает страницу:

        Примечание. Фиксированное положение может некорректно работать на мобильных устройствах.

        Серая горизонтальная панель навигации

        Пример серой горизонтальной панели навигации с тонкой серой рамкой:

        Пример

        ul {
        border: 1px solid # e7e7e7;
        цвет фона: # f3f3f3;
        }

        li a {
        цвет: # 666;
        }

        Попробуй сам »

        Липкая панель навигации

        Добавить позиция: липкая; в

          , чтобы создать липкую панель навигации.

          Закрепленный элемент переключается между относительным и фиксированным, в зависимости от положения прокрутки.Он позиционируется относительно до тех пор, пока не будет достигнута заданная позиция смещения в области просмотра — затем он «застревает» на месте (например, position: fixed).

          Пример

          ul {
          position: -webkit-sticky; / * Safari * /
          положение: липкое;
          верх: 0;
          }

          Попробуй сам »

          Примечание. Internet Explorer не поддерживает фиксированное позиционирование. Safari требует -webkit- префикс (см. пример выше). Вы также должны указать по крайней мере один из верхний , правый , нижний или левый для липкое позиционирование для работы.


          Другие примеры

          Адаптивный Topnav

          Как использовать медиа-запросы CSS для создания отзывчивой верхней навигации.

          Попробуй сам »

          Адаптивный Sidenav

          Как использовать медиа-запросы CSS для создания адаптивной боковой навигации.

          Попробуй сам »

          — HTML: язык разметки гипертекста

          HTML-элемент

          является семантической альтернативой
            .Он представляет собой неупорядоченный список элементов (представленный элементами
          • ), каждый из которых представляет собой ссылку или другую команду, которую пользователь может активировать.

            Примечание:

            В предыдущей версии спецификации HTML элемент

            имел дополнительный вариант использования в качестве контекстного меню. Эта функция теперь считается устаревшей и была удалена из спецификации. Firefox был единственным браузером, который реализовал эту функциональность, которая включала атрибуты label и context .

            Категории содержимого

            Содержание потока. Если дочерние элементы элемента включают хотя бы один элемент

          • : ощутимое содержимое.

          • Разрешенное содержание

            Ноль или более случаев

          • ,

            Атрибуты

            В дополнение к глобальным атрибутам, ниже приводится список атрибутов, относящихся к тегу

            :

            Атрибут Описание Совместимость с HTML
            контекст Тип меню.Это может быть одно из следующих значений: контекст, панель инструментов, список HTML5
            этикетка Метка меню HTML5

            Примечание

            • HTML-элемент находится внутри тега.
            • Тег состоит из тегов
            • .
            • Вы можете вкладывать списки
                ,
                  и.

                Совместимость с браузером

                Тег

                не реализован в большинстве браузеров.

                Пример

                Мы обсудим тег

                ниже, исследуя примеры использования тега в HTML5 и HTML 4.01.

                HTML5 Документ

                Если вы создали новую веб-страницу в HTML5, ваш тег

                может выглядеть так:

                  
                
                
                
                
                 Пример HTML5 от www.techonthenet.com 
                
                
                
                
                  
              1. В этом примере документа HTML5 мы создали неупорядоченный список меню с помощью тега

                , стилизованного под панель инструментов.Панель инструментов содержит меню «Файл» с функциями «Создать» и «Сохранить», а также меню «Правка» с функциями «Копировать» и «Вставить».

                HTML 4.01 Переходный документ

                Тег

                устарел в HTML 4.01 Transitional.

                CSS: фиксированные меню

                CSS: фиксированные меню

                См. Также указатель всех подсказок.

                На этой странице:

                Закрепленное меню

                Меню, которое вы видите справа на этой странице, представляет собой просто список UL. Но это остается неизменным при прокрутке страницы.(Возможно, вам придется сделать окно меньше, чтобы сначала получить полосу прокрутки). она остается на месте по правилам таблицы стилей. Здесь разметка меню, она берется прямо из источника этого страница:

                  

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

                 #menu {
                  положение: фиксированное;
                  справа: 0;
                  верх: 50%;
                  ширина: 8em;
                  верхнее поле: -2,5em;
                } 

                Интересным правилом здесь является « position: fixed », при котором DIV остается фиксированным на экране. Топ ': 50% 'и' справа: 0 'определяют, где DIV в данном случае отображается: 50% вниз от верхнего края окна, и константа 0px справа.Прочие свойства, наценки, границы, цвета и т. д. могут быть добавлены в соответствии с личным вкусом.

                Существуют также свойства left и bottom для привязки элемент слева или внизу экрана.

                Подробнее

                Точнее: после того, как элемент был зафиксирован с « position: fixed », три свойства «left», «width» и "право" вместе определяют горизонтальное положение и размер, относительно окна. (В CSS используется более общее слово viewport; окно является примером области просмотра.)

                Вам нужно не более двух из трех свойств, т.е. left & ширина, правая и ширина или левая и правая. Установка только одного из возможно также три или вообще ни одного. В этом случае CSS будет использовать естественный («внутренний») размер и / или положение элемента, как необходимо, для любых свойств, для которых оставлено значение по умолчанию ('авто').

                То же самое касается трио «верх», «высота» и «низ». Ты необходимо установить не более двух из них: 'top', если вы хотите контролировать расстояние от верхней части окна, «низ» для управления расстояние от низа и «высота», если вы хотите указать фиксированная высота.

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

                FAQ: IE 5 и 6 в Windows?

                Если вы посмотрите на эту страницу в Microsoft Internet Explorer 5 или 6 в Windows («WinIE5» и «WinIE6») вы заметите, что это не работай. Многие спрашивают меня об этом, поэтому вот небольшое объяснение.Вкратце: ошибка в браузере, а не на этой странице.

                WinIE5 и WinIE6 не реализуют «фиксированный». Это прискорбно, но большая проблема в том, что они также не разбирают "позицию" собственность правильно. Браузер, который не знает "исправлено", должен отбросьте правило "положение: зафиксировано" и вернитесь к тому, что предыдущее значение 'position' в таблице стилей было. Тогда мы могли бы добавьте 'position: absolute' непосредственно перед 'fixed' и браузером использовал бы это.Но в WinIE 5 и 6 этого не происходит. Очевидно, ключевое слово «фиксированный» каким-то образом интерпретируется как «статический».

                Вы не можете сделать поддержку WinIE5 и 6 «фиксированной», но есть решение проблемы синтаксического анализа. Йоханнес Кох предупредил меня о этот трюк (из его коллекции обходных путей [страница на archive.org]). Первый замените 'position: fixed' в правилах стиля выше на 'position: absolute', а затем вставьте следующее правило в таблица стилей:

                 *> # intro {position: fixed} 

                В результате браузеры, которые знают о '>' (дочерний) селектор CSS будет использовать это правило, но браузеры, которые не, в частности WinIE5 и WinIE6, проигнорирует его.Правило Вместо этого будет использоваться 'position: absolute', и меню будет в в нужном месте, за исключением того, что оно не останется неизменным, когда вы прокрутка.

                Важно, чтобы вокруг символа «>» не было пробелов.

                Пример строки меню навигации | WAI-ARIA Authoring Practices 1.1

                Пример меню навигации | Практика создания WAI-ARIA 1.1

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

                Подобные примеры включают:

                Пример

                Специальные возможности

                1. Поскольку строка меню представляет собой систему навигации по сайту, она заключена в область навигации, реализованную с помощью элемента nav , который имеет aria-label , который соответствует метке на строке меню.
                2. Значки со стрелкой вниз и вправо сделаны совместимыми с режимом высокой контрастности и скрыты от программ чтения с экрана с помощью свойства содержимого CSS для визуализации изображений.

                Поддержка клавиатуры

                Menubar

                Ключ Функция
                Пробел
                Введите
                Открывает подменю и перемещает фокус на первый элемент подменю.
                Стрелка вправо
                • Перемещает фокус на следующий элемент в строке меню.
                • Если фокус находится на последнем элементе, перемещает фокус на первый элемент.
                Стрелка влево
                • Перемещает фокус на предыдущий элемент в строке меню.
                • Если фокус находится на первом элементе, перемещает фокус на последний элемент.
                Стрелка вниз Открывает подменю и перемещает фокус на первый элемент подменю.
                Стрелка вверх Открывает подменю и перемещает фокус на последний элемент в подменю.
                Дом Перемещает фокус на первый элемент в строке меню.
                Конец Перемещает фокус на последний элемент в строке меню.
                Персонаж
                • Перемещает фокус на следующий элемент в строке меню, имя которого начинается с набранного символа.
                • Если ни один из элементов не имеет имени, начинающегося с набранного символа, фокус не перемещается.

                Подменю

                Ключ Функция
                Пробел
                Введите
                • Активирует пункт меню, вызывая активацию ссылки.
                • ПРИМЕЧАНИЕ: ссылки ведут на фиктивные страницы; используйте функцию возврата браузера, чтобы вернуться к этой странице примера меню.
                Побег
                • Закрывает подменю.
                • Перемещает фокус на родительский элемент меню.
                Стрелка вправо
                • Если фокус находится на элементе с подменю, открывает подменю и переводит фокус на первый элемент.
                • Если фокус находится на элементе, у которого нет подменю:
                  • Закрывает подменю.
                  • Перемещает фокус на следующий элемент в строке меню.
                  • Открывает подменю недавно выделенного элемента строки меню, сохраняя фокус на этом родительском элементе строки меню.
                Стрелка влево
                • Закрывает подменю и перемещает фокус на родительский пункт меню.
                • Если элемент родительского меню находится в строке меню, также:
                  • перемещает фокус на предыдущий элемент в строке меню.
                  • Открывает подменю недавно выделенного элемента строки меню, сохраняя фокус на этом родительском элементе строки меню.
                Стрелка вниз
                • Перемещает фокус на следующий элемент в подменю.
                • Если фокус находится на последнем элементе, перемещает фокус на первый элемент.
                Стрелка вверх
                • Перемещает фокус на предыдущий элемент подменю.
                • Если фокус находится на первом элементе, перемещает фокус на последний элемент.
                Дом Перемещает фокус на первый элемент подменю.
                Конец Перемещает фокус на последний элемент в подменю.
                Персонаж
                • Перемещает фокус на следующий элемент, имя которого начинается с набранного символа.
                • Если ни один из элементов не имеет имени, начинающегося с набранного символа, фокус не перемещается.

                Атрибуты роли, свойства, состояния и табиндекса

                Menubar

                Роль Атрибут Элемент Использование
                меню ul
                • Определяет элемент как контейнер меню для набора элементов меню .
                • Невозможно сфокусировать, поскольку фокус управляется с помощью перемещающегося tabindex.
                aria-label = " строка " ul
                • Определяет доступное имя для строки меню .
                • Помогает пользователям вспомогательных технологий понять назначение строки меню и отличить его от любых других строк меню или подобных элементов на странице.
                элемент меню a
                • Обозначает элемент как пункт меню.
                • Доступное имя вычисляется из текстового содержимого элемента a .
                tabindex = "- 1" a Делает элементом клавиатуры , но не частью последовательности табуляции.
                tabindex = "0" a
                • Включает элемент в последовательность Вкладка .
                • Только один элемент строки меню имеет tabindex = "0" .
                • При загрузке страницы первый элемент строки меню имеет tabindex = "0" .
                • Focus управляется с помощью roving tabindex.
                aria-haspopup = "true" a Указывает, что в пункте меню есть подменю.
                aria-extended = "true" a Указывает, что подменю открыто.
                aria-extended = "false" a Указывает, что подменю закрыто.
                нет ли
                • Удаляет подразумеваемую роль listitem элемента li .
                • Необходимо, потому что родительский элемент ul служит в качестве меню , поэтому элементы li не находятся в их требуемом контексте списка.

                Подменю

                Роль Атрибут Элемент Использование
                меню ul Определяет элемент как контейнер меню для набора пунктов меню.
                aria-label = " строка " ul
                • Определяет доступное имя для меню .
                • Помогает пользователям вспомогательных технологий понять назначение меню и отличить его от любого другого меню или подобных элементов (например,г. строка меню) на странице.
                элемент меню a
                • Обозначает элемент как пункт меню.
                • Доступное имя вычисляется из текстового содержимого элемента a .
                tabindex = "- 1" a Сохраняет фокусируемый элемент a , но удаляет его из последовательности Tab .
                aria-haspopup = "true" a Указывает, что у пункта меню есть подменю.
                aria-extended = "true" a Указывает, что подменю открыто.
                aria-extended = "false" a Указывает, что подменю закрыто.
                нет ли
                • Удаляет подразумеваемую роль listitem элемента li .
                  Оставить комментарий

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

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

                  © 2019 Штирлиц Сеть печатных салонов в Перми

                  Цифровая печать, цветное и черно-белое копирование документов, сканирование документов, ризография в Перми.