Сделать ширину всех элементов равной на основе самого широкого

#html #css #width

#HTML #css #ширина

Вопрос:

Такого поведения можно добиться с помощью таблиц, например, с помощью этого кода:

 <style>
table {
    table-layout:fixed;
    width:100%;
}
td {border:1px solid red;}
</style>
<table>
<tr>
    <td>Hello</td>
    <td>WWWWWWWWWWWWWWWWWWWWWW</td>
</tr>
</table>
  

Вывод этого будет таким, как я хочу:

 |Hello               |WWWWWWWWWWWWWWWWWWWWWW|
  

Но это решение не переносит элементы внутри (в данном случае tds) на новую строку, если она не соответствует ширине экрана!
Итак, я хотел бы сделать это, используя divs и css. Если я использую:

 <style>
#eq > div {
    width: 400px;
    float: left;
}
</style>
<div id="eq">
    <div>Hello</div>
    <div>WWWWWWWWWWWWWWWWWWWWWW</div>
</div>
  

Уверен, что это работает и выдает одинаковый результат, но, конечно, текст и количество элементов внутри #eq являются переменными! Так, если текст «WWWWWWWWWWWWWWWWWWWWWW» будет изменено на «лол», элементы будут несуразно широкий. С другой стороны, если я изменю его на более длинный текст, чем определенная ширина, ширина всех других меньших элементов будет меньше.
Итак, последний вопрос:
Как я могу сделать ширину всех элементов такой же широкой, как самый широкий элемент, с возможностью переноса с использованием чистого html и css и без указания ширины вручную?

Комментарии:

1. Я был бы удивлен, если для этого существует решение только для css, я почти уверен, что вам понадобится JavaScript или аналогичный для выполнения вычислений, этого очень просто достичь с помощью jquery.

2. Да, я думаю так же, но это просто показывает, насколько css все еще плох в некоторых вещах по сравнению с архаичными решениями, такими как таблицы. Какой позор. Javascript для обычного дизайна — зло.

3. JavaScript в дизайне очень распространен, современные браузеры ориентированы на производительность JavaScript, а библиотеки JavaScript, такие как Jquery, очень упрощают написание эффективного JavaScript. Любой, у кого в браузере отключен JavaScript, будет в меньшинстве. Большинство современных веб-сайтов полагаются на JavaScript и требуют его для правильной работы.

4. Javascript загружается после загрузки всего DOM, что приводит к искажению страницы при загрузке и увеличивает время, необходимое для ожидания, пока страница будет готова для пользователя. Вот почему это зло.

5. Можно загрузить JavaScript до завершения загрузки dom

Ответ №1:

Таблицы будут более простым вариантом. Вы пробовали принудительно переносить ячейки таблицы?

 td {
  word-wrap: break-word;
}
  

Я не думаю, что существует чистое CSS / HTML-решение для вашей DIV идеи.

Комментарии:

1. Word-wrap переносит только текст внутри элемента, а не весь элемент. В особых случаях со многими элементами в конечном итоге в этих элементах будут только однобуквенные строки текста.

Ответ №2:

Конечно, немного опоздал на вечеринку, но я опубликовал JSFiddle решения, которое очень хорошо работало для меня, с Javascript или без него:

http://jsfiddle.net/jpgringo/LTEsZ/7/

HTML:

foobar

Вампетер, Фома, Гранфаллоны

«О устрицы, приходите и гуляйте с нами!»
Морж действительно умолял.
«Приятная прогулка, приятная беседа
по соленому пляжу:
Мы не можем обойтись более чем четырьмя,
Чтобы помочь каждому.»

=========================================

CSS:

 body {
    font-family:Verdana, Arial, sans-serif;
    font-size:10px;
}

#myContentSection {
    display:table;
    width:100%;
}

#myContentSection .content {
    display:table-row;
}

#myContentSection .subsection {
    display:table-cell;
    border:solid 1px gray;
    /* the next line is optional, but gives equal-width columns if you know the 
    number of columns ahead of time */
    width:33%;
    padding:4px 8px;
}
  

========================================

(необязательно) JS:

 var sectionID = 'myContentSection';
var subsectionClass = 'subsection';

var contentSection = document.getElementById(sectionID);
var colCount = contentSection.getElementsByClassName('subsection').length;
console.log('# of columns:', colCount);
var width = Math.floor(100/colCount);
console.log('column width: ', width,'%');
var css = '#'   sectionID   ' .'   subsectionClass   ' { width: '   width   '%; }';
var style = document.createElement('style');

style.type = 'text/css';
if (style.styleSheet){
  style.styleSheet.cssText = css;
} else {
  style.appendChild(document.createTextNode(css));
}

document.head.appendChild(style);
  

Комментарии:

1. Это не переносит элементы, только текст, и такого же поведения можно добиться гораздо проще, используя таблицы, как я показал в своем посте. Я хочу именно такого поведения, но с автоматическим переносом ячеек в новые строки.