#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. Это не переносит элементы, только текст, и такого же поведения можно добиться гораздо проще, используя таблицы, как я показал в своем посте. Я хочу именно такого поведения, но с автоматическим переносом ячеек в новые строки.