CSS меню для начинающих / Хабр

Данное руководство поможет Вам создать CSS меню для вашего сайта, оно не будет обычным, оно будет привлекать внимание пользователей, не сомневайтесь. И так приступим…

Фон для меню

Для начала создадим background, я конечно не мастер PhotoShop’a, но вот что у меня получилось за пару минут:


Графические кнопочки

Создаем изображения которые у нас будут использовать как ссылки в меню. Для этого воспользуемся PhotoShop’ом:

  • Создаем новый файл размером этак 144x58px. (размер ссылки для первого элемента в меню)
  • Наполняем графическим содержимым сей пункт меню (у меня это лишь надпись выполненная забавным шрифтом):
  • Далее увеличим размер полотна в два раза
  • И дорисуем внешний вид элемента меню для реализации события hover

    Как сия конструкция будет работать? Да очень просто — ссылке мы явно указываем размер 144x58px, а но событие mouseover перемещаем фоновое изображение вверх:
  • Создадим новый файл с произвольным размером и текстом — это будет наша подсказка к ссылке
  • Повторим все предыдущие пункты для создания всех пунктов меню, в результате анаших манипуляций у нас должен получиться вот такой набор изображений:
     

 

 

HTML код

Закончили строить из себя дизайнеров, пора начинать кодить — создадим не нумерованный список — <ul>:

  • элементу <ul> присвоеим id=«menu»
  • каждой ссылке <a> присвоим уникальное имя класса
  • Внутрь тэга <a> закинем пустой тэг <span> (понадобиться для реализации подсказок к ссылкам)

<ul id=«menu»>
<li><a href=»#» class=«home»>Home <span></span></a></li>
<li><a href=»#» class=«about»>About <span></span></a></li>
<li><a href=»#» class=«rss»>RSS <span></span></a></li>
</ul>

 

CSS код

 
 #menu 
 Для начала убираем padding и margin у меню, list-style выставляем в none, position указываем как relative.

Указываем высоту и ширину меню (см. размеры menu-bg.jpg). Добавляем фоновое изображение.
 

 #menu {
list-style: none;
padding: 0;
margin: 0;
width: 774px;
height: 210px;
background: url(images/menu-bg.jpg) no-repeat;
position: relative;
}

 
 #menu span 

 Для элементов span параметр display выставляем в none (по умолчанию не будут отображаться). Так же выставляем position как absolute.

#menu span {
display: none;
position: absolute;
}

 
 #menu a 

 Для ссылок нам необходимо спрятать текст, для этого параметру text-indent присваиваем негативное значение (-900%), и текст будет скрыт.
 

 #menu a {
display: block;
text-indent: -900%;
position: absolute;
outline: none;
}

 
 #menu a:hover 

 Теперь мы хотим сдвинуть картинку на линке по событию mouseover, для этого добавим в CSS следующий код:
 

 #menu a:hover {
background-position: left bottom;
}
 

 #menu a:hover span 

 Так же по событию mouseover необходимо отобразить подсказку

#menu a:hover span {
display: block;
}

 
 #menu . home

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

 #menu .home {
width: 144px;
height: 58px;
background: url(images/home.gif) no-repeat;
left: 96px;
top: 96px;
}

 
 #menu .home span 

 Теперь проведем подобную операцию для всплывающей подсказки
 

 #menu .home span {
width: 86px;
height: 14px;
background: url(images/home-over.gif) no-repeat;
left: 28px;
top: -20px;
}

 
 #menu .about 

 Копируем всё что мы сделали для элемента .home и переименовываем в .

about. Подгоняем размер и расположение, так же заменяем фон.
 

#menu .about {
width: 131px;
height: 51px;
background: url(images/about.gif) no-repeat;
left: 338px;
top: 97px;
}
#menu .about span {
width: 40px;
height: 12px;
background: url(images/about-over.gif) no-repeat;
left: 44px;
top: 54px;
}

 
 #menu .rss 

Повторим для .rss

#menu .rss {
width: 112px;
height: 47px;
background: url(images/rss.gif) no-repeat;
left: 588px;
top: 94px;
}
#menu .rss span {
width: 92px;
height: 20px;
background: url(images/rss-over.gif) no-repeat;
left: 26px;
top: -20px;
}

 
Всё в одном

