Как разместить элементы списка горизонтально или горизонтальное меню с помощью CSS

3 июля 2015

ДемоИсходники

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

Так как любое меню представляет из себя список ссылок, которые ведут на внутренние страницы сайта. Для создания меню обычно используют маркированные списки, которые создаются с помощью html тегов <ul> и <li>. Но как известно элементы списка по умолчанию выстраиваются вертикально друг под другом, а что если необходимо сделать горизонтальное меню? С использованием CSS это не является большой проблемой.

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

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

Для того чтобы идентифицировать список и задать для него нужные css стили, я добавил к нему атрибут id с идентификатором "menu".

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

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

Если же требуется получить горизонтальное меню, то просто необходимо расположить элементы списка по горизонтали. Для этого к селектору LI следует добавить стилевое свойство display со значением inline или inline-block. Я буду использовать правило display:inline-block. Итак, для того, чтобы элементы списка выстроились по горизонтали просто добавляем код CSS:

<style>
    ul#menu li{
        display:inline-block; /* расположить пункты горизонтально */
    }
</style>

Теперь элементы списка будут расположены по горизонтали:

Как видим пункты меню выстроились в один горизонтальный ряд. Но пока на меню похоже не очень. Теперь, чтобы получить полноценную навигационную панель, оформим меню с помощью css стилей. Для начала добавим фон для панели, растянем ссылки на весь пункт <code>li</code>, уберем подчеркивание ссылок, настроим отступы и др.:

<style>
    #menu, #menu li {
        margin: 0; /* убрать внутренние отступы */
        padding: 0; /* убрать внешние отступы */
    }
    #menu {
        background: #03658e; /* цвет фона навигационной панели */
    }
    #menu li{
        display:inline-block; /* расположить пункты горизонтально */
        text-align: center; /* текст горизонтально по центру */
    }
    #menu a {
        display: block; /* ссылка растягивается на весь пункт li */
        padding: 5px 15px; /* задаем внутренние отступы */
        color: #fff; /* цвет текста */
        text-decoration: none; /* убрать нижнее подчёркивание у ссылок */
    }
    #menu a:hover {
        background: #8AB8CC; /* фон пунктов при наведении */
    }
</style>

В итоге получится такое привлекательное меню:

Вообще внешний вид меню далее зависит только от вашей фантазии и знания свойств css. Далее для примера приведу несколько вариантов оформления меню.

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

Выравнять меню по центру можно так:

<style>
    #menu, #menu li {
        margin: 0;
       padding: 0;
    }
    #menu {
        text-align: center; /* пункты и текст горизонтально по центру */
       background: #03658e;
    }
    #menu li{
        display:inline-block;
        text-align: center;
    }
    #menu a {
        display: block;
        padding: 5px 15px;
        color: #fff;
       font-size:150%;
       text-decoration: none;
    }
    #menu a:hover {
        background: #8AB8CC;
    }
</style>

Результат:

Либо так:

<style>
    #menu, #menu li {
        margin: 0;
        padding: 0;
    }
    #menu {
        max-width: 550px; /* ограничение длины панели */
        margin: 0 auto; /* навигационная панель по центру страницы */
        text-align: center;
        background: #03658e;
    }
    #menu li{
        display:inline-block;
        text-align: center;
    }
    #menu a {
        display: block;
        padding: 5px 15px;
        color: #fff;
        font-size:150%;
        text-decoration: none;
    }
    #menu a:hover {
        background: #8AB8CC;
    }
</style>

Результат:

Горизонтальное меню с пунктами одинаковой ширины

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

<style>
    #menu, #menu li {
        margin: 0;
        padding: 0;
    }
    #menu {
        text-align: center;
        background: #03658e;
    }
    #menu li{
        display:inline-block;
        text-align: center;
        width: 20%; /* задаем размер пункта можно в пикселях*/
    }
    #menu a {
        display: block;
        padding: 5px 15px;
        color: #fff;
        font-size:150%;
        text-decoration: none;
    }
    #menu a:hover {
        background: #8AB8CC;
    }
</style>

Результат:

Или так:

