Сайт о телевидении

Сайт о телевидении

» » Плавно открывающееся меню с помощью CSS. Выпадающие меню на HTML и CSS

Плавно открывающееся меню с помощью CSS. Выпадающие меню на HTML и CSS

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

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

  • Главная
  • Статьи
    • HTML
    • CSS
    • PHP
    • MySQL
  • Книги
    • Раскрутка и продвижение
    • Е-Бизнес
    • Web-Дизайн
    • Платежные системы
  • О нас

Довольно простой и не сложный получился html-код. Выглядеть этот список будет так .

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

#nav ul { margin: 0px; padding: 0px; list-style:none; width:200px; }

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

#nav ul li { position: relative; border-bottom:1px solid #ccc; }

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

#nav li ul { position: absolute; left: 200px; top: 0; display: none; }

Используя атрибуты left и top мы задаем абсолютное позиционирование нашего подменю относительно родительского пункта меню. Также я присвоил атрибуту "display" значение "none" , так как мы не хотим видеть подменю при открытии страницы.

Итак, теперь наше меню выглядит так.

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

#nav ul li a { display: block; text-decoration: none; color: #777; background: #fff; padding: 5px; }

#nav li:hover ul { display: block; }

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

Осталось придать ему более привлекательный вид.

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

#nav li:hover a { color:#FFFFFF; background: url(img/fone-tr.png); }

