У меня есть небольшая специфическая проблема, которую я сейчас решаю с помощью a table
, см. Ниже. По сути, я хочу, чтобы два блока занимали 100% доступной ширины, но занимали ровно столько места по вертикали, сколько необходимо (что на самом деле не так очевидно на картинке). Эти двое должны всегда иметь одинаковую высоту с небольшой линией между ними, как показано.
(источник: pici.se )
Все это очень легко сделать table
, и я этим занимаюсь сейчас. Однако я не слишком заинтересован в решении, поскольку семантически это не таблица.
html
css
html-table
Дениз Доган
источник
источник
Ответы:
Вы можете получить столбцы с одинаковой высотой в CSS, применив нижнее заполнение большого размера, нижнее отрицательное поле такого же размера и окружив столбцы блоком div со скрытым переполнением. Вертикальное центрирование текста немного сложнее, но это должно вам помочь.
Я думаю стоит упомянуть что
предыдущий ответ streetpc имеет недопустимый html, тип документа - XHTML, а атрибуты заключены в одинарные кавычки. Также стоит отметить, чтовам не нужен дополнительный элемент сclear
on, чтобы очистить внутренние поплавки контейнера. Если вы используете скрытое переполнение, это очищает поплавки во всех браузерах, отличных от IE, а затем просто добавляя что-то, чтобы дать hasLayout, например width или zoom: 1, IE очистит свои внутренние поплавки.Я тестировал это во всех современных браузерах FF3 + Opera9 + Chrome Safari 3+ и IE6 / 7/8. Это может показаться уродливым трюком, но он работает хорошо, и я часто использую его в продакшене.
Надеюсь, это поможет.
источник
Сейчас 2012 + n, поэтому, если вам больше не нужен IE6 / 7
display:table
,display:table-row
и выdisplay:table-cell
работаете во всех современных браузерах:http://www.456bereastreet.com/archive/200405/equal_height_boxes_with_css/
Обновление 2016-06-17: Если вы думаете, что время пришло
display:flex
, попробуйте Flexbox Froggy .источник
display: flex
?Для этого вам следует использовать flexbox. Он не поддерживается в IE8 и IE9 и только с префиксом -ms в IE10, но все другие браузеры его поддерживают. Для префиксов поставщиков вы также должны использовать autoprefixer .
источник
вы можете заставить это работать с js:
источник
Это классическая проблема CSS. На самом деле решения для этого нет.
Эта статья из A List Apart - хорошее чтение по этой проблеме. Он использует технику, называемую «искусственные столбцы», основанную на наличии одного вертикально мозаичного фонового изображения на элементе, содержащем столбцы, что создает иллюзию столбцов одинаковой длины. Поскольку он находится на обертке плавающих элементов, его длина равна самому длинному элементу.
У редакторов A List Apart есть это примечание к статье:
Для этой техники требуются полностью статические дизайны ширины, которые не подходят для жидких макетов и техник адаптивного дизайна, которые сегодня популярны для сайтов с несколькими устройствами. Однако для сайтов со статической шириной это надежный вариант.
источник
У меня была аналогичная проблема, и, на мой взгляд, лучший вариант - использовать немного javascript или jquery.
Вы можете добиться одинаковой высоты желаемых div, получив максимальное значение div и применив это значение ко всем остальным div. Если у вас много div и много решений, я предлагаю написать небольшой продвинутый js-код, чтобы узнать, какой из всех div самый высокий, а затем использовать его значение.
С jquery и 2 div это очень просто, вот пример кода:
$('.smaller-div').css('height',$('.higher-div').css('height'));
И напоследок еще одно. Их набивка (верх и низ) должны быть одинаковыми! Если у одного есть большее заполнение, вам необходимо устранить разницу в заполнении.
источник
Насколько мне известно, вы не можете сделать это, используя текущие реализации CSS. Чтобы сделать два столбца одинаковой высоты, вам понадобится JS.
источник
У меня это работает в IE 7, FF 3.5, Chrome 3b, Safari 4 (Windows).
Также работает в IE 6, если вы раскомментируете более четкий div внизу. Edit : как сказал Натали Даун, вы можете просто добавить
width: 100%;
к#container
вместо.Я не знаю способа CSS для вертикального центрирования текста в правом div, если div не имеет фиксированной высоты. Если это так, вы можете установить то
line-height
же значение, что и высота div, и поместить внутренний div, содержащий ваш текст, сdisplay: inline; line-height: 110%
.источник
Используя Javascript, вы можете сделать два тега div одинаковой высоты. Высота меньшего div будет равна высоте самого высокого тега div, используя код, показанный ниже:
Где «left» и «right» являются идентификаторами тегов div.
источник
Используя свойство css -> display: table-cell
источник
Используя JS, используйте
data-same-height="group_name"
во всех элементах одинаковую высоту .Пример: https://jsfiddle.net/eoom2b82/
Код:
источник
Мне нужно было сделать что-то подобное, вот моя реализация. Напомним, цель состоит в том, чтобы два элемента занимали ширину данного родительского контейнера, а высота была настолько высокой, насколько это необходимо. По сути, высота равна максимальной высоте самого большого количества содержимого, но другой контейнер находится на одном уровне.
html
css
источник
Несколько лет назад
float
свойство использовалось для решения этой проблемы с использованиемtable
подходаdisplay: table;
иdisplay: table-row;
иdisplay: table-cell;
.Но теперь со свойством flex вы можете решить эту проблему с помощью трех строк кода:
display: flex;
иflex-wrap: wrap;
иflex: 1 0 50%;
1 0 50%
являютсяflex
значениями, которые мы присвоили:flex-grow flex-shrink flex-basis
соответственно. Это относительно новый ярлык в flexbox, позволяющий не вводить их по отдельности. Я надеюсь, что это поможет кому-то тамисточник