<style>
    #menu, #menu li {
        margin: 0;
        padding: 0;
    }
    #menu {
        text-align: center;
    }
    #menu li{
        display:inline-block;
        text-align: center;
        width: 20%; /* задаем размер пункта можно в пикселях*/
    }
    #menu a {
        display: block;
        padding: 5px 15px;
        color: #fff;
        font-size:150%;
        text-decoration: none;
        background: #03658e;
        margin-right: 5px; /* добавляем отступы между пунктами */
    }
    #menu a:hover {
        background: #8AB8CC;
    }
</style>

Результат:

Если добавить немного трансформации:

<style>
    #menu, #menu li {
        margin: 0;
        padding: 0;
    }
    #menu {
        text-align: center;
    }
    #menu li{
        display:inline-block;
        text-align: center;
        width: 20%;
        -webkit-transform: skewX (-45deg); /* Трансформация Для Safari и Chrome */
        -moz-transform: skewX (-45deg); /* Трансформация Для Firefox */
        -o-transform: skewX (-45deg); /* Трансформация Для Opera */
        -ms-transform: skewX (-45deg); /* Трансформация Для IE */
        transform: skewX (-45deg); /* Трансформация CSS3 */
        background: #03658e;
    }
    #menu li a {
        display: block;
        padding: 5px 15px;
        color: #fff;
        font-size:150%;
        text-decoration: none;
        margin-left : 5px;
        -webkit-transform: skewX (45deg); /* Трансформация Для Safari и Chrome */
        -moz-transform: skewX (45deg); /* Трансформация Для Firefox */
        -o-transform: skewX (45deg); /* Трансформация Для Opera */
        -ms-transform: skewX (45deg); /* Трансформация Для IE */
        transform: skewX (45deg); /* Трансформация CSS3 */
    }
    #menu a:hover {
        -webkit-transform: skewX (45deg); /* Трансформация Для Safari и Chrome */
        -moz-transform: skewX (45deg); /* Трансформация Для Firefox */
        -o-transform: skewX (45deg); /* Трансформация Для Opera */
        -ms-transform: skewX (45deg); /* Трансформация Для IE */
        transform: skewX (45deg); /* Трансформация CSS3 */
    }
    #menu li:hover {
        background: #8AB8CC;
        -webkit-transform: skewX (-45deg); /* Трансформация Для Safari и Chrome */
        -moz-transform: skewX (-45deg); /* Трансформация Для Firefox */
        -o-transform: skewX (-45deg); /* Трансформация Для Opera */
        -ms-transform: skewX (-45deg); /* Трансформация Для IE */
        transform: skewX (-45deg); /* Трансформация CSS3 */
    }
</style>

то получим меню со скошенными углами:

На этом все, пробуйте и предлагайте свои варианты в комментариях. Ссылка на исходный файл с примерами. До новых встреч!

(7 оценок, среднее: 5,00 из 5)
Loading...

Получай статьи почтой:


Комментарии
  1. newJS

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

     

    здесь одноуровневое

    newjs.my1.ru/pages/page1/index.html

     

    а здесь многоуровневое, количество уровней не ограниченоо, но за это приходится расплачиваться ява-скриптом

    newjs.my1.ru/pages/page2/index.html

     

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

    newjs.my1.ru/load/js_skripty/js_skripty/menju_upravljaemoe_zhestom_myshi/4-1-0-16

    13 марта 2016 09:56
  2. Виктор

    Спасибо, то что надо и всё очень просто!

    10 июля 2016 12:09
  3. Роман

    У всех вариантов меню есть промежуток между пунктами. Как его убрать? Спасибо!

    11 августа 2017 04:09
  4. alex

    самый простой способ:

    #menu li{display:block;margin:0;float:left}

    22 августа 2017 01:06
  5. Роман М

    Классно еще бы как из него адаптивное меню сделать

    23 мая 2018 14:21
  6. санек

    спасибо друг

    28 января 2020 21:55
  7. Любовь

    Спасибо, а как сделать, чтоб активный пункт меню был выделен другим цветом?

    23 марта 2022 14:00

Оставить комментарий




Subscribe without commenting