Я использую Bootstrap. Как я могу сделать три колонки одинаковой высоты?
Вот скриншот проблемы. Я хотел бы, чтобы синие и красные столбцы были такой же высоты, как и желтый столбец.
Вот код:
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container-fluid">
<div class="row">
<div class="col-xs-4 panel" style="background-color: red">
some content
</div>
<div class="col-xs-4 panel" style="background-color: yellow">
catz
<img width="100" height="100" src="https://lorempixel.com/100/100/cats/">
</div>
<div class="col-xs-4 panel" style="background-color: blue">
some more content
</div>
</div>
</div>
css
twitter-bootstrap
Ричард
источник
источник
.row
отсутствуетflex-wrap: wrap;
. Вот пример того, как он работает с отзывчивостью: codepen.io/bootstrapped/details/RrabNeОтветы:
Решение 4 с использованием Bootstrap 4
Bootstrap 4 использует Flexbox, поэтому нет необходимости в дополнительном CSS.
демонстрация
Решение 1 с использованием отрицательных полей (не нарушает отзывчивость)
демонстрация
Решение 2 с использованием таблицы
демонстрация
Решение 3 с использованием flex добавлено в августе 2015 года. Комментарии, опубликованные ранее, не относятся к этому решению.
демонстрация
источник
flex-wrap: wrap;
в третий пример, чтобы включить отзывчивость. Вы также захотите добавить display: flex; flex-direction: столбец; к классу столбцов. Если вы собираетесь использовать .row, а не пользовательский класс, вам нужно будет предоставить запасной вариант для более старых браузеров, изменив дисплей обратно. Вот примерОбновление 2020
Лучший подход для Bootstap 3.x - использование CSS flexbox (и требует минимального CSS).
Пример начальной загрузки Flexbox
Чтобы применить Flexbox одинаковой высоты только к определенным точкам останова (отзывчивым), используйте медиазапрос. Например, вот
sm
(768px) и выше:Это решение также хорошо работает для нескольких строк (перенос столбцов):
https://www.bootply.com/gCEXzPMehZ
Другие обходные пути
Эти варианты будут рекомендованы другими, но не являются хорошей идеей для адаптивного дизайна. Они работают только для простых однострочных макетов без переноса столбцов.
1) Использование огромных отрицательных полей и отступов
2) Использование display: table-cell (это решение также влияет на адаптивную сетку, поэтому запрос @media можно использовать, чтобы применить
table
отображение только на более широких экранах до вертикального размещения столбцов)Bootstrap 4
Flexbox теперь используется по умолчанию в Bootstrap 4, поэтому нет необходимости в дополнительном CSS для создания столбцов одинаковой высоты: http://www.codeply.com/go/IJYRI4LPwU
Пример:
источник
JavaScript не требуется. Просто добавьте класс
.row-eq-height
к вашему существующему.row
так:Совет: если в строке более 12 столбцов, сетка начальной загрузки не сможет ее обернуть. Так что добавляйте новые
div.row.row-eq-height
каждые 12 столбцов.Совет: вам может понадобиться добавить
на ваш HTML
источник
Чтобы ответить на ваш вопрос, это все, что вам нужно, чтобы увидеть полную отзывчивую демонстрацию с префиксом css :
Чтобы добавить поддержку для содержимого эскиза flex в столбцах flex, как на скриншоте выше, также добавьте следующее ... Обратите внимание, что вы можете сделать это и с панелями:
Хотя flexbox не работает в IE9 и ниже, вы можете использовать демонстрацию с запасным вариантом, используя условные теги с чем-то вроде сетки javascript в качестве полизаполнения:
Что касается двух других примеров в принятом ответе ... Табличная демонстрация - неплохая идея, но она реализуется неправильно. Применение CSS к классам столбцов начальной загрузки, без сомнения, полностью нарушит структуру сетки. Вы должны использовать пользовательский селектор для одной и двух таблиц, стили которых не должны применяться к тем,
[class*='col-']
которые имеют определенную ширину. Этот метод следует использовать ТОЛЬКО, если вы хотите столбцы одинаковой высоты и одинаковой ширины. Он не предназначен для любых других макетов и НЕ является адаптивным. Однако мы можем сделать это запасным вариантом на мобильных дисплеях ...Наконец, первая демонстрация в принятом ответе, которая реализует версию единого истинного макета, является хорошим выбором для некоторых ситуаций, но не подходит для столбцов начальной загрузки. Причина этого заключается в том, что все столбцы расширяются до высоты контейнера. Так что это также нарушит отзывчивость, так как столбцы расширяются не до элементов рядом с ними, а всего контейнера. Этот метод также не позволит вам больше применять нижние поля к строкам, а также вызовет другие проблемы, такие как прокрутка для привязки тегов.
Для полного кода см. Codepen, который автоматически добавляет префикс кода flexbox.
источник
row:after, row:before
набором display: table, который явно не нравится Safari.Вы показываете только одну строку, поэтому ваш вариант использования может быть ограничен только этим. На случай, если у вас несколько строк, этот плагин - github Javascript-grid - работает отлично! Это заставляет каждую панель расширяться до самой высокой панели, давая каждой строке потенциально различную высоту, основанную на самой высокой панели в этом ряду. Это решение jquery против css, но я хотел рекомендовать его как альтернативный подход.
источник
Если вы хотите, чтобы это работало в любом браузере, используйте javascript:
источник
.ready()
сейчас не время его называть - его нужно вызывать.load()
window.onload = function() {...function content above...}
вместо этого. Это работает лучше.Я попробовал много предложений, сделанных в этой теме и на других страницах, но ни одно решение не работало на 100% во всех браузерах.
Поэтому я довольно долго экспериментировал и придумал это. Полное решение для столбцов Bootstrap Equal Height с помощью flexbox только с 1 классом. Это работает во всех основных браузерах IE10 +.
CSS:
HTML:
Для поддержки еще большего количества версий IE вы можете, например, использовать https://github.com/liabru/jquery-match-height и настроить таргетинг на все дочерние столбцы
.equal-cols
. Нравится:Без этого polyfill столбцы будут вести себя как обычные столбцы Bootstrap, что является довольно хорошим запасным вариантом.
источник
Вы также можете использовать inline-flex, который работает довольно хорошо и может быть немного чище, чем модифицировать каждый элемент строки с помощью CSS.
Для моего проекта я хотел, чтобы все строки, чьи дочерние элементы имели одинаковую высоту, чтобы границы выглядели неровными. Для этого я создал простой класс CSS.
источник
От:
http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css
источник
Нахальное решение JQuery, если кому-то интересно. Просто убедитесь, что у всех ваших cols (el) есть общее имя класса ... тоже работает быстро, если вы связываете его с $ (window) .resize
Применение
Примечание. Это сообщение было отредактировано в соответствии с комментарием @Chris, согласно которому в коде была установлена только последняя наибольшая высота в
$.each()
функции.источник
Некоторые из предыдущих ответов объясняют, как сделать div одинаковой высоты, но проблема в том, что когда ширина слишком узкая, div не будут складываться, поэтому вы можете реализовать их ответы с помощью одной дополнительной детали. Для каждого из них вы можете использовать имя CSS, данное здесь, в дополнение к используемому вами классу строки, поэтому div должен выглядеть следующим образом, если вы всегда хотите, чтобы div был рядом друг с другом:
Для всех экранов:
Когда вы хотите использовать см:
Когда ты хочешь md:
Когда вы хотите использовать LG:
РЕДАКТИРОВАТЬ На основе комментария, действительно, существует более простое решение, но вы должны убедиться, что информация столбца от наибольшей желаемой ширины для всех размеров до xs (например
<div class="col-md-3 col-sm-4 col-xs-12">
:источник
flex-wrap: wrap;
тогда вам не нужны все отдельные ... если только вы не хотите их специально.Я удивлен, что не смог найти достойное решение здесь в конце 2018 года. Я пошел дальше и сам нашел решение для Bootstrap 3, используя flexbox.
Чистый и простой пример:
HTML
CSS
Посмотреть рабочую демонстрацию: http://jsfiddle.net/5kmtfrny/
источник
Я знаю, что очень поздно, но теперь вы можете использовать атрибут стиля "min-height" для достижения своей цели.
источник
Если кто-то использует bootstrap 4 и ищет столбцы одинаковой высоты, просто используйте
row-eq-height
для родительского divСсылка: http://getbootstrap.com.vn/examples/equal-height-columns/
источник
вот мое решение (скомпилированный CSS):
Итак, ваш код будет выглядеть так:
По сути, это та же система, которую вы используете с
.col-*
классами с той разницей, которую вам нужно применить.row-*
классы к самой строке.С
.row-sm-eq
колонками будут складываться на экранах XS. Если вам не нужно, чтобы они были сложены на экранах, которые вы можете использовать.row-xs-eq
.Версия SASS, которую мы действительно используем:
Live демо
Примечание: смешивание
.col-xs-12
и.col-xs-6
внутри одного ряда не будет работать должным образом.источник
border-spacing
и отрицательными полями.Существует проблема с использованием решения 1 при применении его только к столбцу в строках. Хотелось бы улучшить Решение 1.
(Извините, не могу прокомментировать ответ Popnoodles. У меня недостаточно репутации)
источник
Лучший там:
Github reflex - Docs
Работает с начальной загрузкой
Обновить:
источник
Вот мой метод, я использовал flex с некоторыми изменениями в медиа-запросах.
затем добавил классы к родителю, которые были необходимы.
Я использую отзывчивые контрольные точки, потому что поток обычно мешает стандартному адаптивному характеру начальной загрузки.
источник
Я использую это супер простое решение с
clearfix
, которое не имеет побочных эффектов.Вот пример на AngularJS:
И еще один пример на PHP:
источник
Для тех, кто ищет быстрое и простое решение - если у вас есть относительно непротиворечивый набор содержимого блока, проще установить минимальную высоту в div, которая немного больше, чем самый большой блок.
источник
где .container-height - это класс стиля, который должен быть добавлен к элементу стиля .row, к которому все его дочерние элементы .col * имеют одинаковую высоту.
Применение этих стилей только к некоторому конкретному .row (с .container-height, как в примере) также позволяет избежать применения переполнения полей и отступов ко всем .col *.
источник
Я искал решение той же проблемы, и нашел один только что работал! - почти без дополнительного кода ..
см. https://medium.com/wdstack/bootstrap-equal-height-columns-d07bc934eb27 для хорошего понимания и с нужным вам resposne внизу, со ссылкой.
https://www.codeply.com/go/EskIjvun4B
это был правильный способ реагирования для меня ... цитата: ... 3 - Используйте flexbox (лучше всего!)
Начиная с 2017 года, лучший (и самый простой) способ сделать столбцы одинаковой высоты в адаптивном дизайне - использовать CSS3 flexbox.
и просто используйте:
источник
Пример:
https://jsfiddle.net/b9chris/njcnex83/embedded/result/
Адаптировано из нескольких ответов здесь. Ответы на основе flexbox - правильный путь после смерти IE8 и 9, а также после смерти Android 2.x, но это не так в 2015 году и, скорее всего, не будет в 2016 году. IE8 и 9 по-прежнему составляют 4- 6% использования в зависимости от того, как вы измеряете, и для многих корпоративных пользователей это намного хуже. http://caniuse.com/#feat=flexbox
display: table
,display: table-cell
Трюк более обратная совместимость - и одна большая вещь , единственный серьезная проблема совместимости является проблемой Safari , где это силаbox-sizing: border-box
, что - то уже применяется в теги Bootstrap. http://caniuse.com/#feat=css-tableОчевидно, вы можете добавить больше классов, которые делают подобные вещи, например
.equal-height-md
. Я связал их с div для небольшого выигрыша в производительности при моем ограниченном использовании, но вы можете удалить тег, чтобы сделать его более обобщенным, как и остальная часть Bootstrap.Обратите внимание, что jsfiddle здесь использует CSS, и поэтому вещи, которые Less мог бы предоставить в противном случае, жестко запрограммированы в связанном примере. Например, @ screen-sm-min был заменен на то, что вставил бы Less - 768px.
источник
Если это имеет смысл в вашем контексте, вы можете просто добавить пустой div из 12 столбцов после каждого перерыва, который действует как разделитель, который соединяет нижнюю часть самой высокой ячейки в вашем ряду.
Надеюсь это поможет!
источник
Думаю, я бы просто добавил, что ответ, данный Dr.Flink, также можно применить к
form-horizontal
блоку Bootstrap 3 - что может быть очень удобно, если вы хотите использовать цвета фона для каждой ячейки. Для того, чтобы это работало для форм начальной загрузки, вам нужно будет обернуть содержимое формы, которое просто служит для репликации табличной структуры.В приведенном ниже примере также представлен CSS, который демонстрирует дополнительный медиа-запрос, позволяющий Bootstrap 3 просто захватить и сделать это нормально на меньших экранах. Это также работает в IE8 +.
Пример:
источник
Попробуй это сделать через flex-box
Live JSFiddle - https://jsfiddle.net/grinmax_/spsn4fnq/
источник
Так что да, Bootstrap 4 делает все столбцы в строке равными по высоте, однако, если вы создаете рамку вокруг содержимого внутри строки, вы можете обнаружить, что столбцы выглядят как равные высоты!
Когда я применил
height: 100%
элемент внутри col, я обнаружил, что потерял поле.Мое решение состоит в том, чтобы использовать padding для div элемента col (вместо поля на внутреннем элементе). Вот так:
В приведенном выше примере кода Bootstrap 4.1 используется для создания набора из девяти блоков с рамкой
источник
HTML
CSS
JS
источник
03/19/2019
** Bootstrap 4 Решение по равной высоте **
Bootstrap Utilities / flex для одинаковой высоты
Живой пример в Codepen
Равная высота по классу начальной загрузки с фиксированным родительским div
height
илиmin-height
Показать фрагмент кода
источник
Вы можете обернуть столбцы внутри div
источник