Горизонтальное меню для сайта на всю ширину: Меню на всю ширину блока с равным отступом · Блог веб-студии Keengo

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

Вопрос задан

Изменён 2 года назад

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

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

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

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

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

Почта

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

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

Почта

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

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

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

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

header {
    display: flex;
    align-items: center;justify-content: space-around;
    height: 60px;
    background: #eee;
}
.main {    height: 100vh;
    width: 70%;
    background: #f7c244;
    margin: 0 auto;}
<header>
  <a href="/">LOGO</a>
  <a href="#">Ссылка</a>
 <a href="#">Ссылка</a>
  <a href="#">Ссылка</a>
    <a href="#">Ссылка</a>
  <a href="#">Ссылка</a>
  <a href="#">Войти</a>
  <a href="#">Регистрация</a>
</header>
<div></div>
  • html
  • css

1

Нужна дополнительная обертка в header

header {   
    background: #eee;
}
.menu {
    width: 70%;
    height: 60px;
    margin: 0 auto;
    display: flex;
    align-items: center;
    justify-content: space-around;
}
. main {    
    height: 100vh;
    width: 70%;
    background: #f7c244;
    margin: 0 auto;
}
<header>
    <ul>
        <li><a href="/">LOGO</a></li>
        <li><a href="#">Ссылка</a></li>
        <li><a href="#">Ссылка</a></li>
        <li><a href="#">Ссылка</a></li>
        <li><a href="#">Ссылка</a></li>
        <li><a href="#">Ссылка</a></li>
        <li><a href="#">Войти</a></li>     
        <li><a href="#">Регистрация</a></li>      
    </ul>
</header>
<div></div>

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

.container {
  width: 1400px;
  margin: 0 auto;
  max-width: 100%;
}
header {
  background: #eee;
}
.menu {
  height: 60px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-around;
}
. main {
  height: 100vh;
  background: #f7c244;
  margin: 0 auto;
}
  <header>
<div>
    <ul>
      <li><a href="/">LOGO</a></li>
      <li><a href="#">Ссылка</a></li>
      <li><a href="#">Ссылка</a></li>
      <li><a href="#">Ссылка</a></li>
      <li><a href="#">Ссылка</a></li>
      <li><a href="#">Ссылка</a></li>
      <li><a href="#">Войти</a></li>
      <li><a href="#">Регистрация</a></li>
    </ul>
 </div>
  </header>
   
<div>
  <div></div>
</div>

1

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

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

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

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

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

Почта

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

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

Почта

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

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

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

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

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

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