Здесь я в качестве фона использую вот эту картинку , но Вы можете использовать и заливку любым другим цветом (например: background-color:#0000ff; ).

#nav li:hover ul a:hover { background-color:#cccccc; background-image:none; color:#FFFFFF; }

Ну вот и все! Наше выпадающее меню на html и CSS готово. Можете посмотреть, что у нас получилось .

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

Для того чтобы устранить эту проблему, добавим небольшой JavaScript-код:

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

jsHover = function() { var hEls = document.getElementById("nav").getElementsByTagName("LI"); for (var i=0, len=hEls.length; i ul > li{ width: 180px; position: relative; } #nav li a{ display: block; background: #ccc; border: 1px solid #333; color: #fff; padding: 15px; } #nav li a:hover{ background: #999; }

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

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

Делаем вертикальное меню выпадающим

Пока у нас все вложенные меню видно. Это неправильно, по умолчанию их не должно быть на странице, а появляться они должны только при наведении. То есть при наведении на конкретный пункт должно появляться меню только для него. Суть ясна?

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

#nav li .second-ul{ display: block; position: absolute; left: 100%; top: 0; }

То есть для вложенного списка указываем абсолютное позиционирование и сдвиг влево на 100% ширины от ширины родительского блока (пункта списка). А насколько мы знаем, ширина у него 180 пикселей. По высоте вложенное меню должно быть на одном уровне. После этих манипуляций у вас должно получится так:

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

#nav li:hover .second-ul{ display: block; }

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

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

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

#nav li li{ width: 180px; }

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

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

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

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

  • нашего списка будет содержать по одной ссылке:

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

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

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

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

    #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; }

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

    Название документа #navbar { margin: 0; padding: 0; list-style-type: none; width: 100px; } #navbar li { border-left: 10px solid #666; border-bottom: 1px solid #666; } #navbar a { background-color: #949494; color: #fff; padding: 5px; text-decoration: none; font-weight: bold; border-left: 5px solid #33ADFF; display: block; }

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

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

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

    #navbar a:hover { background-color: #666; border-left: 5px solid #3333FF; } Попробовать »

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

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

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

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

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

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

    #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; } Попробовать »

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

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

    Сначала нам нужно создать HTML-структуру нашего меню. Основные навигационные ссылки мы поместим в маркированный список:

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

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

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

    Теперь приступим к написанию CSS кода. Для начала необходимо скрыть список с подпунктами с помощью объявления display: none;, чтобы они не отображались на веб-странице все время. Для отображения подпунктов нам нужно чтобы при наведении на элемент

  • список снова был преобразован в блочный элемент:

    #navbar ul { display: none; } #navbar li:hover ul { display: block; }

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

    #navbar, #navbar ul { margin: 0; padding: 0; list-style-type: none; } #navbar li { float: left; } #navbar ul li { float: none; }

    Затем нам нужно сделать так, чтобы наше выпадающее подменю не смещало контент, расположенный под панелью навигации, вниз. Для этого мы зададим пунктам списка position: relative; , а списку, содержащему подпункты position: absolute; и добавим свойство top со значением 100%, чтобы абсолютно позиционированное подменю отображалось точно под ссылкой.

    #navbar ul { display: none; position: absolute; top: 100%; } #navbar li { float: left; position: relative; } #navbar { height: 30px; } Попробовать »

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

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

    #navbar ul { display: none; background-color: #f90; position: absolute; top: 100%; } #navbar li:hover ul { display: block; } #navbar, #navbar ul { margin: 0; padding: 0; list-style-type: none; } #navbar { height: 30px; background-color: #666; padding-left: 25px; min-width: 470px; } #navbar li { float: left; position: relative; height: 100%; } #navbar li a { display: block; padding: 6px; width: 100px; color: #fff; text-decoration: none; text-align: center; } #navbar ul li { float: none; } #navbar li:hover { background-color: #f90; } #navbar ul li:hover { background-color: #666; }

    Горизонтальное выпадающее меню написано на HTML и CSS. Код HTML и стили CSS лаконичны, просты и понятны. Всего строк CSS стилей, не считая пробельные, меньше 50. В HTML удобно добавлять новые пункты и подпункты. Немного изменив CSS стили можно сделать несколько тем и изменить вид или способ появления подпунктов (темы оранжевая, сиреневая, коричневая).
    Основное отличие моего решения в том, что я не использую списки – теги

      и
    • , заменив их на простые , а применение CSS3 flexbox - нового элемента CSS3 - значительно упростило написание и читаемость HTML кода и CSS стилей, сократив при этом их объём.

      Ниже приведён рабочий пример горизонтального выпадающего меню на CSS.

      Идея заключается в следующем: горизонтальное выпадающее меню создаётся как набор колонок. Колонка представляет собой стопку подпунктов.
      Непосредственно горизонтальное меню складывается из верхних элементов стопки. Схематично это выглядит так:

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

      Joomla-3 - отличный движок для вашего сайта! Базовые расширения Модули, компоненты, плагтны, шаблоны Структура каталогов Joomla-3 Метод замещения компоновок CSS3 - продвинутые возможности дизайна Плавная смена изображений. Часть 1 Плавная смена изображений. Часть 2 Плавная смена фона Изменение фона наведением мыши Псевдоклассы и псевдоэлементы JavaScript - Активные элементы WEB-страниц Скрипт плавной смены изображений HTML5 - используйте новые теги, элементы и атрибуты Использование поигрывателя HTML5

      В обёртку помещены 4 колонки –
      блоки .В свою очередь, в каждом из них лежат пункты, составляющие само горизонтальное меню (перед top пробел!) и вложенные подпункты .
      Чтобы при выпадении вертикальных подпунктов контент, расположенный следом, не прыгал вниз длина обёртки должна немного превышать полное выпадение колонок.

      @import url("https://fonts.googleapis.com/css?family=Roboto"); #dd-menu__wrapper { display: flex; justify-content: space-between; width: 640px; min-height: 120px; margin: 1px auto; overflow: auto; } .dd-menu__column { display: flex; flex-direction: column; width: 159px; max-height: 38px; overflow: hidden; transition: 1.2s; z-index: 1000; } .dd-menu__column:hover { max-height: 600px; } .dd-menu__item { display: block; font-family: "Roboto", sans-serif; font-size: 11px; color: #ffffff; background-color: #1e90ff; border-bottom: 1px solid #fff; padding: 4px 6px; } .dd-menu__item.top { min-height: 30px; max-height: 38px; } .dd-menu__item:hover { cursor: pointer; background-color: #0062c1; } .dd-menu__item a { display: block; height: 100%; width: 100%; vertical-align: middle; text-decoration: none; color: #ffffff; }

      Обёртка горизонтального меню (3) определяется как flex-контейнер (4). Здесь же указывается, что все элементы контейнера будут равномерно распределены по горизонтали в родительском блоке (5).
      Следующие вложенные блоки (12) также будут flex-контейнерами (13), а содержащиеся в них элементы (26) будут блочными (27) и выстраиваться в колонку (14), образуя вертикальные подпункты. Изначально максимальная высота стопки равна высоте верхних пунктов (16). Все остальные элементы стопки будут скрыты (17). То есть, пока не наведётся курсор, отображаться будут только верхние пункты.
      При наведении курсора на колонку ограничение высоты снимается (22) и всё содержимое стопки выпадает вниз. Когда курсор переместится в другую область все пункты утянутся наверх.
      Все развёртки будут проходить плавно, в течение заданного времени (18). Чтобы контент не просвечивал из под развёрнутой стопки установим z-index (19).
      Поскольку, в отличии от разворачивающихся подпунктов, которые могут иметь различную высоту в зависимости от содержимого, первые (верхние) пункты всегда должны иметь высоту строки горизонтального меню, установлено жесткое ограничение min и max высоты (37,38).
      Обратите внимание, в моём случае min-height на 8 пикселей меньше max-height. Это связано с тем, что все элементы имеют снизу и сверху внутренние отступы по 4 пикселя (33). Именно сумма этих отступов и дополняет минимальную высоту пунктов горизонтального меню. Если отступов не будет значения min-height и max-height будут одинаковы.
      Примечание: В строке (36) .dd-menu__item.top top пишется через точку, без пробела!

      Все стили написаны на языке (препроцессора CSS) LESS и оттранслированы в CSS программой WinLess. Очень удобно, трудоёмкость сокращается в разы, рекомендую.
      Надеюсь, что статья оказалась для вас полезной. Good luck!

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

      Привожу сразу CSS-код :

      * html ul li {
      float: left;
      }
      * html ul li a {
      height: 1%;
      }
      ul {
      border-bottom: 1px solid #000;
      list-style: none;
      margin: 0;
      padding: 0;
      width: 100px;
      }
      ul li {
      position: relative;
      }
      ul li a {
      display: block;
      border: 1px solid #000;
      border-bottom: 1px;
      padding: 5px;
      text-decoration: none;
      }
      li ul {
      display: none;
      left: 99px;
      position: absolute;
      top: 0;
      }
      li:hover ul {
      display: block;
      }

      Самое главное здесь - это селектор "li:hover ul ". Фактически, он и показывает содержимое меню. По умолчанию, оно "display: none ", а при наведении курсора на пункт меню, подменю становится: "display: block ", то есть видимым. Это самое главное. Также в первых двух селекторах (которые со * ) идёт CSS-хак для IE , иначе без него в этом браузере ничего работать не будет. Всё остальное - это внешний вид, который, безусловно, можно менять.

      Привожу и HTML-код :



      • Главная


      • Меню 1


        • Подменю 1


        • Подменю 2


        • Подменю 3




      • Меню 2


        • Подменю4


        • Подменю 5


        • Подменю 6


        • Подменю7


        • Подменю 8




      Если внимательно вдуматься в эту структуру, то становится всё очень понятно. Тег ul - создаёт меню. Если ul находится внутри другого ul , то это уже подменю. А тег li отвечает за конкретный пункт меню.

      Разумеется, меню самое наипростейшее, как с точки зрения логики и структуры, так и с точки зрения дизайна. Разумеется, можно с помощью JQuery сделать плавное раскрытие. Можно также изменить дизайн, но весь принцип останется тем же, что и в этом подменю, написанном на CSS и HTML .



  •