У меня есть структура страницы как:
<div class="parent">
<div class="child-left floatLeft">
</div>
<div class="child-right floatLeft">
</div>
</div>
Теперь в child-left
DIV будет больше контента, поэтому parent
высота DIV увеличивается в соответствии с дочерним DIV.
Но проблема в том, что child-right
высота не увеличивается. Как я могу сделать его высоту равной его родителю?
Ответы:
Для
parent
элемента добавьте следующие свойства:тогда для
.child-right
этих:Более подробные результаты с примерами CSS здесь и больше информации о равных столбцах высоты здесь .
источник
Обычное решение этой проблемы использует абсолютное позиционирование или обрезанные числа с плавающей запятой, но они хитры в том, что они требуют обширной настройки, если ваши столбцы меняются по числу + размеру, и что вам нужно убедиться, что ваш «основной» столбец всегда самый длинный. Вместо этого я бы предложил вам использовать одно из трех более надежных решений:
display: flex
: безусловно, самое простое и лучшее решение и очень гибкое, но не поддерживается IE9 и старше.table
илиdisplay: table
: очень простой, очень совместимый (почти во всех браузерах), довольно гибкий.display: inline-block; width:50%
с взломом отрицательного поля: довольно просто, но границы столбца-дна немного хитры.1.
display:flex
Это действительно просто, и его легко адаптировать к более сложным или более подробным макетам - но flexbox поддерживается только в IE10 или более поздней версии (в дополнение к другим современным браузерам).
Пример: http://output.jsbin.com/hetunujuma/1
Соответствующий HTML:
Соответствующее CSS:
Flexbox поддерживает гораздо больше опций, но для простого количества столбцов достаточно вышеприведенного!
2.
<table>
илиdisplay: table
Простой и чрезвычайно совместимый способ сделать это - использовать
table
- я бы рекомендовал вам сначала попробовать, если вам нужна поддержка старого IE . Вы имеете дело со столбцами; divs + float просто не лучший способ сделать это (не говоря уже о том, что множественные уровни вложенных div для простоты взлома ограничений css едва ли более «семантические», чем просто использование простой таблицы). Если вы не хотите использоватьtable
элемент, рассмотрите cssdisplay: table
(не поддерживается IE7 и более ранними версиями).Пример: http://jsfiddle.net/emn13/7FFp3/
Соответствующий HTML: (но
<table>
вместо этогорассмотрите возможность использования простого)Соответствующее CSS:
Этот подход гораздо надежнее, чем использование
overflow:hidden
с плавающей точкой. Вы можете добавить практически любое количество столбцов; Вы можете иметь их автоматическое масштабирование, если хотите; и вы сохраняете совместимость с древними браузерами. В отличие от плавающего решения, вам также не нужно заранее знать, какой столбец самый длинный; высота весы просто отлично.ПОЦЕЛУЙ: не используйте хаки с плавающей точкой, если вам это не нужно. Если бы IE7 представлял собой проблему, я бы все равно выбрал простую таблицу с семантическими столбцами вместо трудно поддерживаемого, менее гибкого решения CSS-трюка в любой день.
Кстати, если вам нужно, чтобы ваш макет был отзывчивым (например, нет колонок на небольших мобильных телефонах), вы можете использовать
@media
запрос, чтобы вернуться к простому блочному макету для небольшой ширины экрана - это работает, используете ли вы<table>
или любой другойdisplay: table
элемент.3.
display:inline block
с отрицательной маркой взломать.Другой альтернативой является использование
display:inline block
.Пример: http://jsbin.com/ovuqes/2/edit
Соответствующий HTML: (отсутствие пробелов между
div
тегами является значительным!)Соответствующее CSS:
Это немного сложно, а отрицательное поле означает, что «истинное» дно столбцов скрыто. Это, в свою очередь, означает, что вы не можете расположить что-либо относительно нижней части этих столбцов, потому что это отрезано
overflow: hidden
. Обратите внимание, что в дополнение к встроенным блокам вы можете добиться аналогичного эффекта с помощью float.TL; DR : используйте flexbox, если вы можете игнорировать IE9 и старше; в противном случае попробуйте таблицу (css). Если ни один из этих вариантов не работает для вас, существуют негативные взломы маржи, но они могут вызвать странные проблемы с отображением, которые легко пропустить во время разработки, и существуют ограничения макета, о которых вам необходимо знать.
источник
border-spacing:10px;
на элементе таблицы введем интервал в виде полей. Кроме того, вы можете добавить дополнительные (пустые) столбцы, где вы хотите дополнительное пространство. И вы также можете добавить заполнение внутри ячеек таблицы; этот отступ будет включен в фоновый режим, так что это может быть не то, что вы хотите. Но вы правы, что это не так гибко, как нормальный запас. И вы ничего не можете расположить относительно столбцов, что может быть проблемой.Для родителя:
Для детей:
Вы должны добавить некоторые префиксы, проверьте caniuse.
источник
Я нашел много ответов, но, вероятно, лучшее решение для меня
Вы можете проверить другие решения здесь http://css-tricks.com/fluid-width-equal-height-columns/
источник
Пожалуйста, установите родительский div, чтобы
overflow: hidden
затем в дочерних divах вы могли установить большое значение для padding-bottom. например,
padding-bottom: 5000px
тогда
margin-bottom: -5000px
и тогда все дочерние элементы будут высотой родительского элемента.
Конечно, это не сработает, если вы пытаетесь поместить содержимое в родительский div (кроме других div).
Пример: http://jsfiddle.net/Tareqdhk/DAFEC/
источник
Родитель имеет рост? Если вы установите родительский рост так.
Затем вы можете сделать так, чтобы ребенок растянулся на полную высоту.
РЕДАКТИРОВАТЬ
Вот как вы могли бы сделать это с помощью JavaScript.
источник
Отображение таблицы CSS идеально подходит для этого:
Исходный ответ (предполагается, что любой столбец может быть выше):
Вы пытаетесь сделать рост родителей зависимым от роста детей, а рост детей - от роста родителей. Не будет вычислять CSS Faux колонки - лучшее решение. Есть несколько способов сделать это. Я бы предпочел не использовать JavaScript.источник
display: table
+display: table-cell
макет даст желаемый результат.float
: stackoverflow.com/questions/20110217/…Я недавно сделал это на своем сайте с помощью jQuery. Код вычисляет высоту самого высокого div и устанавливает остальные div на ту же высоту. Вот техника:
http://www.broken-links.com/2009/01/20/very-quick-equal-height-columns-in-jquery/
Я не верю, что
height:100%
это сработает, поэтому, если вы явно не знаете высоты div, я не думаю, что есть чистое решение CSS.источник
Я использовал это для раздела комментариев:
Вы можете перемещать ребенка вправо вправо, но в этом случае я точно рассчитал ширину каждого деления.
источник
Если вы знаете о начальной загрузке, вы можете легко это сделать, используя свойство 'flex'. Все, что вам нужно сделать, это передать свойства css ниже родительскому div.
где
.homepageSection
мой родительский див Теперь добавьте child div в ваш html какгде abc - мой дочерний элемент div. Вы можете проверить равенство роста в обоих дочерних элементах div независимо от границы, просто задав границу для дочернего элемента div.
источник
Я использовал встроенный стиль, чтобы дать идею.
источник
Я узнал об этом изящном приеме на собеседовании. Первоначальный вопрос заключается в том, как обеспечить, чтобы высота каждого верхнего компонента в трех столбцах имела одинаковую высоту, которая показывает весь доступный контент. По сути, создайте дочерний компонент, который невидим и отображает максимально возможную высоту.
источник