Дочерние пролеты одинаковой ширины

Я пытаюсь создать горизонтальное меню с элементами, представленными <span>. Само меню (родительский <div>) имеет фиксированную ширину, но количество элементов всегда разное.

Я хотел бы иметь дочерние <span> одинаковой ширины, независимо от того, сколько их там.

Что я сделал до сих пор: добавил стиль float: left; для каждого диапазона и указал его процентную ширину (проценты более или менее хороши, поскольку сервер знает во время генерации страницы, сколько пунктов меню есть и может делить 100 % к этому числу). Это работает, за исключением случая, когда у нас есть остаток от деления (например, для 3 элементов), в этом случае у меня есть отверстие в один пиксель справа от родительского <div>, и если я округляю проценты в большую сторону, последний элемент меню завернут. Еще мне не очень нравится генерация стилей на лету, но если другого решения нет, все в порядке.

Что еще я мог попробовать?

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

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
0
339
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Если у вас есть контейнер фиксированной ширины, вы теряете часть эффективности дочернего диапазона ширины в процентах.

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

<div>
<span class = "first-in-row">/<span><span></span><span></span><span class = "first-in-row"><span></span><span></span>...
</div>

куда

.first-in-row { width:auto; /* or */ width:XXX px; }
Ответ принят как подходящий

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

table.ClassName {
    table-layout: fixed
}

Было плохо, когда люди использовали table для всего (потому что CSS еще не существовало). Иногда бывает наоборот. Кто-то опишет функциональность таблицы и спросит, как это сделать без таблицы, как если бы таблицы изначально плохие. Вздох.

buti-oxa 06.09.2008 19:11

Вы пробовали десятичные значения, например, устанавливали ширину 33,33%?

Как указано в синтаксисе CSS, свойство ширины (http://www.w3.org/TR/CSS21/visudet.html#the-width-property) может быть задано как <процент> (http://www.w3.org/TR/CSS21/syndata.html#value-def-percentage), которое указано как <число>.

Как сказано в определении числа (http://www.w3.org/TR/CSS21/syndata.html#value-def-number), есть некоторые типы значений, которые должны быть целыми числами и указаны как <integer>, а другие являются действительными числами, обозначенными как <number>. Процент определяется как <число>, а не как <целое число>, поэтому он может работать.

Это будет зависеть от способности браузера решить эту ситуацию, если он не может разделить родительский блок на 3 без остатка, будет ли он рисовать 1- или 2-пиксельное пространство или делать 1 или 2 промежутка из трех шире, чем остальные .

Что касается ответа Сиань, есть также псевдоэлемент: first-child. Вместо того, чтобы иметь класс первого в ряду, у вас будет это.

span:first-child {
    width: auto;
}

Очевидно, это применимо только к однострочному меню.

Другие вопросы по теме