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

Вопрос задан

Изменён 1 год 8 месяцев назад

Просмотрен 13k раз

Есть обычная навигация:

HTML:

<nav>
  <ul>
    <li><a href="">Продукция</a></li>
    <li><a href="">Сообщества</a></li>
    <li><a href="">Мероприятия и акции</a></li>
    <li><a href="">Поддержка</a></li>
  </ul>
</nav>

CSS:

nav {
  font-size: 0;
    line-height: 0;
    letter-spacing: -1px;
}
nav li {
  display: inline-block;
}
nav a {
    display: block;
  background: #000;
    padding: 0 10px;
    font-size: 17px;
    line-height: normal;
    letter-spacing: normal;
  color: #fff;
}
nav li:nth-child(2n) a {
  background: #666;
}

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

nav, чтобы padding у всех ссылок был одинаковым (пустого пространства между ссылками быть не должно, это пространство распределяется на внутренние отступы ссылок)?

UPD:

Изображение того, как должно отображаться меню.

  • html
  • jquery
  • css

Поставить display: flex родителю, flex-basis: auto + flex-grow: 1 — потомкам.

body,
ul {
  margin: 0;
  padding: 0;
}

ul {
  display: flex;
}

ul li {
  list-style-type: none;
  flex-basis: auto;
  flex-grow: 1;
  background: #000;
  text-align: center;
}

ul li:nth-child(2n) {
  background: #ccc;
}

ul li a {
  padding: 20px 0;
  text-decoration: none;
  color: #ccc;
  display: block;
}

ul li:nth-child(2n) a {
  color: #000;
}
<nav>
  <ul>
    <li><a href="">Продукция</a></li>
    <li><a href="">Сообщества</a></li>
    <li><a href="">Мероприятия и акции</a></li>
    <li><a href="">Поддержка</a></li>
  </ul>
</nav>

Вариант на Flexbox

body,
ul {
  margin: 0;
  padding: 0;
}

ul,
ul li,
ul li a {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
}

ul {
  text-align: center;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
  -ms-flex-direction: row;
  flex-direction: row;
}

