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 у всех ссылок был одинаковым (пустого пространства между ссылками быть не должно, это пространство распределяется на внутренние отступы ссылок)?
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;
}
На картинке видно что справа есть пустое место. Нужно чтобы все пункты меню растянулись по всей ширине меню так, чтобы между ними не было отступов. Как это сделать?
html
css
flexbox
2
Должного эффекта можно добиться с помощью свойства justify-content.
Для начала отмечу, что в данных стилях, которые ранее использовались для центрирования списка вкладок, надобности больше нет:
.main_row {
max-width: 1240px;
margin: 0 auto;
}
В принципе сам блок .main_row можно убрать, но тут уже на ваше усмотрение, может быть он вам нужен.
Теперь к сути. Я бы прибег к следующему варианту:
justify-content: stretch для родителя (ul) и flex-grow: 1 для потомков (li).
Ваш пример с соответствующими изменениями:
.main_nav_wrapp {
background-color: #004a9e;
}
.main_row {
/* это больше не нужно */
/* max-width: 1240px; */
/* margin: 0 auto; */
}
. main_nav {
justify-content: stretch; // и раз
display: flex;
display: -webkit-flex;
outline: 1px solid red;
}
.main_nav li {
display: flex;
display: -webkit-flex;
flex-direction: column;
-webkit-flex-direction: column;
text-align: center;
flex-grow: 1; // и двас
}
.main_nav li a {
display: block;
flex: 1;
-webkit-flex: 1;
padding: 17px 38px;
outline: 1px solid red;
}
flex-grow: 1 необходим для правильной работы stretch и является своего рода множителем определяющим насколько элемент больше своих соседей (попробуйте поставить flex-grow: 10 только первому li, посмотрите, что выйдет).
Также замечу, что отступ слева создаёт ul, у него по дефолту есть padding
UPD: Немного невнимательно прочитал, если вам нужно, чтобы элементы меню растянулись не по всей странице, а только внутри блока .main_row, тогда его стиль убирать не нужно
Подстройте этот пример под свои стили:
ul.full-width {
width: 100%;
/* Ширина основного блока меню */
height: 50px;
/* Высота основного блока меню */
position: relative;
display: table;
margin: 0;
padding: 0;
}
ul.full-width li {
display: table-cell;
position: relative;
}
ul.full-width li a {
display: block;
position: relative;
width: 100%;
height: 100%;
text-align: center;
background: #FFF;
line-height: 50px;
/* Приравниваем к высоте, чтобы выровнять текст по вертикали */
}
ul.full-width li ul {
display: none;
/* Скрываем выпадающее меню */
position: absolute;
width: 100%;
margin: 0px;
padding: 0px;
}
ul. full-width li ul li {
display: block;
}
ul.full-width li:hover ul {
display: block;
/* Показываем выпадающее меню, где оно есть, при наведении */
}
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Панель навигации по центру во всю ширину
Как раз в то время, когда я разрабатывал код для суперпростой панели навигации, о которой я писал некоторое время назад, ко мне обратился друг с интересной проблемой. Ему нужна была горизонтальная панель навигации, подобная той, которую я создавал, со следующими изменениями:
Фон панели навигации должен растягиваться на всю ширину экрана (не только ширину центральной области содержимого), а
Сами элементы навигации должны по-прежнему располагаться по центру области содержимого.
На приведенном ниже эскизе показана основная концепция дизайна.
Мой друг где-то нашел код, который делал то, что он хотел, но для магии центрирования требовалось два элемента 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 идентична нашей простой горизонтальной панели навигации и в основном предназначена для представления. Вы можете настроить цвета, отступы, наведения и все остальное, чтобы сделать панель навигации своей собственной.
Вы можете увидеть этот код в действии здесь. Надеюсь, другие найдут это решение таким же полезным, как и мой друг!
Нужна полноразмерная горизонтальная панель навигации — HTML и CSS — Форумы SitePoint
makamo661
1
У меня есть следующий код для создания горизонтальной панели навигации, однако она не заполняет всю ширину браузера, как мне хотелось бы. Что не так с моим кодом? Теги привязки отсутствуют, потому что html создается динамически с помощью javascript и имеет событие щелчка для перехода к разделам. Это для задания, так что это должно быть сделано таким образом.
Это для задания, так что это должно быть сделано именно так.
Код, который вы разместили, является заданием?
Если вы не хотите общего обсуждения возможных способов распределения панели навигации по горизонтали: — Пожалуйста, сообщите, что вам разрешено изменять, например. опубликованный вами CSS. — Пожалуйста, также приведите пример того, что может заполнить список навигации.
4 лайков
SamA74
9
макамо661:
поплавок:левый;
Использование плавающих элементов — довольно «старый» способ позиционирования пунктов меню. Это потребует от вас их размера пропорционально общей ширине. Было бы проще использовать что-то вроде display table или flex, так как они могут распределять пространство равномерно для каждого элемента или делить доступное пространство пропорционально размеру каждого элемента, не прибегая к самостоятельной работе.
4 лайка
makamo661
10
Я изменил ширину элементов списка с 31% до 32%, и теперь это полная ширина.
4 лайка
PaulOB
11
Возможно, у вас есть 3 предмета, которые вы хотите сделать равными на 100%?
Вы нигде не упоминаете об этом, так что трудно угадать ваш вариант использования.
Если вы действительно хотите, чтобы три пункта меню в сумме составляли точно 100%, тогда ваш метод немного выдуманный. 3 х 32% не равно 100%.
33,3333% x 3 ближе, но тогда вам нужно будет использовать модель рамки для учета отступов и границ.
Как уже говорили выше, это не совсем то, как это делается в наши дни.
Вы должны использовать flexbox вместо float, так как он будет делать то, что вы хотите, более надежно. Предполагая, что я понял требования
5 лайков
makamo661
12
Да, у меня есть 3 вкладки, которые я хочу сделать на всю ширину. Я не знаю, что такое модель бордюрной коробки. Я попробовал размер коробки: border-box; но это не изменило дизайн. Как мне реализовать flex box?
2 лайка
24 февраля 2021 г., 14:36
13
Это может помочь вам понять, как работают гибкие блоки
CSS-Tricks — 8 апреля 13
Полное руководство по Flexbox | CSS-трюки
Наше подробное руководство по макету CSS flexbox. Это полное руководство объясняет все о flexbox, уделяя особое внимание всевозможным свойствам родительского элемента (flex-контейнера) и дочерних элементов (flex-элементов). Это также…
Я часто хожу на этот сайт, а также на w3schools
А вот и кое-что по бордюру модели коробки
https://css-tricks. com/box-sizing/ . Надеюсь это поможет.
1 Нравится
ПолОБ
14
макамо661:
Как реализовать flex box?
Вот так:
33% не обязательно должны быть такими точными, если они составляют менее трети пробела. Flex автоматически заполнит любые пробелы. Это может быть flex:1 0 0% и все равно выглядеть почти так же, если только у вас нет пунктов меню с большим количеством текста, и тогда они будут шире и т. д. Однако они всегда будут соответствовать.
1 Нравится
makamo661
15
Спасибо, ladans37 и PaulOB и спасибо всем остальным, кого я не назвал.