#menu {
list-style: none;
padding: 0;
margin: 0;
width: 774px;
height: 210px;
background: url(images/menu-bg. jpg) no-repeat;
position: relative;
}
#menu span {
display: none;
position: absolute;
}
#menu a {
display: block;
text-indent: -900%;
position: absolute;
outline: none;
}
#menu a:hover {
background-position: left bottom;
}
#menu a:hover span {
display: block;
}
 
 #menu .home {
width: 144px;
height: 58px;
background: url(images/home.gif) no-repeat;
left: 96px;
top: 73px;
}
#menu .home span {
width: 86px;
height: 14px;
background: url(images/home-over.gif) no-repeat;
left: 28px;
top: -20px;
}
 
 #menu .about {
width: 131px;
height: 51px;
background: url(images/about.gif) no-repeat;
left: 338px;
top: 97px;
}
#menu . about span {
width: 40px;
height: 12px;
background: url(images/about-over.gif) no-repeat;
left: 44px;
top: 54px;
}
 
 #menu .rss {
width: 112px;
height: 47px;
background: url(images/rss.gif) no-repeat;
left: 588px;
top: 94px;
}
#menu .rss span {
width: 92px;
height: 20px;
background: url(images/rss-over.gif) no-repeat;
left: 26px;
top: -20px;
}

Это всё, протестировать меню можете тут, а скачать пример тут.

Вольный перевод: http://www.webdesignerwall.com/tutorials/advanced-css-menu/

Кросспост: CSS меню в стиле Web 2.0

— HTML | MDN

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

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

HTML-элемент <menu> представляет группу команд, которые пользователь может выполнить или активировать. Он включает как меню-списки, которые могут отображаться в верхней части экрана, так и контекстные меню, например, такие, что могут появиться под кнопкой после нажатия.

Категории контента (en-US)Flow content (en-US). If the element’s children include at least one <li> element: Palpable content.
Разрешённое содержимоеIf the element is in the list menu state: flow content (en-US), or alternatively, zero or more occurrences of <li>, <script>, and <template>. (list menu is the default state, unless the parent element is a <menu> in the context menu state.)If the element is in the context menu state: zero or more occurrences, in any order, of <menu> (context menu state only), <menuitem> (en-US), <hr>, <script>, and <template>.
Пропуск тегаНет, открывающий и закрывающий теги обязательны.
Разрешённые родительские элементыЛюбой элемент, который поддерживает основной поток (en-US).
Implicit ARIA rolelist
Разрешённые роли ARIAdirectory, group, listbox, menu, menubar, none, presentation, radiogroup, tablist, toolbar или tree
DOM-интерфейсHTMLMenuElement (en-US)

К этому элементу применимы глобальные атрибуты.

label Deprecated

The name of the menu as shown to the user. Used within nested menus, to provide a label through which the submenu can be accessed. Must only be specified when the parent element is a <menu> in the context menu state.

type

This attribute indicates the kind of menu being declared, and can be one of two values.* context Deprecated : Indicates the popup menu state, which represents a group of commands activated through another element. This might be as a button menu referenced by a menu attribute of a <button> element, or as context menu for an element with a contextmenu (en-US) attribute. This value is the default if the attribute is missing and the parent element is also a <menu> element.

  • toolbar: Indicates the toolbar state, which represents a toolbar consisting of a series of commands for user interaction. This might be in the form of an unordered list of <li> elements, or, if the element has no <li> element children, flow content (en-US) describing available commands. This value is the default if the attribute is missing.

The <menu> and <ul> elements both represent an unordered list of items. The key difference is that <ul> primarily contains items for display, whilst <menu> is intended for interactive items, to act on.

An HTML menu can be used to create context menus (typically activated by right-clicking another element) or toolbars.

Context menus consist of a <menu> element which contains <menuitem> (en-US) elements for each selectable option in the menu, <menu> elements for submenus within the menu, and <hr> elements for separator lines to break up the menu’s content into sections. Context menus are then attached to the element they’re activated from using either the associated element’s contextmenu attribute or, for button-activated menus attached to <button> elements, the menu attribute.