ul li a {
  min-height: 70px;
  text-decoration: none;
  color: #333;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

ul li a:hover {
  background: #eee;
}
<nav>
  <ul>
    <li><a href="">Продукция</a></li>
    <li><a href="">Сообщества</a></li>
    <li><a href="">Мероприятия и акции</a></li>
    <li><a href="">Поддержка</a></li>
  </ul>
</nav>

4

А этот вариант не проще?

ul 
 text-align: justify!important;
    text-align-last: justify;

1

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

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

menu — Выравнивание выпадающего меню на css

Создал меню на css, но проблема в том, что выпадающее меню должно быть не прямо под пунктом меню, на которое навели курсор, а должно занимать всю ширину контейнера под пунктом меню, как на рисунке.
Подскажите, как это правильно реализовать на css? Верхнее меню смещено вправо, слева ещё может быть логотип, т.е. напротив item1,item2,item3.
и чтобы было адаптивное выпадающее меню, т.е. при уменьшении разрешения выпадающее меню также занимало всю ширину.
и ещё нужны треугольники, как на рисунке при наведении на пункт меню.

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        header{
            width: 100%;
            border: 1px solid gray;
            padding: 20px;
        }
        .wrapper{
            width: 80%;
            margin: 0 auto;
        }
        .wrapper:after{
            content: '';
            display: block;
            clear: both;
            overflow: hidden;
        }
        nav{
            width: 50%;
            float: right;
            clear: both;
        }
        .
item{ float: left; margin-right: 30px; } .dropdown{ display: none; } .drop:hover + .dropdown{ display: block; position: absolute; width: 100%; background: green; border: 1px solid gray; } </style> </head> <body> <header> <div> <nav> <ul> <li> <a href="#">item1</a> <ul> <li><p>item</p></li> <li><p>item</p></li> <li><p>item</p></li> </ul> </li> <li> <a href="#">item2</a> <ul> <li><p>item</p></li> <li><p>item</p></li> <li><p>item</p></li> </ul> </li> <li> <a href="#">item3</a> <ul> <li><p>item</p></li> <li><p>item</p></li> <li><p>item</p></li> </ul> </li> </ul> </nav> </div> </header> </body> </html>

css — Растянуть горизонтальную ul до ширины div

Asked

Изменено 2 года, 1 месяц назад

Просмотрено 122k раз

46

Новинка! Сохраняйте вопросы или ответы и организуйте свой любимый контент.
Узнать больше.

Для основной навигации моего сайта есть div шириной 980 пикселей с ul для основных ссылок навигации. Я пытаюсь сделать так, чтобы навигационные ссылки растягивались, чтобы равномерно соответствовать ширине div.

 <дел>
<ул>
  
  • Элемент навигации
  • Короткий элемент
  • Очень длинный элемент навигации
  • Ссылка для навигации
  • Другая ссылка
  • Я делаю обычный CSS, чтобы сделать список ul горизонтальным (плавающее: влево, отображение: блок). Я могу настроить заполнение li, чтобы сделать его очень близким, но что мне действительно нужно, так это способ заставить его растягиваться, чтобы он подходил автоматически. Возможный?

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

    • css
    • макет
    • html
    • html-списки

    Это самый простой способ сделать это: http://jsfiddle.net/thirtydot/jwJBd/

    8

    для равномерного распределения ширины: http://jsfiddle.net/thirtydot/jwJBd/59/)

    Это не будет работать в IE7.

     #горизонтальный стиль {
        дисплей: таблица;
        ширина: 100%;
        /*таблица-макет: исправлена;*/
    }
    #горизонтальный стиль li {
        отображение: таблица-ячейка;
    }
    #горизонтальный стиль {
        дисплей: блок;
        граница: 1px сплошной красный;
        выравнивание текста: по центру;
        поле: 0 5px;
        фон: #999;
    }
     

    Старый ответ до вашего редактирования: http://jsfiddle.net/thirtydot/DsqWr/

    2

    Люди ненавидят таблицы за нетабличные данные, но вы просите именно то, в чем таблицы хороши. <таблица>

    1

    неэлегантный (но эффективный) способ: использовать проценты

     #horizontal-style {
        ширина: 100%;
    }
    ли {
        ширина: 20%;
    }
     

    Это работает только с примером 5

  • . Если хотите больше или меньше, соответственно измените свой процент. Если у вас есть другие
  • s на вашей странице, вы всегда можете назначить им класс «menu-li», чтобы затрагивались только они.

    2

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

     #горизонтальный стиль {
      padding-inline-start: 0 !важно; // На всякий случай, если вы обнаружите, что в начале строки есть дополнительный отступ
      выравнивание содержимого: пространство вокруг;
      дисплей: гибкий;
    }
    #горизонтальный стиль {
        выравнивание текста: по центру;
        белый цвет;
        текстовое оформление: нет;
    }
     

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

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

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

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

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

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

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

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

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

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

    Панель навигации по центру во всю ширину

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

    1. Фон панели навигации должен растягиваться на всю ширину экрана (не только ширину центральной области содержимого), а
    2. .
    3. Сами элементы навигации должны по-прежнему располагаться по центру области содержимого.

    На приведенном ниже эскизе показана основная концепция дизайна.

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

    Этот учебник является результатом этой задачи.

    HTML

    Мне удалось сократить количество необходимых дополнительных разделов до одного. К сожалению, я не думаю, что это возможно сделать без хотя бы одного дополнительного блока div или без обращения к JavaScript вместо того, чтобы полностью полагаться на CSS.

     <дел>
    <ул>
    
  • О нас
  • Наши продукты
  • Часто задаваемые вопросы
  • Контакты
  • Войти
  • Если вы знакомы с кодом суперпростой панели навигации, вы увидите, что он почти идентичен, за исключением того, что я заключил тег ul в div и переместил идентификатор «nav» в него. разд.

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

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

    CSS

    Опять же, все, что я здесь сделал, это взял предыдущий CSS панели навигации и немного изменил его. Результаты ниже:

     #nav {
    ширина: 100%;
    плыть налево;
    поле: 0 0 1em 0;
    заполнение: 0;
    цвет фона: #f2f2f2;
    нижняя граница: 1px сплошная #ccc; }
    #нав ул {
    стиль списка: нет;
    ширина: 800 пикселей;
    поле: 0 авто;
    заполнение: 0; }
    #нав ли {
    плыть налево; }
    #нав ли {
    дисплей: блок;
    отступ: 8px 15px;
    текстовое оформление: нет;
    вес шрифта: полужирный;
    цвет: #069;
    граница справа: 1px сплошная #ccc; }
    #nav li:first-child a {
    граница слева: 1px сплошная #ccc; }
    #nav li a:hover {
    цвет: #c00;
    цвет фона: #fff; } 

    Наш блок #nav растягивается на 100% окна браузера и перемещается влево. Правило «плавающее: левое» может показаться немного странным, потому что мы не хотим, чтобы что-либо оборачивало нашу панель навигации.

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

    Почему это важно? Это то, что позволяет нам установить цвет фона и рамку для нашего элемента #nav, чтобы он по-прежнему отображался. Если бы #nav не был плавающим, он бы рухнул до нулевой высоты, сделав наш фон и границу невидимыми!

    Затем мы задали «#nav ul» фиксированную ширину и использовали трюк с автоматическим отступом, чтобы центрировать его. Ширина здесь имеет решающее значение: вы хотите, чтобы она была такой же ширины, как и центрированная область содержимого.

    Автор записи

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

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