Мой друг где-то нашел код, который делал то, что он хотел, но для магии центрирования требовалось два элемента 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» фиксированную ширину и использовали трюк с автоматическим отступом, чтобы центрировать его. Ширина здесь имеет решающее значение: вы хотите, чтобы она была такой же ширины, как и центрированная область содержимого. В данном примере это 800 пикселей.

    Здесь я использую один псевдокласс для получения интересного эффекта. Псевдокласс «:first-child» применяется к любому элементу, который является первым дочерним элементом своего родителя. В нашем случае это правило находит первую «ли» в нашем родительском «ул». Затем мы применяем границу к левой стороне тега привязки внутри. Без него у нашего первого элемента не было бы границы слева, как у других. Хотя технически мы могли бы сделать это с классом или идентификатором для первого элемента, я думаю, что это решение немного более элегантно.

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

    Вы можете увидеть этот код в действии здесь. Надеюсь, другие найдут это решение таким же полезным, как и мой друг!

    css — Полноэкранное меню навигации на всех экранах

    Задавать вопрос

    спросил

    Изменено 6 лет, 6 месяцев назад

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

    Привет.

    Я создаю адаптивное меню с помощью HTML5 и CSS. Для этого я создаю меню навигации для настольных компьютеров, а затем использую флажок с уровнем, чтобы показать адаптивное меню (я имею в виду, показать меню).

    Это код:

    Код Примечание: (изображение имеет размеры 350 пикселей в ширину и 100 пикселей в высоту):

     body {
      поле: 0px;
    }
    /*Удалить ul из отступов и стилей списка*/
    
    ул {
      тип стиля списка: нет;
      маржа: 0;
      заполнение: 0;
      положение: абсолютное;
    }
    /*Hacer que la imagen no se mueva */
    
    # img-nav {
      padding-top: 0px !важно;
    }
    /*Создаем горизонтальный список*/
    
    ли {
      отображение: встроенный блок;
      плыть налево;
    }
    /*Стиль для ссылок меню*/
    
    ли а {
      дисплей: блок;
      минимальная ширина: 200 пикселей;
      высота: 70 пикселей;
      выравнивание текста: по центру;
      высота строки: 50px;
      семейство шрифтов: "Helvetica Neue", Helvetica, Arial, без засечек;
      цвет: #fff;
      фон: #2f3036;
      текстовое оформление: нет;
      отступ сверху: 30px;
    }
    /*Состояние наведения для ссылок верхнего уровня*/
    
    ли: наведите курсор на {
      фон: #19с589;
    }
    /*Стиль выпадающих ссылок*/
    
    li: наведите указатель мыши на {
      фон: #f3f3f3;
      цвет: #2f3036;
      высота: 40 пикселей;
      высота строки: 40px;
    }
    /*Состояние наведения для выпадающих ссылок*/
    
    li: hover ul a: hover {
      фон: #19c589;
      цвет: #fff;
    }
    /*Скрыть выпадающие ссылки, пока они не понадобятся*/
    
    ли ул {
      дисплей: нет;
    }
    /*Сделать выпадающие ссылки вертикальными*/
    
    ли уль ли {
      дисплей: блок;
      поплавок: нет;
    }
    /*Предотвратить перенос текста*/
    
    ли уль ли а {
      ширина: авто;
      минимальная ширина: 100 пикселей;
      отступ: 0 20 пикселей;
    }
    /*Отображение раскрывающегося списка при наведении*/
    
    ul li a: hover + . hidden,
    .скрытый: наведите {
      дисплей: блок;
    }
    /*Стиль кнопки метки «показать меню» и скрыть ее по умолчанию*/
    
    .show-меню {
      семейство шрифтов: "Helvetica Neue", Helvetica, Arial, без засечек;
      текстовое оформление: нет;
      цвет: #fff;
      фон: #19с589;
      выравнивание текста: по центру;
      отступ: 10px 0;
      дисплей: нет;
    }
    /*Скрыть флажок*/
    
    ввод [тип = флажок] {
      дисплей: нет;
    }
    /*Показывать меню, когда установлен флажок невидимости*/
    
    input[type=checkbox]:checked ~ #menu {
      дисплей: блок;
    }
    /*Адаптивные стили*/
    
    Экран @media и (максимальная ширина: 760 пикселей) {
      /*Сделать выпадающие ссылки встроенными*/
      ул {
        положение: статичное;
        дисплей: нет;
      }
      /*Создаем интервал по вертикали*/
      ли {
        нижняя граница: 1px;
      }
      /*Сделать все ссылки меню на полную ширину*/
      ул ли,
      ли а {
        ширина: 100%;
      }
      /*Показать ссылку "показать меню"*/
      .show-меню {
        дисплей: блок;
      }
      # img-nav {
        дисплей: нет;
      }
    } 
     
    
    
    <голова>
      <мета-кодировка="UTF-8">
      Меню навигации только CSS
      
       css">
    
    
    <тело>
      <навигация>
        
        <тип ввода = "флажок" роль = "кнопка">
        <ул>
          
  • <а href="#">
  • Иницио
  • Виртуальная Аула <ул>
  • Тестировать онлайн
  • Тест DGT
  • Теорический результат
  • Новые транспортные средства
  • Разрешения
  • Проблема:

    Я хочу иметь полноэкранное меню (на ПК) но я не знаю как это сделать.

    Всем спасибо!

    • css
    • html

    Упс! Я испортил. Окружите ul в div в HTML. Установите z-индекс div на значение выше 0, положение на фиксированное и ширину на 100%.

    2

    Удалите фон из тега a и поместите его в тег ul, затем добавьте к нему css width:100%. Этот отлично работает на мне.

     тело {
      поле: 0px;
    }
    /*Удалить ul из отступов и стилей списка*/
    
    ул {
      тип стиля списка: нет;
      маржа: 0;
      заполнение: 0;
      положение: абсолютное;
      ширина:100%;
      фон: #2f3036;
    }
    /*Hacer que la imagen no se mueva */
    
    # img-nav {
      padding-top: 0px !важно;
    }
    /*Создаем горизонтальный список*/
    
    ли {
      отображение: встроенный блок;
      плыть налево;
    }
    /*Стиль для ссылок меню*/
    
    ли а {
      дисплей: блок;
      минимальная ширина: 200 пикселей;
      высота: 70 пикселей;
      выравнивание текста: по центру;
      высота строки: 50px;
      семейство шрифтов: "Helvetica Neue", Helvetica, Arial, без засечек;
      цвет: #fff;
      
      текстовое оформление: нет;
      отступ сверху: 30px;
    }
    /*Состояние наведения для ссылок верхнего уровня*/
    
    ли: наведите курсор на {
      фон: #19с589;
    }
    /*Стиль выпадающих ссылок*/
    
    li: наведите указатель мыши на {
      фон: #f3f3f3;
      цвет: #2f3036;
      высота: 40 пикселей;
      высота строки: 40px;
    }
    /*Состояние наведения для выпадающих ссылок*/
    
    li: hover ul a: hover {
      фон: #19c589;
      цвет: #fff;
    }
    /*Скрыть выпадающие ссылки, пока они не понадобятся*/
    
    ли ул {
      дисплей: нет;
    }
    /*Сделать выпадающие ссылки вертикальными*/
    
    ли уль ли {
      дисплей: блок;
      поплавок: нет;
    }
    /*Предотвратить перенос текста*/
    
    ли уль ли а {
      ширина: авто;
      минимальная ширина: 100 пикселей;
      отступ: 0 20 пикселей;
    }
    /*Отображение раскрывающегося списка при наведении*/
    
    ul li a: hover + . hidden,
    .скрытый: наведите {
      дисплей: блок;
    }
    /*Стиль кнопки метки «показать меню» и скрыть ее по умолчанию*/
    
    .show-меню {
      семейство шрифтов: "Helvetica Neue", Helvetica, Arial, без засечек;
      текстовое оформление: нет;
      цвет: #fff;
      фон: #19с589;
      выравнивание текста: по центру;
      отступ: 10px 0;
      дисплей: нет;
    }
    /*Скрыть флажок*/
    
    ввод [тип = флажок] {
      дисплей: нет;
    }
    /*Показывать меню, когда установлен флажок невидимости*/
    
    input[type=checkbox]:checked ~ #menu {
      дисплей: блок;
    }
    /*Адаптивные стили*/
    
    Экран @media и (максимальная ширина: 760 пикселей) {
      /*Сделать выпадающие ссылки встроенными*/
      ул {
        положение: статичное;
        дисплей: нет;
     фон: #2f3036;
      }
      /*Создаем интервал по вертикали*/
      ли {
        нижняя граница: 1px;
      }
      /*Сделать все ссылки меню на полную ширину*/
      ул ли,
      ли а {
        ширина: 100%;
        фон: #2f3036;
      }
      /*Показать ссылку "показать меню"*/
      .show-меню {
        дисплей: блок;
      }
      # img-nav {
        дисплей: нет;
      }
    } 
     
    
    
    <голова>
      <мета-кодировка="UTF-8">
      Меню навигации только CSS