Toolbar menus consist of a <menu> element whose content is described in one of two ways: either as an unordered list of items represented by <li> elements (each representing a command or option the user can utilize), or (if there are no <li> elements), flow content (en-US) describing the available commands and options.

This element was deprecated in HTML4, but reintroduced in HTML5.1 and the HTML living standard. This document describes the current Firefox implementation. Type ‘list’ is likely to change to ‘toolbar’ according to HTML5.1.

Устарело: Эта возможность была удалена из веб-стандартов. Хотя некоторые браузеры по-прежнему могут поддерживать её, она находится в процессе удаления. Не используйте её ни в старых, ни в новых проектах. Страницы или веб-приложения, использующие её, могут в любой момент сломаться.

HTML
<!-- A <div> element with a context menu -->
<div contextmenu="popup-menu">
  Right-click to see the adjusted context menu
</div>
<menu type="context">
  <menuitem>Action</menuitem>
  <menuitem>Another action</menuitem>
  <hr/>
  <menuitem>Separated action</menuitem>
</menu>
CSS
div {
  width: 300px;
  height: 80px;
  background-color: lightgreen;
}
Result

Предупреждение: Menu buttons haven’t been implemented in any known browsers yet. The type attribute on the <menu> element is now obsolete.

Предупреждение: <menuitem> (en-US) element is obsolete.

HTML
<!-- A button, which displays a menu when clicked. -->
<button type="menu" menu="popup-menu">
  Dropdown
</button>
<menu type="context">
  <menuitem>Action</menuitem>
  <menuitem>Another action</menuitem>
  <hr/>
  <menuitem>Separated action</menuitem>
</menu>
Result

Toolbar

Предупреждение: Toolbar menus haven’t been implemented in any known browsers yet.

HTML
<!-- A context menu for a simple editor,
   - containing two menu buttons. -->
<menu type="toolbar">
  <li>
    <button type="menu" menu="file-menu">File</button>
    <menu type="context">
      <menuitem label="New...">
      <menuitem label="Save...">
    </menu>
  </li>
  <li>
    <button type="menu" menu="edit-menu">Edit</button>
    <menu type="context">
      <menuitem label="Cut...">
      <menuitem label="Copy...">
      <menuitem label="Paste...">
    </menu>
  </li>
</menu>
Result

SpecificationStatusComment
HTML Living Standard
Определение ‘<menu>’ в этой спецификации.
Живой стандартNo change from latest snapshot, Unknown
HTML 5.1
Определение ‘<menu>’ в этой спецификации.
Рекомендация

BCD tables only load in the browser

with JavaScript enabled. Enable JavaScript to view data.
  • Other list-related HTML Elements: <ol>, <ul>, <li>, <hr>, and the obsolete <dir> (en-US).
  • The contextmenu global attribute can be used on an element to refer to the id of a menu with type="context".

Last modified: , by MDN contributors

18 мобильных меню CSS

Коллекция отобранных бесплатных HTML и CSS мобильных меню примеров кода из codepen и других ресурсов. Обновление коллекции за июль 2019 года. 2 новых предмета.

  1. Меню CSS
  2. Круглые меню CSS
  3. Выпадающие меню CSS
  4. Меню боковой панели CSS
  5. Горизонтальные меню CSS
  6. Полноэкранные меню CSS
  7. Скользящие меню CSS
  8. Переключаемые меню CSS
  9. CSS Off-Canvas меню
О коде

Гамбургер

Использование clip-path для создания эффекта открытия меню гамбургера.

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Ответ: да

Зависимости: —

О коде

Наклоните, чтобы освободить место для меню

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

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Ответ: да

Зависимости: —

О коде

Анимированное мобильное меню

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

Мобильная навигация CSS

Вдохновлен «Раскладывающимся меню гамбургеров на чистом CSS» Эрика Тервана.

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

Анимация мобильного меню

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

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

Концепция мобильного меню

Вдохновлено «Идеей веб-навигации iPhone X» https://dribbble.com/shots/3851367-iPhone-X-Web-Navigation-Idea.

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

Волшебное мобильное мегаменю

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

Анимированная навигация для специальных возможностей

Доступное, прогрессивно-расширенное меню навигации с круговым анимированным фоном.

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

Стиль мобильного меню

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

Меню с эффектами прокрутки

