Я использую Twitter Bootstrap 3, и у меня возникают проблемы, когда я хочу выровнять по вертикали две div
, например, ссылку JSFiddle :
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<div class="row">
<div class="col-xs-5">
<div style="height:5em;border:1px solid #000">Big</div>
</div>
<div class="col-xs-5">
<div style="height:3em;border:1px solid #F00">Small</div>
</div>
</div>
Система сетки в Bootstrap использует float: left
, нет display:inline-block
, поэтому свойство vertical-align
не работает. Я попытался использовать, margin-top
чтобы исправить это, но я думаю, что это не очень хорошее решение для адаптивного дизайна.
div
, нет текста внутри, что-то вроде этого jsfiddle.net/corinem/Aj9H9, но в этом примере я не использую bootstrapОтветы:
Вы все еще можете использовать пользовательский класс, когда вам это нужно:
Bootply
Использование
inline-block
добавляет дополнительное пространство между блоками, если вы допускаете реальное пространство в вашем коде (например...</div> </div>...
). Это дополнительное пространство нарушает нашу сетку, если размеры столбцов составляют до 12:Здесь у нас есть дополнительные пробелы между
<div class="[...] col-lg-2">
и<div class="[...] col-lg-10">
(возврат каретки и 2 табуляции / 8 пробелов). И так...Давайте пнуть это дополнительное пространство!
Заметьте, казалось бы, бесполезные комментарии
<!-- ... -->
? Они важны - без них пропуски между<div>
элементами будут занимать пространство в макете, нарушая систему сетки.Примечание: Bootply был обновлен
источник
col-lg-2
иcol-lg-10
). Интересно, что если вы добавите следующий код JS (при условии, что jQuery), он сможет исправить себя:$('.row').html($('.vcenter'));
inline-block
дополнительным пробелом . Я даю решение в моей редакции.Гибкая компоновка коробки
С появлением CSS Flexible Box многие кошмары веб-дизайнеров 1 были разрешены. Один из самых хакерских, вертикальное выравнивание. Теперь это возможно даже на неизвестных высотах .
Flexible Box (или вкратце Flexbox) - это новая система макетов, специально разработанная для макетов. В спецификации говорится :
Как это может помочь в этом случае? Ну что ж, посмотрим.
Выровненные по вертикали столбцы
Используя Twitter Bootstrap, у нас есть
.row
несколько.col-*
s. Все, что нам нужно сделать, - это отобразить желаемое значение.row
2 в виде поля гибкого контейнера, а затем выровнять все его гибкие элементы (столбцы) поalign-items
свойствам по вертикали .ПРИМЕР ЗДЕСЬ (Пожалуйста, внимательно прочитайте комментарии)
Выход
Цветная область отображает отступы столбцов.
Уточнение по
align-items: center
Большая тревога
Важное примечание № 1: Twitter Bootstrap не определяет
width
столбцы столбцов на очень маленьких устройствах, если вы не назначите один из.col-xs-#
классов столбцам.Поэтому в этой конкретной демонстрации я использовал
.col-xs-*
классы для правильного отображения столбцов в мобильном режиме, поскольку онwidth
явно указывает столбец.Но в качестве альтернативы вы можете отключить макет Flexbox, просто переключившись
display: flex;
наdisplay: block;
экран определенного размера. Например:Или вы можете указать
.vertical-align
только для определенных размеров экрана, например, так:В этом случае, я бы с @KevinNelson «s подход .
Важное примечание № 2: префиксы поставщиков опущены из-за краткости. Синтаксис Flexbox был изменен в течение времени. Новый письменный синтаксис не будет работать в старых версиях веб-браузеров (но не такой старый, как Internet Explorer 9! Flexbox поддерживается в Internet Explorer 10 и более поздних версиях).
Это означает, что вы также должны использовать свойства с префиксом поставщика, такие как
display: -webkit-box
и так далее, в рабочем режиме.Если вы нажмете «Toggle Compiled View» в демоверсии , вы увидите префиксную версию объявлений CSS (благодаря Autoprefixer ).
Полноразмерные столбцы с вертикальным выравниванием содержимого
Как вы видели в предыдущей демонстрации , столбцы (элементы flex) больше не так высоки, как их контейнер (коробка flex-контейнера.
.row
Элемент).Это из-за использования
center
значения дляalign-items
свойства. Значение по умолчанию -stretch
элементы могут заполнить всю высоту родительского элемента.Чтобы это исправить, вы также можете добавить
display: flex;
к столбцам:ПРИМЕР ЗДЕСЬ (опять же, обратите внимание на комментарии)
Выход
Цветная область отображает отступы столбцов.
И последнее, но не менее важное : обратите внимание, что приведенные здесь демонстрации и фрагменты кода предназначены для того, чтобы дать вам другую идею, предоставить современный подход к достижению цели. Пожалуйста, обратите внимание на раздел « Big Alert », если вы собираетесь использовать этот подход в реальных веб-сайтах или приложениях.
Для дальнейшего чтения, включая поддержку браузера, эти ресурсы будут полезны:
1. Вертикально выровняйте изображение внутри div с отзывчивой высотой. 2. Лучше использовать дополнительный класс, чтобы не изменять настройку Twitter Bootstrap по умолчанию
.row
.источник
col-*
, ваша скрипка / codepens не использует начальную загрузку, поэтому они вводят в заблуждение. Ваши примеры не работают с начальной загрузкой; его сеточная система не основана наflex
, поэтому они несовместимы. Просто попробуйте любой из ваших примеров на странице с поддержкой начальной загрузки, и вы поймете, что они не работают.Код ниже работал для меня:
источник
Обновление 2020
Я знаю, что оригинальный вопрос был для Bootstrap 3, но теперь, когда Bootstrap 4 был выпущен, вот некоторые обновленные рекомендации по вертикальному центру.
Важный! Вертикальный центр относительно высоты родителя
Bootstrap 4
Теперь, когда Bootstrap 4 является flexbox по умолчанию, есть много разных подходов к вертикальному выравниванию, используя: auto-margins , flexbox utils или отображения вместе с вертикального выравнивания . Поначалу «утилиты вертикального выравнивания» кажутся очевидными, но они работают только с элементами линейного и табличного отображения. Вот несколько вариантов вертикальной центровки Bootstrap 4:
1 - вертикальный центр с использованием авто полей:
Другой способ вертикального центрирования - использовать
my-auto
. Это будет центрировать элемент внутри его контейнера. Например,h-100
делает строку полной высоты иmy-auto
будет вертикально центрироватьcol-sm-12
столбец.Bootstrap 4 - Вертикальный центр с демонстрацией авто-полей
my-auto
представляет поля на вертикальной оси Y и эквивалентно:2 - Вертикальный центр с Flexbox:
Так как Bootstrap 4
.row
сейчасdisplay:flex
доступен, вы можете просто использоватьalign-self-center
любой столбец для его вертикального центрирования ...или использовать
align-items-center
на весь.row
чтобы выровнять по центру всеcol-*
строки подряд ...Bootstrap 4 - вертикальный центр колонн разной высоты Демо
3 - Вертикальный центр с использованием утилит дисплея:
Бутстрап 4 имеет дисплей утилиты , которые могут быть использованы для
display:table
,display:table-cell
,display:inline
и т.д .. Они могут быть использованы с вертикальными утилитами выравнивания для выравнивания инлайн, встроенный блок или элементы ячеек таблицы.Bootstrap 4 - вертикальный центр с использованием утилит дисплея Demo
См. Также: Центр вертикального выравнивания в Bootstrap 4
Bootstrap 3
Метод Flexbox на контейнере элемента (ов) по центру:
Преобразуйте метод перевода:
Встроенный метод отображения:
Демонстрация методов центрирования Bootstrap 3
источник
mx-auto
(горизонтальное центрирование), поэтому имеет смысл, чтоmy-auto
центрируется вертикально (ось Y).Попробуйте это в CSS div:
источник
Я подумала, что поделюсь своим «решением» на случай, если оно поможет любому, кто не знаком с самими запросами @media.
Благодаря ответу @ HashemQolami я создал несколько медиа-запросов, которые будут работать на мобильных устройствах, например классы col- *, чтобы я мог составлять col- * для мобильных устройств, но отображать их вертикально по центру для больших экранов, например
,
Более сложные макеты, требующие различного количества столбцов для разрешения экрана (например, 2 строки для -xs, 3 для -sm и 4 для -md и т. Д.), Требуют более сложного анализа, но для простой страницы с -xs сложены и -см и больше в строках, это отлично работает.
источник
clear: both;
к классам внутри медиа-запросов, чтобы заставить это работать..row
модификатор ... так что это должно выглядетьclass="row row-sm-flex-center"
. Определение BS3.row
обрабатываетclear:both;
clear: both;
снова.После принятого ответа, если вы не хотите настраивать разметку, для разделения проблем или просто потому, что вы используете CMS, следующее решение отлично работает:
Ограничение здесь состоит в том, что вы не можете наследовать размер шрифта от родительского элемента, потому что строка устанавливает размер шрифта равным 0, чтобы удалить пробел.
источник
Я предпочитаю этот метод в соответствии с Дэвид Уолш Вертикальный центр CSS :
Это
transform
не важно; он просто находит центр немного точнее. В результате Internet Explorer 8 может быть немного менее центрирован, но это все же неплохо - Могу ли я использовать - Преобразовывает 2d .источник
Это моё решение. Просто добавьте этот класс в ваш контент CSS.
Тогда ваш HTML будет выглядеть так:
источник
Я просто сделал это, и он делает то, что я хочу.
И теперь моя страница выглядит
источник
Я действительно считаю, что следующий код работает с использованием Chrome, а не с другими браузерами, кроме выбранного в данный момент ответа:
Bootply Link
Возможно, вам придется изменить высоту (в частности, на
.v-center
) и удалить / изменить разделdiv[class*='col-']
для ваших нужд.источник
Я столкнулся с этой же проблемой. В моем случае я не знал высоту внешнего контейнера, но вот как я это исправил:
Сначала установите высоту для ваших
html
иbody
элементов , так что они 100%. Это важно! Без этогоhtml
иbody
элементы просто наследуют высоту своих детей.Затем у меня был внешний контейнерный класс с:
И, наконец, внутренний контейнер с классом:
HTML так же прост, как:
Это все, что вам нужно, чтобы выровнять содержимое по вертикали. Проверьте это в скрипке:
Jsfiddle
источник
Там нет необходимости для таблицы и таблицы клеток. Это может быть легко достигнуто с помощью преобразования.
Пример: http://codepen.io/arvind/pen/QNbwyM
Код:
источник
Если вы используете версию Bootstrap Less и сами компилируете в CSS, вы можете использовать некоторые служебные классы для использования с классами Bootstrap.
Я нашел, что они работают фантастически хорошо, когда я хочу сохранить отзывчивость и конфигурируемость системы сетки Bootstrap (например, использование
-md
или-sm
), но я хочу, чтобы все столбцы в данной строке имели одинаковую высоту по вертикали (чтобы я мог затем выровняйте их содержимое по вертикали, и все столбцы в строке будут иметь общую середину).CSS / Минус:
HTML:
источник
Я немного уточнил ответ zessx , чтобы его было проще использовать при смешивании столбцов разных размеров на экранах разных размеров.
Если вы используете Sass , вы можете добавить это в свой scss-файл:
Который генерирует следующий CSS (который вы можете использовать непосредственно в ваших таблицах стилей, если вы не используете Sass):
Теперь вы можете использовать его в своих адаптивных столбцах, например так:
источник
Поведение Flex изначально поддерживается начиная с Bootstrap 4. Добавьте
d-flex align-items-center
вrow
div. Вам больше не нужно изменять свой контент CSS.Простой пример: http://jsfiddle.net/vgks6L74/
С вашим примером: http://jsfiddle.net/7zwtL702/
Источник: Flex · Bootstrap
источник
Хорошо, случайно я смешал несколько решений, и теперь, наконец, это работает для моего макета, где я попытался создать таблицу 3х3 с колонками Bootstrap с наименьшим разрешением.
источник
источник
Попробуй это,
источник
Есть несколько способов сделать это:
использование
и CSS контейнера для
Используйте отступы вместе с медиа-экраном для изменения отступов относительно размера экрана. Google @media, чтобы узнать больше.
Используйте относительный отступ
Т.е. указать отступы в%
источник
С Bootstrap 4 (который сейчас находится в альфа-версии) вы можете использовать
.align-items-center
класс. Таким образом, вы можете сохранить отзывчивый характер Bootstrap. Работает сразу хорошо для меня. Смотрите документацию по Bootstrap 4 .источник
HTML
CSS
источник
Я столкнулся с той же ситуацией, когда хотел выровнять несколько элементов div по вертикали подряд и обнаружил, что классы Bootstrap col-xx-xx применяют стиль к div как float: left.
Мне пришлось применить стиль к элементам div, например style = "Float: none", и все мои элементы div начали выравниваться по вертикали. Вот рабочий пример:
JsFiddle Link
На тот случай, если кто-то захочет прочитать больше о свойстве float:
W3Schools - Поплавок
источник