Выпадающее меню css вертикальное: Вертикальное меню на CSS с выпадающим подменю по клику на плюсик

Содержание

Как создать горизонтальное меню css. Переделываем меню в вертикальное

и создания меню.

Синтаксис

HTML
  • пункт меню
  • пункт меню
  • HTML5

    Атрибуты

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

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

    Обязателен.

    Валидация

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

    корректно.

    HTML 4.01 IE Cr Op Sa Fx

    Тег MENU

    В этом выпуске:

  • Русская кухня. Уха бурлацкая
  • Украинская кухня. Вареники
  • Молдавская кухня. Паприкаш
  • Кавказская кухня. Суп-харчо
  • Прибалтийская кухня. Вертиняй
  • Результат данного примера показан на рис. 1.

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

    HTML5 IE Cr Op Sa Fx

    Тег MENU
  • Задача центрирования горизонтального меню может оказаться не такой уж простой, особенно для новичков в CSS.

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

    Пример центрированного меню

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

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

    Разметка HTML

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

    div .

    Код CSS центрированного меню

    Ниже приводится полный код CSS, с помощью которого центрируется меню. А объяснения принципа работы приводятся далее в уроке.

    #centeredmenu { float:left; width:100%; background:#fff; border-bottom:4px solid #000; overflow:hidden; position:relative; } #centeredmenu ul { clear:left; float:left; list-style:none; margin:0; padding:0; position:relative; left:50%; text-align:center; } #centeredmenu ul li { display:block; float:left; list-style:none; margin:0; padding:0; position:relative; right:50%; } #centeredmenu ul li a { display:block; margin:0 0 0 1px; padding:3px 10px; background:#ddd; color:#000; text-decoration:none; line-height:1.3em; } #centeredmenu ul li a:hover { background:#369; color:#fff; } #centeredmenu ul li a.active, #centeredmenu ul li a.active:hover { color:#fff; background:#000; font-weight:bold; }

    Как работает метод центрирования

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

    Элемент div (блочный) без смещения растягивается на всю доступную ему ширину.

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

    Стандартное выровненное влево меню

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

    Обратите внимание на следующие моменты:

    • Элемент centeredmenu div (голубой прямоугольник) смещается влево, но имеет ширину 100%, поэтому остается растянутым на всю страницу.
    • Элемент ul (розовый прямоугольник) находится внутри элемента centeredmenu div и смещается влево. Это означает, что он будет ужат до ширины своего содержимого, то есть до суммарной ширины всех закладок.
    • Все элементы li (зеленые прямоугольники) находятся внутри элемента ul и смещаются влево. Таким образом, они ужимаются до размеров ссылок в них и выстраиваются в одну горизонтальную линию.
    • Внутри каждой ссылки (оранжевые прямоугольники) выводится текст закладки: Закладка 1, Закладка 2 и так далее.

    Смещаем положение неупорядоченного списка


    Затем мы смещаем элемент ul вправо на 50% с помощью свойства position:relative; . Когда элемент смещается с указанием процента при таких условиях важно помнить, что суммарная ширина содержащихся в нем элементов не является его шириной. В нашем случае смещение происходит на половину окна браузера (или доступного для вывода пространства).В результате наше меню начинается на середине окна и частично выходит за его пределы. И переходим к следующему шагу.

    Сдвигаем положение всех элементов меню


    Осталось только сдвинуть все элементы li влево на 50%. Это 50% ширины нашего элемента ul (контейнера, который содержит меню). Таким образом, закладки смещаются точно на центр окна.

    Несколько важных замечаний

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

    • Так как элемент ul частично выходит за рамки окна, то это приводит к выводу полос прокрутки. Поэтому нужно использовать правило overflow:hidden; для элемента
      centeredmenu div
      . Таким образом, выступающая часть элемента div будет обрезана.
    • Так как элемент ul не выровнен по закладкам, то нельзя использовать никаких визуальных стилей для него. Оставьте элемент ul без фонового цвета и без рамки, чтобы он стал полностью невидимым. А стили для закладок нужно использовать только для элементов li .
    • Если нужно задать особенные стили для первой и последней закладки, нужно добавить класс для первого и последнего элементов li , чтобы можно было стилизовать их индивидуально.

    Заключение

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

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

    План урока и разметка нашего меню

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

    Собственно, я сразу напишу в html разметку с вложенными списками. То есть наши список будет двухуровневым – в нем будут другие списки. А именно, на каждый пункт 1 список, который и будет формировать выпадающее меню.

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

    Собственно, вот она, вся разметка:

    Пункт1

    Подпункт

    Подпункт

    Подпункт

    Пункт2

    Подпункт

    Подпункт

    Подпункт

    Пункт3

    Подпункт

    Подпункт

    Подпункт

    Пункт4

    Подпункт

    Подпункт

    Подпункт

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

    Собственно, я задал всей навигации идентификатор nav, а всем вложенным спискам – стилевой класс second, чтобы понимать, что они являются вложенными.

    Отлично, разметка у нас готова, можно посмотреть на результат:

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

    Пишем css-стили

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

    *{ margin: 0; padding: 0; }

    margin : 0 ;

    padding : 0 ;

    #nav{ height: 70px; } #nav ul{ list-style: none; }

    #nav{

    height : 70px ;

    #nav ul{

    list — style : none ;

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

    #nav > ul > li{ float: left; width: 180px; position: relative; }

    #nav > ul > li{

    float : left ;

    width : 180px ;

    position : relative ;

    Заметьте, что с помощью знака > мы обращаемся к пунктам списка, который непосредственно вложены в ul, а тот непосредственно вложен в nav. Это очень важно, так как позволяет не применить стиль к пунктам вложенных списков. Дело в том, что по моей задумке в главном списке пункты будут располагаться горизонтально, а во вложенных – вертикально.

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

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

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

    Тем временем, вот что у нас уже получилось:

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

    #nav li a{ display: block; background: #90DA93; border: 1px solid #060A13; color: #060A13; padding: 8px; text-align: center; text-decoration: none; } #nav li a:hover{ background: #2F718E; }

    #nav li a{

    display : block ;

    background : #90DA93;

    border : 1px solid #060A13;

    color : #060A13;

    padding : 8px ;

    text — align : center ;

    text — decoration : none ;

    #nav li a:hover{

    background : #2F718E;

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

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

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

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

    #nav li .second{ display: none; position: absolute; top: 100%; }

    #nav li .second{

    display : none ;

    position : absolute ;

    top : 100 % ;

    Во-первых, скрываем полностью вложенные списки. Во-вторых, задаем им абсолютное позиционирование и координату top: 100%. Это означает, что выпадающее меню будет отображаться четко под основным пунктом, которому принадлежит, четко под 100% высоты этого пункта.

    Теперь мы видим на веб-странице только основное меню, что нам и нужно.

    Реализуем выпадение

    Нам осталось сделать самое главное – реализовать само выпадение. В этом нет ничего сложного, смотрите на этот код:

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

    #nav li:hover .second{

    display : block ;

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

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

    #nav li li{ width: 180px; }

    #nav li li{

    width : 180px ;

    Все, проблема решена:

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

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

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

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

    Теперь остается изменить правила для селектора #nav li .second, то есть для вложенных списков, а именно, их нужно немного по-другому позиционировать. Вот так:

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

    #nav li .second{

    display : none ;

    position : absolute ;

    left : 100 % ;

    top : 0 ;

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

    Поэтому изменяем top: 100% на left: 100%. Кроме этого, координата top нам тоже нужна. Задаем ей 0, чтобы вложенное меню находилось на одном уровне с пунктом, которому соответствуют.

    Все, теперь все работает так, как надо. Можете протестировать. Как видите, я не врал, когда говорил, что придется переписать всего несколько строк кода.

    Горизонтальное меню с несколькими уровнями

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

    html — выпадающее меню CSS по вертикали

    Задай вопрос

    спросил

    Изменено 10 лет, 3 месяца назад

    Просмотрено 4к раз

    У меня есть этот сайт здесь http://surfthecurve.ca/, и у меня есть навигация для каждого элемента навигации, есть выпадающее меню, меню работает нормально, я просто не могу заставить его двигаться вертикально.

    Вот CSS для навигации

     .navigation{
        ширина:100%;
        цвет фона:#353636;
        размер шрифта: 18px;
        плыть налево;
    }
    .navigation ул {
        тип стиля списка: нет;
        поле: 0 авто;
        ширина: 825 пикселей;
    }
    . навигация ли {
        плыть налево;
    }
    .navigation ул а {
        цвет: #ffffff;
        дисплей: блок;
        отступ: 0 105px 0 0;
        текстовое оформление: нет;
        ширина:100%;
        выравнивание текста: по центру;
        преобразование текста: верхний регистр;
    }
     

    и CSS для раскрывающегося списка

     .подменю {
        дисплей: нет;
    }
    .submenu ли {
        дисплей: блок;
        текстовое оформление: нет;
        цвет: #ffffff;
        отступ: 5px 15px 5px 15px;
        поле слева: 1px;
        пробел: nowrap;
    }
    .navigation li: hover .submenu {
        дисплей: блок;
        положение: абсолютное;
    }
    .navigation li: hover .submenu li {
        плыть налево;
        размер шрифта: 13px;
    }
    уль ли а: наведите {
    фон: #353636;
    }
    ли: наведите курсор на {
        фон: #353636;
    }
    li: hover li a: hover {
        фон: #353636;
    }
    .навигация уль ли уль ли а{
        padding-left:10px !важно;
        padding-right:10px !важно;
        padding-top:0px !важно;
        padding-bottom: 0px !важно;
    }
     

    и вот HTML

     
     

    Как мне это исправить, если мое меню идет вертикально?

    Заранее спасибо,

    J

    • html
    • css
    • раскрывающееся меню

    Это должно быть достаточно просто, чтобы заставить его отображаться вертикально:

     .
      ясно: оба;
    }
     

    Теперь вам нужно стилизовать его, так как отдельные элементы li имеют разные размеры (элемент сжимается до размера текста).

    3

    Зарегистрируйтесь или войдите в систему

    Зарегистрируйтесь с помощью Google

    Зарегистрироваться через Facebook

    Зарегистрируйтесь, используя электронную почту и пароль

    Опубликовать как гость

    Электронная почта

    Требуется, но не отображается

    Опубликовать как гость

    Электронная почта

    Требуется, но не отображается

    Учебное пособие по вертикальному выпадающему меню CSS — Джозеф Райан Де Леон — филиппинский веб-дизайнер/дизайнер переднего плана/разработчик переднего плана

    Возникли проблемы с кодированием вертикального выпадающего меню CSS? Вам кажется, что это сложно сделать? Сегодня я покажу вам, как сделать это самым простым способом, используя веб-технологии HTML и CSS. Чтобы следовать этому краткому руководству, вы должны иметь хотя бы базовое представление о кодировании HTML и CSS. Если вы все еще новичок в программировании этих веб-технологий, я настоятельно рекомендую вам посетить веб-сайт W3schools, чтобы изучить основы и применить их к своим веб-проектам на работе.

    Больше никаких дискуссий, давайте начнем программировать!

    Настройка HTML-структуры вертикального выпадающего меню

    Я создал 4 навигационных ссылки, и 2 из этих ссылок имеют выпадающие меню, которые называются «О программе и услугах».

        
        
            <голова>
                <мета-кодировка="utf-8">
                Учебное пособие по вертикальному выпадающему меню CSS
            
            <тело>
                <навигация>
                    <ул>
                        
  • Главная
  • О нас <дел> <ул>
  • Элемент 1
  • Элемент 2
  • Элемент 3
  • Элемент 4
  • Услуги <дел> <ул>
  • Элемент 1
  • Элемент 2
  • Элемент 3
  • Элемент 4
  • Контакт
  • Добавьте файл CSS, чтобы добавить стиль к вертикальному раскрывающемуся меню.

    Я создал файл CSS с именем style.css и поместил его в папку css.

        
         

    Вот основной исходный код файла CSS: style.css

        навигационное # вертикальное меню :: после {
          содержание: "";
          дисплей: таблица;
          ясно: оба;
        }
    
        навигационное # вертикальное меню {
          ширина: 250 пикселей;
          цвет фона: #000;
          отступ: 10 пикселей;
          положение: родственник;
          плыть налево;
        }
        nav#vertical-menu ul.menu {
          маржа: 0;
          заполнение: 0;
        }
        nav#vertical-menu ul.menu li {
          шрифт: жирный 12px Arial, Helvetica, без засечек;
          преобразование текста: верхний регистр;
          выравнивание текста: по левому краю;
          межбуквенный интервал: 1px;
          тип стиля списка: нет;
          высота строки: 40px;
          отступ текста: 10px;
          нижняя граница: 1px сплошная #383737;
          маржа: 0 0 0 0;
        }
        nav#vertical-menu ul. menu li:last-child {
          нижняя граница: 0;
        }
        nav#vertical-menu ul.menu li a {
          цвет: #fff;
          цвет фона: прозрачный;
          текстовое оформление: нет;
          дисплей: блок;
          -webkit-transition: все 0.3s облегчены;
          -moz-transition: все 0,3 с паузы;
          -ms-transition: все 0,3 с паузы;
          -o-переход: все 0,3 с паузы;
          переход: все 0,3 сек.
        }
        nav#vertical-menu ul.menu li a:hover {
          цвет: #000;
          цвет фона: желтый;
          текстовое оформление: нет;
        }
        nav#vertical-menu ul.menu li.sub {
          положение: родственник;
        }
        nav#vertical-menu ul.menu li.sub:hover .sub-menu {
          дисплей: блок;
        }
        nav#vertical-menu ul.menu li.sub .sub-menu {
          ширина: 250 пикселей;
          цвет фона: #383737;
          отступ: 10 пикселей;
          положение: абсолютное;
          сверху: 0;
          справа: -270 пикселей;
          дисплей: нет;
        }
        nav#vertical-menu ul.menu li.sub .sub-menu ul.menu {
          маржа: 0;
          заполнение: 0;
        }
        nav#vertical-menu ul. menu li.sub .sub-menu ul.menu li {
          шрифт: жирный 12px Arial, Helvetica, без засечек;
          выравнивание текста: по левому краю;
          преобразование текста: верхний регистр;
          отступ текста: 10px;
          межбуквенный интервал: 1px;
          высота строки: 40px;
          тип стиля списка: нет;
          нижняя граница: 1px сплошная # 5b5a5a;
        }
        nav#vertical-menu ul.menu li.sub .sub-menu ul.menu li:last-child {
          нижняя граница: 0;
        }
        nav#vertical-menu ul.menu li.sub .sub-menu ul.menu li a {
          цвет: #fff;
          цвет фона: нет;
          текстовое оформление: нет;
          дисплей: блок;
          -webkit-transition: все 0.3s облегчены;
          -moz-transition: все 0,3 с паузы;
          -ms-transition: все 0,3 с паузы;
          -o-переход: все 0,3 с паузы;
          переход: все 0,3 сек.
        }
        nav#vertical-menu ul.menu li.sub .sub-menu ul.menu li a:hover {
          цвет: #000;
          цвет фона: #fff;
          текстовое оформление: нет;
        }
         

    Вот полная структура HTML + файл CSS, встроенный в страницу.