Меню меню приложения с эффектами прокрутки и наведения.

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

Мобильное меню

Мобильное меню на чистом CSS.

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

Мобильная навигация

только CSS мобильная навигация триггер и меню.

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

Чистая CSS-навигация

Чистая навигация CSS проста и удобна.

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

3 анимации мобильной навигации

3 Чистый CSS мобильная навигация анимация.

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

Прототип слайдера мобильного меню

Прототип слайдера мобильного меню в HTML, CSS и JavaScript.

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

Навигация по приложениям

Концепция навигации в мобильном приложении.

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

О коде

Мобильное меню в стиле Apple

Навеяно мобильным меню от Apple.

Совместимые браузеры: Chrome, Edge, Firefox, Opera, Safari

Зависимости: —

Matcha.fyi Идеи кода с кофеином

Для новичков в CSS панель навигации — это то, с чем вы рано или поздно столкнетесь. потом. Это первый пост из серии руководств по основам кода, которые я делаю в связи с перезагрузкой моего канала на YouTube. Я писатель по силе, но я также хочу стать лучше

Для новичков в CSS панель навигации — это то, с чем вы столкнетесь рано или поздно. Это первый пост из серии руководств по основам кода, которые я делаю в связи с перезагрузкой моего канала на YouTube.

Я писатель по силе, но я также хочу научиться лучше объяснять вещи словесно. Это часть записи для видео ниже. Не забудьте поставить лайк и подписаться 😉


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

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

  

Вот как он выглядит в настоящее время:

Короче говоря, это довольно простой Интернет 1980-х годов. Так как же нам перейти от приведенного выше к скриншоту ниже?

Во-первых, начните с обводки всех ваших элементов, чтобы вы точно знали, на что нацелен ваш CSS.

 ul{граница: сплошная 1px черная;}
li{граница: сплошной зеленый 1px;}
a{border:solid 1px red;} 

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

Да. Это все еще некрасиво. Но мы приближаемся к этому.

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

Вот новый CSS:

 ul{
    граница: сплошная 1px черная;
}
ли {
    граница: сплошная 1px зеленого цвета;
    дисплей: встроенный блок;
}
а {
    граница: сплошная 1px красная;
} 

Вот как это выглядит:

Да. Я знаю. Это все еще уродливо, но, по крайней мере, теперь все вроде как в правильном положении. Следующий шаг — избавиться от пробела перед 9.0031 Дом . Этот интервал вызван настройками по умолчанию padding , которые есть во всех списках. Чтобы избавиться от заполнения, мы можем сделать это, установив padding на 0 по адресу ul .

Вот как сейчас выглядит CSS:

 ul{
    граница: сплошная 1px черная;
    заполнение: 0;
}
ли {
    граница: сплошная 1px зеленого цвета;
    дисплей: встроенный блок;
}
а {
    граница: сплошная 1px красная;
} 

Вот как выглядит панель навигации по меню:

Панель навигации по меню выглядит слишком узкой. Давайте сделаем его немного больше. Для этого мы можем поставить прокладку на li . Однако наша кликабельная область остается небольшой и может немного раздражать пользователя.

Если мы поместим padding на li , кликабельной областью будет только то, что находится в областях с красной рамкой.

Однако, если мы переместим отступ в селектор a , мы получим что-то вроде этого:

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

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

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

Вот новый CSS:

 ul{
    граница: сплошная 1px черная;
    заполнение: 0;
}
ли {
    граница: сплошная 1px зеленого цвета;
    дисплей: встроенный блок;
}
а {
    граница: сплошная 1px красная;
    дисплей:блок;
    отступ: 10 пикселей;
} 

Вот как выглядит панель навигации по меню с display:block , примененным к селектору a .

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

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

 ул{
    заполнение: 0;
    фон: черный;
}
ли {
    дисплей: встроенный блок;
}
а {
    дисплей:блок;
    отступ: 10 пикселей;
} 

Вот как это выглядит:

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

 ул{
    заполнение: 0;
    фон: черный;
}
ли {
    дисплей: встроенный блок;
}
а {
    дисплей:блок;
    отступ: 10 пикселей;
    белый цвет;
    текстовое оформление: нет;
} 

Вот как это выглядит сейчас:

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

Автор записи

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

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