Выравнивание по центру css по вертикали: Центрирование горизонтальное и вертикальное
Как выровнять DIV по вертикали и горизонтали по центру
Может ли кто-нибудь помочь мне заставить div id «loader» плавать в центре div class «Window». Спасибо.
<div>
<div></div>
</div>
UPDATE* мне нужно центрировать его в абсолютной середине блока. Допустим, класс «Window» был высотой 400 пикселей. Как мне заставить «загрузчик» плавать в центре (height/width) этого?
css
Поделиться
Источник
Joe
22 февраля 2012 в 17:19
5 ответов
- Как выровнять текст по центру в div
Я хотел бы выровнять текст по центру как по вертикали, так и по горизонтали внутри этого div. Таким образом, он имеет равное заполнение сверху и снизу. Как мне это сделать с моим текущим кодом? мой Fiddle: http://jsfiddle.net/hr2aLrc0 / <div…
- Как вы выравниваете div по горизонтали и вертикали?
Я хотел бы горизонтально и вертикально выровнять следующий div по центру страницы. Мне удалось выровнять его по горизонтали к центру, но не по вертикали. Как я могу это сделать? http://www.brennanpringle.com/кошка.html
6
Примените следующие CSS к «loader»:
- положение: относительное
- топ: 50%
- маржа: — {E}px auto auto auto
где {E} — половина высоты «loader»
Надеюсь, это поможет.
Поделиться
SenorAmor
22 февраля 2012 в 17:29
3
#someid.Window{
// give this some width
width: 100%
}
#loader{
// give width and margin auto on the sides
width: 100px;
margin: 0 auto;
}
Поделиться
driangle
22 февраля 2012 в 17:21
0
http://jsfiddle.net/sfKR2/
#someid {
width:200px;
height:200px;
}
#loader {
position: relative;
height:80px;
width: 80px;
top: 50%;
margin-top: -40px; /* half of the height */
margin-left: auto;
margin-right: auto;
}
Поделиться
Fabian Leutgeb
22 февраля 2012 в 17:22
0
напиши это:
.window{
height:400px;
width:400px;
background:red;
vertical-align:middle;
line-height:400px;
text-align:center;
}
#loader{
width:20px;
height:20px;
background:green;
display:inline-block;
vertical-align:middle;
}
Проверьте это http://jsfiddle.net/dxPfz/
Поделиться
sandeep
22 февраля 2012 в 17:33
0
Добавьте это к вашему css:
#loader {
width: 123px;
margin:0 auto;
}
Это приведет к тому, что ваши левые и правые поля будут рассчитываться автоматически.
Поделиться
Bruno Silva
22 февраля 2012 в 17:21
Похожие вопросы:
Как выровнять небольшое изображение по центру с текстом в центре как по горизонтали, так и по вертикали?
У меня есть div, где я пытаюсь выровнять текст и изображение по центру как по вертикали, так и по горизонтали. Так что для горизонтального я дал text-align: center; , для вертикального мне не…
CSS: как выровнять содержание текста по горизонтали-по центру и по вертикали-по центру?
как я могу выровнять текст внутри div, в horizonally-по центру и по вертикали-по центру? <div style=height: 300px;> <p>Envision various details for your big day with help from our photo…
После выравнивания div по горизонтали и вертикали по центру
Я видел много вопросов о том, как выровнять div по горизонтали и вертикали по центру , и я также получил ответ. Код, который я получил: Html- <div class=outer> <div class=middle> <div…
Как выровнять текст по центру в div
Я хотел бы выровнять текст по центру как по вертикали, так и по горизонтали внутри этого div. Таким образом, он имеет равное заполнение сверху и снизу. Как мне это сделать с моим текущим кодом? мой…
Как вы выравниваете div по горизонтали и вертикали?
Я хотел бы горизонтально и вертикально выровнять следующий div по центру страницы. Мне удалось выровнять его по горизонтали к центру, но не по вертикали. Как я могу это сделать?…
Как выровнять текст в окне по вертикали и горизонтали?
Я пытаюсь выровнять текст по центру как по вертикали, так и по горизонтали внутри div в окне, и я хочу, чтобы он работал как в портретном, так и в альбомном режимах на iPhone. Вот мой код, но он…
Выровняйте изображение по центру как по вертикали, так и по горизонтали
У меня есть список изображений, которые мне нужно выровнять по центру как по вертикали, так и по горизонтали. Как выровнять изображения в центре их соответствующего li как по горизонтали, так и по…
Выровняйте div по горизонтали и вертикали по центру страницы (отзывчиво)
У меня есть div для формы входа в систему. Я хочу выровнять div по горизонтали и вертикали по центру во всех устройствах. Любая помощь будет оценена по достоинству
Как выровнять кнопку по горизонтали и вертикали в документе?
Я хочу выровнять кнопку по горизонтали и вертикали в документе, теперь я хочу выровнять по горизонтали, но я не могу определить, как выровнять по вертикали? На рисунке ниже кнопка выровнять по…
Как выровнять текст внутри элемента <div> по горизонтали?
Как выровнять текст внутри div по центру по вертикали? У меня есть элемент div внутри моей страницы html, где высота div-это размер экрана, а текст внутри этого div должен быть в центре. Я…
CSS/CSS3. Некоторые приемы центрирования.
Выравнивание элементов веб-страницы по горизонтали и вертикали можно сделать разными способами. Выбор приемов центрирования во многом зависит от типа элемента (блочный или строковый), от его размеров, типа позиционирования и т.д.
ГОРИЗОНТАЛЬНОЕ ЦЕНТРИРОВАНИЕ.
Центрирование строк текста.
p { text-align: center; }
h3 { text-align: center; }
Центрирование блока с фиксированной шириной.
p.blocktext {
margin-left: auto;
margin-right: auto;
width: 6em;
}
...
<p>Этот довольно ...
Центрирование изображения
Такой же прием можно использовать для центрирования по горизонтали изображения, нужно лишь указать для него тип отображения как блочный:
img.displayed {
display: block;
margin-left: auto;
margin-right: auto
}
...
<img src="" alt="">
ВЕРТИКАЛЬНОЕ ЦЕНТРИРОВАНИЕ.
CSS уровня 2.
В CSS2 нет специального свойства для центрирования по вертикали, однако нужного эффекта можно добиться комбинированием некоторых свойств. Например, если внешний блок отформатировать как ячейку таблицы, то при заданной высоте блока можно выровнять содержимое ячейки таблицы вертикально по центру:
div.outer {
height: 300px;
display: table-cell;
vertical-align: middle;
}
...
<div>
<p>Этот параграф отцентрирован вертикально.</p>
</div>
Пример ниже показывает абзац, который центрирован вертикально в окне браузера, потому что находится внутри блока, позиционированного абсолютно и по высоте окна.
/* Вертикальное центрирование: сделать размеры блока максимальными и отформатировать его как таблицу */
div.outer {
top: 0;
left: 0;
width: 100%;
height: 100%;
position: absolute;
display: table
}
p {
display: table-cell;
vertical-align: middle
}
/* Горизонтальное центрирование изображения: выставить левый и правый отступы в 'auto' */
img.displayed {
display: block;
margin: 1em auto
}
/* Так же нужно отцентировать строки параграфа */
p {
text-align: center
}
...
<div>
<p>Этот параграф отцентрирован по вертикали и горизонтали.
<img class=displayed src="" alt="">
</p>
</div>
CSS уровня 3.
CSS3 предлагает другие возможности вертикального выравнивания. Например есть способ центрирования по вертикали с использованием абсолютного позционирования, которое, однако, может привести к частичному перекрытию текста. Но если точно известно, что перекрытие текста не станет проблемой в веб-документе, то можно использовать свойство ‘transform’, чтобы выровнять по центру абсолютно позиционированный элемент:
div.outer {
height: 10em;
position: relative } /* 1 */
div.outer p {
margin: 0;
position: absolute; /* 2 */
top: 50%; /* 3 */
transform: translate(0, -50%) } /* 4 */
...
<div>
<p>Этот параграф отцентрирован по вертикали.</p>
</div>
Основные правила:
- Сделайте контейнер относительно позиционированным (position: relative), что превратит его в контейнер для абсолютно позиционированных элементов.
- Сам элемент сделайте абсолютно позиционированным (position: absolute).
- Поместите элемент посередине контейнера с помощью ‘top: 50%’. (Заметьте, что ‘50%’ здесь означают 50% высоты контейнера.)
- Используйте translate, чтобы переместить элемент вверх на половину своей собственной высоты. ( ‘50%’ в ‘translate(0, -50%)’ указывают на высоту самого элемента.)
Есть также прием выравнивания по вертикали без использования абсолютного позиционирования. Он основан на ключевом слове ‘flex’ для свойства ‘display’:
div.outer {
height: 10em;
display: flex;
align-items: center
}
div.outer p {
margin: 0
}
...
<div>
<p>Этот параграф отцентрирован по вертикали с помощью свойства 'display: flex'.</p>
</div>
Если добавить еще и выравнивание по горизонтали, то получим полностью центрированный элемент:
div.outer {
height: 10em;
display: flex;
justify-content: center; /*Центрирование по горизонтали*/
align-items: center; /*Центрирование по вертикали */
}
div.outer p {
margin: 0
}
...
<div>
<p>Этот параграф отцентрирован по вертикали и горизонтали.</p>
</div>
Основной источник
Выравнивание текста по центру css по вертикали
Выравнивание элементов на веб-странице может оказаться не такой легкой задачей, особенно если речь идет об выравнивание текста по вертикали. Этот вопрос часто встречается на форумах, и особую трудность решение этого вопроса вызывает у начинающих пользователей. Но на самом деле здесь сложного ничего нет. Все что нужно, это немного владеть знаниями каскадной таблицы стилей CSS. Так как это все делается за счет ее правил.
Выравнивание текста по вертикали можно добиться по меньшей мере пятью разными способами. Каждый из них по-своему хорош, учитывая обстоятельства и детали ситуации. Мы рассмотрим несколько примеров, а вы исходя из условий, подберете себе подходящее ращение.
Первый метод с line-height
Первый способ очень банальный и с большим недостатком, что ограничивает его в применении. Но все же, как ни крути, он может пригодиться и даже принести нужный результат. Это будет условным выравниванием, так как, по сути, мы задаем высоту строки в соответствии с высотой блока, использовав свойство line-height .
первый пример. демо №1
Точно таким же способом возможно реализовать картинку по центру вертикали, но добавив одно новое свойство vertical-align: middle; .
Выравнивание со свойством position
Этот метод широко используется во многих задачах CSS, не исключая и нашей поставленной задачки. Но следует отметить, что он не полностью совершенен и имеет свои побочные эффекты. Это связано с тем, что центрирование элемента, задаваемое в процентах, будет центрироваться по левому верхнему краю внутреннего блока.
Поэтому нужно задать отрицательное значение к внешним отступам. Размер отступа сверху должен соответствовать половине высоты внутреннего блока, а отступ слева — на половину ширины. Таким образом, получим абсолютный центр.
В этом варианте, пожалуй, обязательно знать точную высоту и ширину дочернего элемента. Иначе, может возникнуть некорректность центрирования.
Выравнивание со свойством table
Здесь используем старую технику, превратив элементы в таблицу с ячейками. При этом теги таблицы
Выравнивание со свойством flex
Это идет уже более специфичный вариант со свойствами, которые не так часто встречаются в верстке сайта. Но, тем не менее они в редких случаях очень полезны.
Выравнивание со свойством transform
И последний в нашем списке, но далеко не последний в использовании способ. Сдвигаем по вертикали элемент на желаемое значение, в данном случае на -50%.
В CSS есть всего несколько техник центрирования элементов. Если их знать, то большинство задач решаются просто.
Горизонтальное
text-align
Для центрирования инлайновых элементов – достаточно поставить родителю text-align: center :
Для центрирования блока это уже не подойдёт, свойство просто не подействует. Например:
margin: auto
Блок по горизонтали центрируется margin: auto :
В отличие от width/height , значение auto для margin само не появляется. Обычно margin равно конкретной величине для элемента, например 0 для DIV . Нужно поставить его явно.
Значение margin-left:auto/margin-right:auto заставляет браузер выделять под margin всё доступное сбоку пространство. А если и то и другое auto , то слева и справа будет одинаковый отступ, таким образом элемент окажется в середине. Детали вычислений описаны в разделе спецификации Calculating widths and margins.
Вертикальное
Для горизонтального центрирования всё просто. Вертикальное же изначально не было предусмотрено в спецификации CSS и по сей день вызывает ряд проблем.
Есть три основных решения.
position:absolute + margin
Центрируемый элемент позиционируем абсолютно и опускаем до середины по вертикали при помощи top:50% :
Это, конечно, не совсем центр. По центру находится верхняя граница. Нужно ещё приподнять элемент на половину своей высоты.
Высота центрируемого элемента должна быть известна. Родитель может иметь любую высоту.
Если мы знаем, что это ровно одна строка, то её высота равна line-height .
Приподнимем элемент на пол-высоты при помощи margin-top :
При стандартных настройках браузера высота строки line-height: 1.25 , если поделить на два 1.25em / 2 = 0.625em .
Конечно, высота может быть и другой, главное чтобы мы её знали заранее.
Можно аналогично центрировать и по горизонтали, если известен горизонтальный размер, при помощи left:50% и отрицательного margin-left .
Одна строка: line-height
Вертикально отцентрировать одну строку в элементе с известной высотой height можно, указав эту высоту в свойстве line-height :
Это работает, но лишь до тех пор, пока строка одна, а если содержимое вдруг переносится на другую строку, то начинает выглядеть довольно уродливо.
Таблица с vertical-align
У свойства vertical-align, которое управляет вертикальным расположением элемента, есть два режима работы.
В таблицах свойство vertical-align указывает расположение содержимого ячейки.
Его возможные значения:
baseline Значение по умолчанию. middle , top , bottom Располагать содержимое посередине, вверху, внизу ячейки.
Например, ниже есть таблица со всеми 3-мя значениями:
Обратим внимание, что в ячейке с vertical-align: middle содержимое находится по центру. Таким образом, можно обернуть нужный элемент в таблицу размера width:100%;height:100% с одной ячейкой, у которой указать vertical-align:middle , и он будет отцентрирован.
Но мы рассмотрим более красивый способ, который поддерживается во всех современных браузерах, и в IE8+. В них не обязательно делать таблицу, так как доступно значение display:table-cell . Для элемента с таким display используются те же алгоритмы вычисления ширины и центрирования, что и в TD . И, в том числе, работает vertical-align :
Этот способ замечателен тем, что он не требует знания высоты элементов.
Однако у него есть особенность. Вместе с vertical-align родительский блок получает табличный алгоритм вычисления ширины и начинает подстраиваться под содержимое. Это не всегда желательно.
Чтобы его растянуть, нужно указать width явно, например: 300px :
Можно и в процентах, но в примере выше они не сработают, потому что структура таблицы «сломана» – ячейка есть, а собственно таблицы-то нет.
Это можно починить, завернув «псевдоячейку» в элемент с display:table , которому и поставим ширину:
Если дополнительно нужно горизонтальное центрирование – оно обеспечивается другими средствами, например margin: 0 auto для блочных элементов или text-align:center на родителе – для других.
Центрирование в строке с vertical-align
Для инлайновых элементов ( display:inline/inline-block ), включая картинки, свойство vertical-align центрирует сам инлайн-элемент в окружающем его тексте.
В этом случае набор значений несколько другой:
Это можно использовать и для центрирования, если высота родителя известна, а центрируемого элемента – нет.
Допустим, высота внешнего элемента 120px . Укажем её в свойстве line-height :
Работает во всех браузерах и IE8+.
Свойство line-height наследуется, поэтому надо знать «правильную» высоту строки и переопределять её для inner .
Центрирование с vertical-align без таблиц
Если центрирование должно работать для любой высоты родителя и центрируемого элемента, то обычно используют таблицы или display:table-cell с vertical-align .
Если центрируются не-блочные элементы, например inline или inline-block , то vertical-align может решить задачу без всяких таблиц. Правда, понадобится вспомогательный элемент (можно через :before ).
- Перед центрируемым элементом помещается вспомогательный инлайн-блок before , занимающий всю возможную высоту.
- Центрируемый блок выровнен по его середине.
Для всех современных браузеров и IE8 можно добавить вспомогательный элемент через :before :
В пример выше добавлено также горизонтальное центрирование text-align: center . Но вы можете видеть, что на самом деле внутренний элемент не центрирован горизонтально, он немного сдвинут вправо.
Это происходит потому, что центрируется весь текст, а перед inner находится пробел, который занимает место.
- Убрать лишний пробел между div и началом inner , будет
Центрирование с использованием модели flexbox
Данный метод поддерживается всеми современными браузерами.
- Не требуется знания высоты центрируемого элемента.
- CSS чистый, короткий и не требует дополнительных элементов.
- Не поддерживается IE9-, IE10 поддерживает предыдущую версию flexbox.
Итого
Обобщим решения, которые обсуждались в этой статье.
Для горизонтального центрирования:
- text-align: center – центрирует инлайн-элементы в блоке.
- margin: 0 auto – центрирует блок внутри родителя. У блока должна быть указана ширина.
Для вертикального центрирования одного блока внутри другого:
Если размер центрируемого элемента известен, а родителя – нет
Родителю position:relative , потомку position:absolute; top:50% и margin-top:- . Аналогично можно отцентрировать и по горизонтали.
Если нужно отцентрировать одну строку в блоке, высота которого известна
Поставить блоку line-height: . Нужны конкретные единицы высоты ( px , em …). Значение line-height:100% не будет работать, т.к. проценты берутся не от высоты блока, а от текущей line-height .
Высота родителя известна, а центрируемого элемента – нет.
Поставить line-height родителю во всю его высоту, а потомку поставить display:inline-block .
Высота обоих элементов неизвестна.
- Сделать элемент-родитель ячейкой таблицы при помощи display:table-cell (IE8) или реальной таблицы, и поставить ему vertical-align:middle . Отлично работает, но мы имеем дело с таблицей вместо обычного блока.
- Решение со вспомогательным элементом outer:before и инлайн-блоками. Вполне универсально и не создаёт таблицу.
- Решение с использованием flexbox.
Существует несколько принципиально отличающихся способов для того чтобы отцентрировать объект по вертикали с помощью CSS, однако сложность может быть в выборе правильного. Мы рассмотрим некоторые из них, а также сделаем небольшой сайт, используя полученные знания.
Вертикальное выравнивание по центру с помощью CSS достигается не так просто. Существует множество способов и не все работают во всех броузерах. Давайте рассмотрим 5 различных методов, а также «за» и «против» каждого из них. Пример.
1-ый способ
Этот метод предполагает, что мы устанавливаем некоторому элементу
Плюсы
- Контент может динамически изменять высоту (высота не определена в CSS).
- Контент не обрезается в случае, если для него недостаточно места.
Минусы
- Не работает в IE 7 и меньше
- Много вложенных тэгов
2-ой метод
Этот метод использует абсолютное позиционирование div-а, которому top устанавливается в 50%, а верхний отступ (margin-top) минус половине высоты контента. Это подразумевает, что объект должен иметь фиксированную высоту, которая определена в стилях CSS.
Поскольку высота фиксированная, вы можете установить overflow:auto; для div-а содержащего контент, таким образом, в случае если контент не будет влазить, то появятся скролл-бары.
Плюсы
- Работает во всех броузерах.
- Нет лишней вложенности.
Минусы
- Когда не достаточно места, контент пропадает (например, div находится внутри body, а пользователь уменьшил окна, в этом случае скролл-бары не появятся.
3-ий метод
В этом методе, мы обернём div с контентом другим div-ом. Установим ему высоту в 50% (height: 50%;), а нижний отступ половине высоты (margin-bottom:-contentheight;). Контент будет очищать float и выводиться по центру.
Плюсы
- Работает во всех броузерах.
- Когда недостаточно места (например, когда уменьшено окно) контент не обрезается, появятся скроллбары.
Минусы
- Думаю только один: что используется лишний пустой элемент.
4-ый метод.
Этот метод использует свойство position:absolute; для div-а с фиксированными размерами (шириной и высотой). Затем устанавливаем ему координаты top:0; bottom:0;, но поскольку у него фиксированная высота, то он не может растянуться и выравнивается по центру. Это очень похоже на общеизвестный метод горизонтального выравнивания по центру блочного элемента фиксированной ширины (margin: 0 auto;).
Плюсы
Минусы
- Не работает в Internet Explorer
- Контент будет обрезаться без скролл-баров, если не хватает места в контейнере.
5-ый метод
С помощью этого метода можно выровнять по центру одну строку текста. Просто устанавливаем высоту текста (line-height) равной высоте элемента (height). После этого строка будет выведена по центру.
Плюсы
- Работает во всех броузерах.
- Не обрезает текст, если он не влез.
Минусы
- Работает только с текстом (не работает с блочными элементами).
- Если текста больше чем одна строка, то выглядит очень плохо.
Этот способ очень полезен для небольших элементов, например чтобы вырвнять по центру текст в кнопке или в текстовом поле.
Теперь вы знаете как добиться вертикального выравнивания по центру, давайте сделаем простой web-сайт, который, в конце-концов будет выглядеть так:
Шаг 1
Всегда хорошо начинать с семантической разметки. Наша страница будет структурирована следующим образом:
- #floater (чтобы выровнять контент по центру)
- #centred (центральный элемент)
Напишем следующую html-разметку:
Шаг 2
Сейчас мы напишем простейший CSS, для размещения элементов на странице. Вы должны сохранить этот код в файле style.css. Именно на него прописана ссылка в html-файле.
Перед тем как сделать наш контент выровненным по центру, необходимо для body и html установить высоту 100%. Так как высота считается без внутренних и внешних отступов (padding и margin), то мы устанавливаем их (отступы) в 0, чтобы не было скроллбаров.
Нижний отступ для элемента «floater»-а равен минус половине высоты контента (400px), а именно -200px;
Сейчас ваша страничка должна выглядеть приблизительно так:
Ширина элемента #centered 80%. Это делает наш сайт уже на маленьких экранах и шире на больших. большинство сайтов выглядит неприлично на новых широких мониторах в верхнем левом углу. Свойства min-width и max-width также ограничивают нашу страничку, чтобы она не выглядела слишком широкой или слишком узкой. Internet Explorer не поддерживает эти свойства. Для него надо установить фиксированную ширину.
Поскольку элементу #centered установлено position:relative, мы можем использовать абсолютное позиционирование элементов внутри него. Затем установим overflow:auto; для элемента #content, чтобы появлялись скроллбары, в случае если не будет помещаться контент.
Шаг 3
И последнее что мы сделаем, это добавим кое-какие стили, чтобы страничка выглядела немного привлекательнее. Давайте начнём с меню.
Первое что мы сделали, чтобы меню выглядело лучше, удалили маркеры, установив атрибут list-style:none, а также установили внутренние и внешние отступы, так как по умолчанию в разных броузерах они сильно различаются.
Обратите внимание, что затем мы указали чтобы ссылки отбражадись как блочные элементы. Теперь, при выводе, они растягиваются по всей ширине элемента в котором они расположены.
Другая интересная вещь, которую мы использовали для меню – это псевдо-классы :before и :after. Они позволяют вам добавить что-нибудь перед и после элемента. Это хороший способ добавлять иконки или символы, такие как стрелочка в конце каждой ссылки. Такой трюк не работает в Internet Explorer 7 и ниже.
Шаг 4
Ну и самое последнее, мы добавим в наш дизайн кое-какие втили для ещё большей красоты.
В этих стилях мы устанавливаем закруглённые углы для элемента #centered. В CSS3, за это будет отвечать свойство border-radius. Это пока что не реализовано некоторыми броузерами, разве только использовать приставки -moz и -webkit для Mozilla Firefox и Safari/Webkit.
Совместимость
Как вы уже наверное предположили, основной источник проблем совместимости – Internet Explorer:
- Элементу #floater обязательно надо установить ширину
- В IE 6 лишние отступы вокруг меню
Выравнивание по центру в CSS
Сегодня хочется рассмотреть очень важную тему — выравнивание элементов по горизонтали и вертикали.
Изучим текущее положение дел.
Итак, мы видим, что у нас есть блочный элемент, растягивающийся по ширине на всю страницу, а внутри дочерний строковый span. У обоих элементов по-умолчанию position: static, значит они находятся в потоке.
Выравнивание по горизонтали
С выравниванием по горизонтали проблем обычно нет. В данном случае дочерний элемент строковый, значит мы можем выровнять все текстовое содержимое дива с помощью text-align: center. В том случае, если бы он был строчно-блоковый, можно было бы воспользоваться тем же методом.
А что если бы наш дочерний элемент был бы блочным с заданной шириной? Видим, что на блочное содержимое text-align не действует:
Если мы не зададим ширину, то текст отцентрируется, но лишь потому что элемент займет всю ширину, а нам обычно нужно центрирование самого блока.
В данном случае мы можем прибегнуть к margin: auto. Браузер автоматический определит отступы нашего дочернего элемента со всех сторон. Но посмотрите по вертикали элемент не отцентрировался. Потому что margin-top и margin-bottom приводятся автоматом к 0.
Выравнивание по вертикали
Что же нам делать с вертикальным выравниванием?
Рассматриваем известные. Мы знаем высоту родительского элемента, к тому же дочерний элемент — одна строка. Значит можем задать ей высоту:
line-height: 200px;
Ровно столько сколько высота родительского элемента. Так как текст в span встает по центру строки, мы его так отцентрируем.
Аналогично line-height сработает и для строчного дочернего элемента.
Однако, для нескольких строк такой вариант не сработает.
Для наглядности покрасим наш родительский элемент. И можно вспомнить про position: absolute.
Для начала нужно позиционировать родительский элемент, чтобы отсчитывать отступы дочернего относительно него. Ставим в div position: relative.
Далее позиционируем дочерний абсолютно, задаем отступ сверху 50%. Однако, в данном случае по центру у нас будет вершина дочернего элемента. Ставим margint-top равный половине высоты дочернего элемента. В случае с одной строкой эта высота равна line-height.
Отлично, все работает. Разве что перестал работать margin: auto для выравнивания по горизонтали, так как при абсолютном позиционировании margin рассчитывается только если задано расстояние элемента от родительского позиционированного для данной стороны. Т.е. для того, чтобы работал margin: auto для левой и правой стороны, нам нужно задать left и right.
А теперь давайте забудет про абсолютное позиционирование. И попробуем другие способы. Например, мы может воспользоваться свойством display: table. Правда, как у любой таблицы, ширина родительского элемента теперь рассчитывается по содержимому. Зато нам не требуется знание высоты дочернего элемента, как в случаей с абсолютным позиционированием.
Кстати, если дочерний элемент инлайновый и известна высота родителя, то мы можем использовать vertical-align: middle.
И наконец, в том случае если мы хотим отцентрировать строчно-блочный элемент и нам не известна ни высота родителя, ни высота дочернего элемента, то можно воспользоваться дополнительным элементом.
Почему это работает? Сначала следует сказать,что строчно-блочные элементы выстраиваются в линию, которая заключена в так называемую box-line. Высота коробки зависит от высоты содержимого. Внутри коробки есть базовая линия, на которой располагается строковое содержимое инлайн элемента. Положение этой линии может меняться в зависимости от значения vertical-align любого инлайн элемента, входящего в box-line.
Мы хотим выровнять относительно родительского элемента, значит нужно назначить дочернему его высоту. Мы не можем нашему дочернему поставить такую высоту, ведь он нам нужен не на весь родительский. Тогда мы используем дополнительный элемент. Он невидим, если мы, проставим для него только высоту. Но он меняет положение базовой линии для всей строки. Поэтому аналогично выравнится и исходный элемент.
Еще, конечно, можно воспользоваться flex: justify-content устанавливает выравнивание по горизонтали, а align-items по вертикали. Но обратите внимание на поддержку браузерами.
Полезные статьи
Vertical-Align: All You Need To Know
A Complete Guide to Flexbox
Выравнивание элементов во Flex контейнере — CSS
Одной из причин быстрого роста популярности flexbox среди веб-разработчиков было то, что впервые были предоставлены адекватные возможности выравнивания. Он предоставил адекватное вертикальное выравнивание, и стало возможным, наконец, легко поместить элемент в центр по вертикали. В этом руководстве детально рассматривается, как выравнивание и распределение работают во Flexbox.
Для центрирования элемента по перекрёстной оси (в данном случае — вертикальной) используется свойство align-items
. Для центрирования элемента по главной оси (в данном случае — горизонтально), используется свойство justify-content
.
На примере ниже можно изменить размер контейнера или вложенного элемента, но элемент всегда останется по центру.
В этом руководстве рассматриваются следующие свойства:
justify-content
— управляет выравниванием элементов по главной оси.align-items
— управляет выравниванием элементов по перекрёстной оси.align-self
— управляет выравниванием конкретного flex элемента по перекрёстной оси.align-content
— описывается в спецификации как “упаковка flex строк”; управляет промежутками между flex строками по перекрёстной оси.
Также будет рассмотрены авто-отступы для выравнивания элементов во flexbox.
Замечание: Свойства выравнивания во Flexbox помещены в отдельную спецификацию — CSS Box Alignment Level 3. Ожидается, что данная спецификация в конце концов заменит свойства, определённые во Flexbox Level One.
Свойства align-items
и align-self
управляют выравниванием flex элементов по перекрёстной оси: вертикальной для flex-direction
установленным в row,
и горизонтальной для flex-direction
установленным в column
.
Рассмотрим выравнивание по перекрёстной оси на простейшем примере. Если установить display: flex
у контейнера, все дочерние элементы становятся flex элементами, выстроенными в ряд. Все они по вертикали примут размер самого высокого элемента, который станет определяющим вертикального размера. Если у flex контейнера задана высота, то все элементы растянутся до высоты контейнера, независимо от размера содержимого.
Все элементы становятся одной высоты, т.к. по умолчанию свойство align-items
имеет значение stretch
.
Другие возможные значения свойства:
align-items: flex-start
align-items: flex-end
align-items: center
align-items: stretch
align-items: baseline
В примере ниже значение свойств align-items
установлено в stretch
. Попробуйте другие значения для понимания их действия.
Выравнивание одного элемента при помощи
align-self
Свойство align-items
устанавливает align-self
для всех flex элементов как для группы. Это означает, что можно явно указать значение align-self
для конкретного элемента. Свойство align-self
может принимать все те же значения, что и свойство align-items,
а так же значение auto
, которое сбросит значение, установленное в flex контейнере.
В следующем примере, у flex контейнера установлено align-items: flex-start
, означающее, что все элементы будут выравнены по началу перекрёстной оси. У первого элемента с помощью first-child
селектора установлено align-items: stretch
; у следующего элемента с классом selected
установлено align-self:
center
. Можно изменять значение align-items
на контейнере или align-self
на элементе для изучения их работы.8н
Изменение основной оси
До сего момента мы изучали поведение при flex-direction
установленном в row
, в языке, использующем написание сверху вниз. Это означает, что основная ось идёт горизонтально, а выравнивание по перекрёстной оси сдвигает элементы вверх или вниз.
Если изменить flex-direction
на column, align-items
и align-self
будут сдвигать элементы влево или вправо.
Можно попробовать пример ниже, где установлено flex-direction: column
.
До сих пор мы выравнивали элементы внутри flex-контейнера. Если содержимое вашего flex контейнера переносится на несколько строк, используйте свойство align-content
для управления свободным пространством между строками. В спецификации это описано как упаковка flex-строк.
Чтобы свойство align-content
работало, необходимо, чтобы в flex-контейнере было больше места, что требуется для отображения всего содержимого. Оно применяется ко всем элементам как группе, и управляет распределением свободного места и положением всей группы элементов внутри контейнера.
Свойство align-content
принимает следующие значения:
align-content: flex-start
align-content: flex-end
align-content: center
align-content: space-between
align-content: space-around
align-content: stretch
align-content: space-evenly
(не описано в спецификации Flexbox)
В примере ниже flex контейнер имеет высоту 400 пикселей — больше, чем необходимо для отображения всех элементов. Значение align-content
установлено в space-between
, означающее, что свободное пространство разделено между строками, расположенными вплотную к началу и концу контейнера по перекрёстной оси.
Попробуйте другие значения align-content
для понимания принципа их работы.
Также можно сменить значение flex-direction
на column
и увидеть, как наше свойство работает в режиме колонок. Как и ранее, что увидеть работу свойства, у контейнера должно быть больше свободного места, чем требуется содержимому.
Замечание: значение space-evenly
не определено в спецификации flexbox и добавлено позже в спецификацию Box Alignment. Поддержка браузерами этого значение не так широка, как значений определённым в спецификации flexbox.
В документации по justify-content
на MDN приведено больше деталей о всех значениях и поддержке браузерами.
Теперь, когда мы увидели, как работает выравнивание по перекрёстной оси, можно посмотреть на главную ось. Здесь нам доступно только одно свойство — justify-content
. Это обусловлено тем, что с элементами на главной оси мы работаем только как с группой. Используя свойство justify-content
, мы контролируем, что происходит со свободным пространством на главной оси, и требуется ли нам больше пространства, чем нужно для отображения наших элементов.
В нашем первом примере с использованием свойства display: flex
, примененным к контейнеру, элементы отображаются как строка и выстраиваются в начале блока. Это обусловлено тем, что свойство justify-content
имеет начальное значение flex-start
. Все свободное место располагается в конце контейнера.
Свойство justify-content
может принимать те же самые значения, что и align-content
.
justify-content: flex-start
justify-content: flex-end
justify-content: center
justify-content: space-between
justify-content: space-around
justify-content: stretch
justify-content: space-evenly
(не определено в спецификации Flexbox)
В примере ниже, свойству justify-content
задано значение space-between
. Все доступное пространство распределяется между элементами после их позиционирования в контейнере. Первый и последний элементы занимают положения в начале и в конце контейнера соответственно.
Если свойство flex-direction
имеет значение column
, то свойство justify-content
распределит доступное пространство в контейнере между элементами.
Выравнивание и режим записи
Необходимо помнить, что при использовании свойств flex-start
иflex-end
элементы позиционируются в режиме записи. Если свойству justify-content
задано значение start
и стоит режим записи left-to-right (слева-направо), как в английском, то элементы выравниваются, начиная с левой стороны контейнера.
Однако, если задан режим записи right-to-left (справа-налево), как в арабском языке, то элементы будут выстраиваться с правой стороны контейнера.
В примере ниже свойству property
задано значение rtl
, которое изменяет порядок наших элементов. Вы можете удалить это свойство или изменить значение свойства justify-content
, чтобы увидеть, как работает flexbox, когда отображение элементов начинается справа.
Начальное положение элементов поменяется, если вы измените значение свойства flex-direction
— например установите row-reverse
вместо row
.
В следующем примере заданы следующие свойства: flex-direction: row-reverse
и justify-content: flex-end
. В языках с параметром записи ltr
все элементы будут отображаться с левой стороны. Попробуйте изменить свойство flex-direction: row-reverse
на flex-direction: row
. Вы увидите, что теперь элементы отображаются реверсивно.
Может показаться немного запутанным, но главное правило, которое необходимо запомнить – до тех пор, пока вы не измените свойство flex-direction
, элементы контейнера выстраиваются в режиме записи вашего языка (ltr
или rtl
).
Вы можете сделать отображение элементов контейнера блочным, задав свойству flex-direction
значение column
. Свойство flex-start
будет отображать элементы в столбец сверху вниз. Таким образом, первый элемент будет первым параграфом.
Если вы зададите свойству flex-direction
реверсивное значение, то элементы будут позиционироваться в обратном порядке. Так, свойство flex-start
будет брать начало в конце контейнера. Первый элемент будет находится в конце строки, если задано строчное отображение элементов или в конце параграфа, если задано блочное отображение.
Так как элементы, расположенные на главной оси, обрабатываются как группа, свойства justify-items
или justify-self
становятся недоступными. Тем не менее, существует способ отделить конкретный элемент или группу элементов от остальных, используя внешний отступ margin
со значением auto
.
Распространённый пример — панель навигации, в которой отдельные важные элементы выровнены по правому краю, а основная группа элементов — по левому.
На первый взгляд может показаться, что этот пример использования свойства justify-self
. Однако, рассмотрим следующий ниже пример. Имеется три элемента с одной стороны и два — с другой. Если бы мы могли использовать justify-self
на элементе d, это также изменило бы выравнивание следующего элемента — e, что может противоречить первоначальному замыслу.
Вместо этого мы можем выбрать четвёртый элемент (d) и отделить его от первых трёх, задав ему значение auto
для margin-left
. Авто-margin заполнит всё доступное свободное место по своей оси. Тем же образом работает margin-right
. Оба свойства со значениями auto
отцентрируют блок, так как каждый из отступов будет пытаться занять максимум пространства.
В интерактивном примере ниже у нас имеется простой ряд из флекс-элементов и класс push
с заданным margin-left: auto
. Вы можете, например, попробовать удалить это значение или добавить класс другому элементу, чтобы увидеть, как работает этот метод.
В начале этой статьи объясняется, что свойства выравнивания, которые в настоящее время содержатся в спецификации Flexbox Level 1, также включены в спецификацию Box Alignment Level 3, которая в дальнейшем может расширить эти свойства и значения. Мы уже видели, как это произошло с введением значения space-evenly
для свойств align-content
и justify-content
.
Выравнивание во Flexbox также включает в себя другие методы создания пространства между элементами, такие как column-gap
and row-gap
, как показано в макете CSS Grid Layout. Включение этих свойств в Box Alignment означает, что в будущем мы также сможем использовать column-gap
и row-gap
во Flexbox разметке. Это означает, что вам не нужно будет использовать отступы, чтобы создать пространство между элементами.
Мое предложение заключается в том, чтобы при изучении выравнивания во Flexbox, делать это параллельно с выравниванием в Grid Layout. В обеих спецификациях используются свойства выравнивания, подобные Flexbox. Вы можете видеть, как эти свойства ведут себя при работе с сеткой в статье Box Alignment in Grid Layout, а также рассмотреть как выравнивание работает в этих спецификациях в статье Box Alignment Cheatsheet.
Смотрите Также
- Выравнивание Коробки
- Выравнивание Коробки в Flexbox (Гибкая Коробка)
- Выравнивание Коробки в Grid Layout (Макет Сетки)
Как выровнять текст по вертикали или горизонтали в Microsoft Word
Microsoft Word оснащен инструментом, который позволяет пользователям выравнивать текст по вертикали и по горизонтали, предоставляя Вам полную свободу для определения положения текста в документе Word. Вот как это все работает.
Выравнивание текста по горизонтали в Word
Горизонтальное выравнивание, также известное как центрирование, размещает текст по центру страницы. Этот инструмент также позволяет Вам применить форматирование только к выделенному фрагменту текста, давая Вам больше контроля над тем, что Вы можете сделать с документом.
Чтобы выровнять текст по горизонтали на странице, выделите текст, который Вы хотите центрировать. Затем щелкните значок «По центру» в группе «Абзац» на вкладке «Главная». Кроме того, Вы можете использовать сочетание клавиш Ctrl + E.
Ваш текст теперь будет выровнен по горизонтали. Если текст еще не напечатан, можно также выбрать вариант выравнивания по центру перед вводом текста.
Выравнивание текста по вертикали в Word
Как Вы уже, наверное, догадались, вертикальное выравнивание размещает текст равномерно между верхним и нижним полями страницы. Вы не заметите разницы в выравнивании текста, если будете использовать его на странице, которая уже содержит много текста.
Чтобы увидеть реальные различия, попробуйте включить горизонтальный текст, прежде чем вводить текст в документ.
Чтобы выровнять текст по вертикали на странице, перейдите на вкладку «Макет» и выберите маленький значок в правом нижнем углу группы «Параметры страницы».
Откроется диалоговое окно «Параметры страницы». Выберите вкладку «Источник бумаги», а затем нажмите стрелку рядом с «Вертикальное выравнивание» в разделе «Страница». Появится выбор вариантов вертикального выравнивания. Нажмите «По центру» (или выберите другой вариант, который лучше соответствует Вашим требованиям).
Ваш текст теперь будет отражать выбранный вариант вертикального выравнивания.
Что если нужно выровнять определенный текст в документе только по вертикали? Есть также простой способ сделать это.
Сначала выделите текст, который Вы хотите выровнять по вертикали. После выбора вернитесь на вкладку «Источник бумаги» диалогового окна «Параметры страницы». Затем выберите нужный тип вертикального выравнивания, откройте раскрывающееся меню рядом с «Применить», выберите «к выделенному тексту», а затем нажмите кнопку «ОК».
Выбранный текст теперь будет отражать выбранный вариант вертикального выравнивания.
Как выровнять HTML изображение по центру
Позиционирование и выравнивание изображений на странице HTML имеет решающее значение для макета страницы. Один из наиболее распространенных вопросов — как выровнять изображение по центру определенной секции. В этой статье мы обсудим множество возможных способов размещения изображений в центре заданной области.
В примерах данной статьи, чтобы сделать видимой границу оберточных элементов, мы сделаем их серого цвета. Итак, приступим.
Центрирование в параграфе
В первом примере мы покажем, как разместить изображение в центре элемента-контейнера, которым может быть элемент div, элемент параграфа и другие теги.
<p>
<img src="//msiter.ru/image.jpg" alt="изображение в центре параграфа" />
</p>
<style>
.aligncenter {
text-align: center;
}
</style>
Здесь всю работу делает CSS свойство text-align: center;. Если вы знаете код CSS, то вам ничего не нужно объяснять.
Центрирование при помощи отступов
Чтобы отцентрировать блоковый элемент, достаточно применить к нему стиль margin: auto;. Но известно, что тег img – это строковый элемент. Как же быть? Все очень просто. Чтобы все заработало, нужно сделать его блоковым применив CSS стиль display: block;.
<div>
<img src="//msiter.ru/image.jpg" alt="отцентрированное изображение" />
</div>
<style>
.marginauto {
margin: 10px auto 20px;
display: block;
}
</style>
Центрирование при помощи тега <center>
Следует помнить, что тег <center> является устаревшим и не поддерживается в HTML5. Однако он все еще распознается веб-браузерами вроде Google Chrome.
Раньше это был предпочтительный метод, потому что он не требовал таблиц стилей, а только простой HTML.
Нам не хотелось бы использовать устаревшие элементы в статье, поэтому здесь нет демонстрации этого примера, только код.
<center>
<img src="//msiter.ru/image.jpg" alt="отцентрированное изображение" />
</center>
Центрирование при помощи атрибута align=middle
Еще один устаревший метод, который не требует использования CSS, похожий на предыдущий пример. В более старых версиях HTML мы могли центрировать изображение, устанавливая атрибут тега align=»middle».
<img align="middle" src="//msiter.ru/image.jpg" alt="отцентрированное изображение" />
Выравнивание изображения по центру по вертикали
Выше мы обсуждали, как выровнять изображение по горизонтали, но могут быть случаи, когда вам нужно центрировать его по вертикали.
Для этого нам нужно сделать два шага. Оберточный элемент должен отображаться как ячейка таблицы, а выравнивание по вертикали должно быть установлено на середину. В нашем примере мы устанавливаем фиксированную высоту для контейнера, чтобы убедиться, что он выше, чем наша картинка.
<div>
<img src="//msiter.ru/image.jpg" alt="отцентрированное изображение" />
</div>
<style>
.verticalcenter {
display: table-cell;
height: 400px;
vertical-align: middle;
}
</style>
Одновременное центрирование по горизонтали и по вертикали
Мы можем комбинировать горизонтальное и вертикальное выравнивание, как показано в примере ниже.
<div>
<img src="//msiter.ru/image.jpg" alt="отцентрированное изображение" />
</div>
<style>
.verticalhorizontal {
display: table-cell;
height: 300px;
text-align: center;
width: 300px;
vertical-align: middle;
}
</style>
Надеемся, что сегодня, прочитав эту статью, вы узнали что-то новое, и вы будете использовать полученные знания при разработке своих сайтов.
vertical-align — CSS: каскадные таблицы стилей
Свойство CSS vertical-align
устанавливает вертикальное выравнивание встроенного блока, блока встроенного блока или ячейки таблицы.
Исходный код этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, клонируйте https://github.com/mdn/interactive-examples и отправьте нам запрос на перенос.
Свойство vertical-align можно использовать в двух контекстах:
- Для вертикального выравнивания прямоугольника встроенного элемента внутри содержащего его линейного поля.Например, его можно использовать для вертикального расположения
вверху:
в центре:
внизу:
супер:
sub:
text-top:
нижний текст:
0.2em:
-1em:
20%:
-100%:
# * {
размер коробки: рамка-рамка;
}
img {
маржа-право: 0.5em;
}
п {
высота: 3em;
заполнение: 0,5 эм;
семейство шрифтов: моноширинный;
оформление текста: подчеркивание над чертой;
маржа слева: авто;
маржа-право: авто;
ширина: 80%;
}
- Для вертикального выравнивания содержимого ячейки в таблице:
<таблица>
базовый уровень
вверх
средний
снизу
Существует теория, согласно которой, если кто-нибудь когда-нибудь узнает, для чего именно Вселенная и почему она существует, она мгновенно исчезнет и будет заменена чем-то еще более причудливым и необъяснимым.
Есть еще одна теория, согласно которой это уже произошло.
стол {
маржа слева: авто;
маржа-право: авто;
ширина: 80%;
}
table, th, td {
граница: сплошной черный 1px;
}
td {
заполнение: 0.5em;
семейство шрифтов: моноширинный;
}
Обратите внимание, что vertical-align
применяется только к элементам inline, inline-block и table-cell: вы не можете использовать его для вертикального выравнивания элементов уровня блока.
вертикальное выравнивание: базовая линия;
вертикальное выравнивание: суб;
вертикальное выравнивание: супер;
вертикальное выравнивание: текст сверху;
вертикальное выравнивание: нижний текст;
вертикальное выравнивание: по центру;
вертикальное выравнивание: сверху;
вертикальное выравнивание: снизу;
вертикальное выравнивание: 10em;
вертикальное выравнивание: 4 пикселя;
вертикальное выравнивание: 20%;
вертикальное выравнивание: наследование;
вертикальное выравнивание: начальное;
вертикальное выравнивание: отключено;
Свойство vertical-align
указано как одно из значений, перечисленных ниже.
Значения для встроенных элементов
Родительские значения
Эти значения выравнивают элемент по вертикали относительно его родительского элемента:
-
базовый
- Выравнивает базовую линию элемента с базовой линией его родительского элемента.Базовая линия некоторых заменяемых элементов, таких как
, не указана в спецификации HTML, а это означает, что их поведение с этим ключевым словом может различаться в разных браузерах.
-
переходник
- Выравнивает базовую линию элемента с базовой линией нижнего индекса его родительского элемента.
-
супер
- Выравнивает базовую линию элемента с верхним индексом его родительского элемента.
-
текст вверху
- Выравнивает верх элемента по верхнему краю шрифта родительского элемента.
-
текст внизу
- Выравнивает нижнюю часть элемента по нижней части шрифта родительского элемента.
-
средний
- Выравнивает середину элемента по базовой линии плюс половину высоты родительского элемента по оси x.
-
<длина>
- Выравнивает базовую линию элемента по заданной длине над базовой линией его родительского элемента. Допускается отрицательное значение.
-
<процент>
- Выравнивает базовую линию элемента по заданному проценту над базовой линией его родительского элемента, при этом значение представляет собой процентное значение свойства
line-height
.Допускается отрицательное значение.
Относительные значения линии
Следующие значения выравнивают элемент по вертикали относительно всей линии:
-
верхняя
- Выравнивает верх элемента и его потомков с верхом всей строки.
-
нижний
- Выравнивает нижнюю часть элемента и его потомков по нижней части всей строки.
Для элементов, не имеющих базовой линии, вместо этого используется край нижнего поля.
Значения для ячеек таблицы
-
baseline
(иsub
,super
,text-top
,text-bottom
, - Выравнивает базовую линию ячейки с базовой линией всех других ячеек в строке, которые выровнены по базовой линии.
-
верхняя
- Выравнивает верхний край заполнения ячейки с верхней частью строки.
-
средний
- Центрирует поле заполнения ячейки в строке.
-
нижний
- Выравнивает нижний край заполнения ячейки с нижней частью строки.
Допускаются отрицательные значения.
Базовый пример
HTML
Изображение с выравниванием по умолчанию.
Изображение с выравниванием по верхнему краю текста.
Изображение с выравниванием текста по нижнему краю.
Изображение со средним выравниванием.
CSS
img.top {vertical-align: text-top; }
img.bottom {вертикальное выравнивание: нижний текст; }
img.middle {вертикальное выравнивание: середина; }
Результат
Таблицы BCD загружаются только в браузере
Центрирование в CSS: Полное руководство
Иногда строчные / текстовые элементы могут отображаться вертикально по центру только потому, что над и под ними есть равные отступы.
.link {
padding-top: 30 пикселей;
padding-bottom: 30 пикселей;
}
См. Перо с вертикальным центрированием текста Криса Койера (@chriscoyier) на CodePen.
Если заполнение по какой-то причине не подходит, и вы пытаетесь центрировать какой-то текст, который, как вы знаете, не будет переноситься, есть уловка, сделав высоту строки
равной высоте по центру
текста .
.center-text-trick {
высота: 100 пикселей;
высота строки: 100 пикселей;
белое пространство: nowrap;
}
См. Pen Centering a line with line-height, автор Chris Coyier (@chriscoyier) на CodePen.
Равное заполнение сверху и снизу может дать эффект центрирования для нескольких строк текста, но если это не сработает, возможно, элемент, в котором находится текст, может быть ячейкой таблицы, буквально или настроен так, чтобы вести себя как одна с CSS. В этом случае свойство vertical-align
обрабатывает это, в отличие от того, что обычно делает, когда обрабатывает выравнивание элементов, выровненных по строке. (Подробнее об этом.)
См. Текст «Центрирование пера» (вроде) с помощью Padding Криса Койера (@chriscoyier) на CodePen.
Если что-то похожее на таблицу отсутствует, возможно, вы могли бы использовать flexbox? Один гибкий дочерний элемент может быть довольно легко центрирован в гибком родительском элементе.
.flex-center-вертикально {
дисплей: гибкий;
justify-content: center;
flex-direction: столбец;
высота: 400 пикселей;
}
См. Перо с вертикальным центром в нескольких строках текста с помощью Flexbox от Криса Койера (@chriscoyier) на CodePen.
Помните, что это действительно важно, только если родительский контейнер имеет фиксированную высоту (px,% и т. Д.), Поэтому контейнер здесь имеет высоту.
Если оба этих метода отсутствуют, вы можете использовать технику «призрачного элемента», при которой псевдоэлемент во всю высоту помещается внутри контейнера, и текст выравнивается по вертикали с ним.
.ghost-center {
положение: относительное;
}
.ghost-center :: before {
содержание: " ";
дисплей: встроенный блок;
высота: 100%;
ширина: 1%;
вертикальное выравнивание: по центру;
}
.ghost-center p {
дисплей: встроенный блок;
вертикальное выравнивание: по центру;
}
См. Многострочный текст Pen Ghost Centering от Криса Койера (@chriscoyier) на CodePen.
html — Как мне вертикально выровнять текст в div?
Есть несколько уловок для отображения содержимого или изображения в центре div. Некоторые ответы действительно хороши, и я тоже полностью согласен с ними.
Абсолютное горизонтальное и вертикальное центрирование в CSS
http://www.css-jquery-design.com/2013/12/css-techniques-absolute-horizontal-and-vertical-centering-in-css/
Имеется более 10 методик с примерами. Теперь вам решать, что вы предпочитаете.
Без сомнения, дисплей: стол; display: table-Cell
— лучший трюк.
Вот несколько хороших приемов:
Уловка 1 — Используя дисплей : таблица; дисплей: таблица-ячейка
HTML
СОДЕРЖАНИЕ
Код CSS
.Центр-контейнер.is-Table {display: table; }
.is-Table .Table-Cell {
дисплей: таблица-ячейка;
вертикальное выравнивание: по центру;
}
.is-Table .Center-Block {
ширина: 50%;
маржа: 0 авто;
}
Уловка 2 — Используя дисплей : встроенный блок
HTML
СОДЕРЖАНИЕ
Код CSS
.Center-Container.is-Inline {
выравнивание текста: центр;
перелив: авто;
}
.Center-Container.is-Inline: после,
.is-Inline .Center-Block {
дисплей: встроенный блок;
вертикальное выравнивание: по центру;
}
.Center-Container.is-Inline: после {
содержание: '';
высота: 100%;
маржа слева: -0,25em; / * Чтобы сместить интервал. Может отличаться в зависимости от шрифта * /
}
.is-Inline .Center-Block {
максимальная ширина: 99%; / * Предотвращает проблемы с длинным содержимым, заставляет блок содержимого перемещаться наверх * /
/ * max-width: calc (100% - 0,25em) / * Только для Internet & nbsp; Explorer 9+ * /
}
Уловка 3 — Используя положение: относительное; положение: абсолютное
АБСОЛЮТНЫЙ ЦЕНТР,
В КОНТЕЙНЕРЕ.
Этот блок абсолютно центрирован по горизонтали и вертикали внутри своего контейнера
Общие сведения о выравнивании по вертикали или «Как (не) центрировать содержимое по вертикали»
Часто задаваемые вопросы по различным каналам IRC, которым я помогаю: Как мне вертикально центрировать мои вещи внутри этой области?
За этим вопросом часто следует Я использую
vertical-align: middle
, но он не работает!
Проблема здесь тройная:
- HTML-макет традиционно не предназначен для определения вертикального поведения.По самой своей природе он масштабируется по ширине, и содержимое перетекает до соответствующей высоты в зависимости от доступной ширины. Традиционно горизонтальный размер и макет просты; вертикальный размер и макет были выведены из этого.
- Причина, по которой
vertical-align: middle
не выполняет то, что нужно, в том, что автор не понимает, что он должен делать, но … - … это потому, что спецификация CSS действительно облажалась (на мой взгляд) —
vertical-align
используется для указания двух совершенно разных вариантов поведения в зависимости от того, где он используется.
выравнивание по вертикали
в ячейках таблицы
При использовании в ячейках таблицы vertical-align
выполняет то, что большинство людей ожидает, а именно имитирует (старый, устаревший) атрибут valign
. В современном браузере, соответствующем стандартам, следующие три фрагмента кода делают то же самое:
, но вы никогда не должны использовать valign ->
...
...
Показанный в вашем браузере выше (с соответствующими оболочками) отображается как:
|
|
display: table-cell; вертикальное выравнивание: средний
display: table-cell; вертикальное выравнивание: снизу
с выравниванием по вертикали
на встроенных элементах
Однако, когда vertical-align
применяется к встроенным элементам, это совершенно новая игра.В этой ситуации он ведет себя так же, как (старый, устаревший) атрибут align
для элементов
. В современном браузере, соответствующем стандартам, следующие три фрагмента кода делают то же самое:
foo
bar
Вот как отображается приведенный выше код в вашем браузере:
В этом абзаце у меня есть два изображения — и — в качестве примеров.
В этом абзаце у меня есть два изображения — и — в качестве примеров.
В этом абзаце в качестве примера у меня есть симпатичный маленький
display: inline-block
vertical-align: middle и display: inline-block
vertical-align: text-bottom.
с выравниванием по вертикали
на других элементах
Технически, этот атрибут CSS не применяется ни к каким другим элементам. Когда начинающий разработчик применяет vertical-align
к обычным блочным элементам (например, стандартный
Итак, как
сделать Я что-то вертикально центрирую ?!
Если вы читаете эту страницу, вероятно, вас не слишком интересует, почему то, что вы делаете, неправильно. Вероятно, вы захотите узнать, как это сделать правильно.
Метод 1
В следующем примере делаются два (нетривиальных) предположения. Если вы можете выполнить эти предположения, то этот метод для вас:
- Вы можете поместить содержимое, которое вы хотите центрировать, внутри блока и указать фиксированную высоту для этого внутреннего блока содержимого.
- Абсолютное позиционирование этого контента — это нормально. (Обычно нормально, поскольку родительский элемент, внутри которого центрируется контент, все еще может находиться в потоке.
Если вы согласны с вышеуказанными потребностями, решение:
- Укажите родительский контейнер как
позиция: относительная
илипозиция: абсолютная
. - Укажите фиксированную высоту дочернего контейнера.
- Установите положение
: абсолютное
иtop: 50%
в дочернем контейнере, чтобы переместить верх вниз к середине родительского контейнера. - Установить
margin-top: -yy
, где yy — половина высоты дочернего контейнера для смещения элемента вверх.
Пример этого в коде:
...
Эй, смотрите! Я по центру вертикально!
Как это мило ?!
В вашем браузере приведенный выше пример отображается как:
Эй, смотрите! Я по центру вертикально!
Как это мило ?!
Метод 2
Этот метод требует, чтобы вы могли удовлетворить следующие условия:
- У вас есть только одна строка текста, которую вы хотите центрировать.
- Вы можете указать фиксированную высоту для родительского элемента.
Если вы согласны с вышеуказанными потребностями, решение:
- Установите высоту строки
Пример этого в коде:
...
Эй, это вертикально по центру.Ура!
В вашем браузере приведенный выше пример отображается как:
Эй, это вертикально по центру. Ура!
Авторские права © 2004 Гэвин Кистнер, все права защищены. Комментарии / предложения / пламя приветствуются.
HTML Center Text — Как CSS вертикальное выравнивание Div
В мире HTML и CSS все дело в структуре макета и распределении элементов. Обычно мы используем HTML для определения разметки и структуры, а CSS помогает нам обрабатывать стили и выравнивание элементов.
В этом посте мы немного узнаем о различных способах центрирования HTML-элементов и обработки вертикального выравнивания с помощью CSS.
Сначала мы научимся выравнивать текст с помощью CSS.
Далее мы рассмотрим, как выровнять div и любые другие элементы.
И, наконец, мы узнаем, как мы можем поместить текст и div
вместе в контейнер.
Как центрировать текст
Есть много способов центрировать текст с помощью CSS.
Использование свойства Float
Float — это простой способ выровнять текст.
Чтобы разместить текст в правой части макета, мы можем просто использовать right
как значение для float
.
Чтобы разместить текст слева, мы используем left
, например float: left
. Посмотрите на пример ниже:
.right {
float: right;
}
.оставили {
плыть налево;
}
// HTML
Вправо
Left
Чтобы центрировать текст с помощью float, мы можем использовать margin-left
или margin-right
и сделать его 50%
, как показано ниже.
.center {
плыть налево;
маржа слева: 50%;
}
/ * HTML * /
Центр
Подробнее об использовании Float
можно узнать здесь.
Использование выравнивания текста
выравнивания текста
— более удобный и более точный способ выравнивания текста. Это позволяет нам разместить текст в центре
или слева
или справа
стороне, как показано в следующем примере:
.верно {
выравнивание текста: вправо;
}
.оставили {
выравнивание текста: слева;
}
.center {
выравнивание текста: центр;
}
/ * HTML * /
Вправо
Центр
Влево
Подробнее о с выравниванием текста
.
Как выровнять
div
Что ж, есть много способов сделать это.
Точно так же, как мы используем Float
для выравнивания текста, мы можем также использовать его для выравнивания элемента div
.
Float
выполняет свою работу, но CSS дает нам лучшие варианты, более удобные и элегантные.Вы слышали о Flexbox
? Или css-сетку?
Что ж, эти два метода предоставляют очень современные способы согласования и работы с вашим макетом в CSS. Рассмотрим Flexbox подробнее.
Flexbox предлагает простой и понятный способ выровнять div
— и до сих пор это мой любимый метод обработки макетов в CSS (я использую его каждый день).
Давайте посмотрим, что мы сделали бы с Flexbox
, чтобы увидеть, как он работает, воссоздав тот же пример, что и выше.
Пример:
Код:
Flexbox
<стиль>
.container {
дисплей: гибкий;
}
.container div {
ширина: 33%;
высота: 60 пикселей;
}
.оставили {
фон: желтый;
}
.верно {
фон: красный;
}
.center {
фон: светло-голубой;
}
Левый div
div по центру
правый div
давайте разберемся
- Мы всегда определяем родительский элемент
div
, используяdisplay: flex
, чтобы применитьFlexbox
.Итак, мы делаем все дочерние элементы div внутри родительскогоdiv
доступными для обработки с использованием свойствFlexbox
. -
flex-direction
по умолчанию использует направлениеrow
, что означает, что элементы будут размещены вертикально внутри контейнера. - С помощью свойства
justify-content
мы можем выровнять дочерние элементыdiv
в разных направлениях, как в следующем примере:
.container {
дисплей: гибкий:
justify-content: center / * flex-start, flex-end, space-between, space-evenly, space-around и т. д. * /
}
-
justify-content: center
размещает элементы в центре контейнера. -
justify-content: flex-start
помещает элементы в начало контейнера слева. -
justify-content: flex-end
размещает элементы в конце контейнера с правой стороны. -
justify-content: space-around
заставляет элементы умещаться в контейнере и устанавливает равный промежуток между всеми элементами. -
justify-content: space-evenly
распределяет элементы в родительском контейнере одинаково с тем же пространством и одинаковой шириной.
Приведенный выше пример применим ко всем дочерним элементам как группе.
Представьте, что мы хотим выровнять один div
внутри контейнера. Мы всегда можем использовать align-self
для выравнивания одного элемента.
.container div {
align-self: center / * может иметь: flex-start или flex-end * /
}
Мы можем применить то же самое к тексту с Flexbox
, как в следующем примере:
<стиль>
.верно{
дисплей: гибкий;
выровнять элементы: гибкий конец;
flex-direction: столбец;
}
правый div
Это отличный твит Джулии Эванс, который иллюстрирует центрирование в CSS в целом:
Оригинальный твит здесь
Завершение
Есть много способов центрировать элементы в CSS.И со временем вы всегда будете узнавать что-то новое, когда будете практиковать все больше и больше.
Поэтому я рекомендую вам поработать с некоторыми примерами из того, что вы узнали сегодня, чтобы они остались неизменными.
AtoZ CSS Быстрый совет: как центрировать текст и значки по вертикали
Эта статья является частью нашей серии статей AtoZ CSS. Вы можете найти другие записи из этой серии здесь.
Вы можете просмотреть полную стенограмму и скринкаст для с вертикальным выравниванием
здесь.
Добро пожаловать в нашу серию AtoZ CSS! В этой серии статей я буду исследовать разные значения (и свойства) CSS, каждое из которых начинается с разной буквы алфавита.Мы знаем, что иногда скринкастов бывает недостаточно, поэтому в эту статью мы добавили быстрые советы о том, как центрировать текст и значки по вертикали.
V для вертикального центрирования текста и значков
В исходном видеоролике для свойства vertical-align
мы рассмотрели несколько методов центрирования элементов по вертикали. В этой статье мы расскажем о трех различных методах вертикального центрирования — то, что всегда было довольно сложно, но теперь сделать проще простого.
Используйте
line-height
для простого вертикального центрирования
Чтобы вертикально центрировать одну строку текста или значок внутри контейнера, мы можем использовать свойство line-height
. Это свойство управляет высотой
строки в серии текста и добавляет равное количество пространства над и под строковым блоком встроенных элементов. Если известна высота
контейнера, то установка line-height
того же значения будет вертикально центрировать дочерние элементы.
.container {
ширина: 200 пикселей;
высота: 200 пикселей;
высота строки: 200 пикселей;
}
Используйте положение
и преобразование
для гибкого вертикального центрирования
Метод line-height
, описанный выше, быстрый и грязный, но основан на фиксированной высоте. Я стараюсь избегать явной установки высоты
, поскольку это часто может ограничивать поток контента в адаптивном проекте. Этот метод недостаточно гибок, если вы работаете с элементами переменной или плавной высоты
.
Вместо этого мы можем комбинировать позицию
и переводы в вертикальный центр с переменной высотой элементов
. Например, чтобы вертикально центрировать элемент в пределах всей высоты
области просмотра, мы могли бы использовать следующий фрагмент:
.container {
положение: относительное;
мин-высота: 100vh;
}
.vertical-center {
позиция: абсолютная;
верх: 50%;
осталось: 50%;
преобразовать: перевести (-50%, - 50%);
}
Сначала мы создаем контекст позиционирования, устанавливая position: relative
для элемента контейнера.Это позволит нам расположить элемент .vertical-center
внутри его границ.
Затем мы помещаем верхний
левый
угол элемента, который будет центрирован в точном центре контейнера, располагая его верхний край
на 50% от верха
его родительского элемента и на 50% от осталось
от своего родителя.
Наконец, элемент смещается обратно в центр, перемещая его вверх на 50% от его высоты
и слева
на 50% от его ширины
.Теперь наш элемент расположен по центру контейнера по вертикали и горизонтали. Поскольку размещение выполняется с процентными значениями, относящимися к размеру элемента, при изменении ширины
или высоты
контейнера или дочернего элемента элемент останется по центру.
Используйте flexbox для вертикального центрирования
Приведенный выше метод отлично подходит для центрирования элементов с использованием традиционной прямоугольной модели и методов позиционирования. Он будет работать в IE9 +, но если вам нужно поддерживать только современные браузеры или IE10 +, вы можете добиться того же результата с гораздо меньшим количеством кода, используя flexbox.
Flexbox — это совершенно другой способ мышления о макете, но одна из его сильных сторон — это то, как он может выравнивать элементы в горизонтальном и вертикальном пространстве.
Чтобы центрировать элемент с помощью flexbox, мы можем использовать следующий фрагмент:
.container {
дисплей: гибкий;
justify-content: center;
align-items: center;
}
Этот компактный фрагмент кода превращает наш .container
в гибкий контейнер, который автоматически превращает его дочерние элементы в гибкие элементы.Затем эти гибкие элементы можно центрировать по горизонтали с помощью justify-content
и по вертикали с помощью align-items
.
Vertical Alignment — Tailwind CSS
Baseline
Используйте align-baseline
, чтобы выровнять базовую линию элемента с базовой линией его родительского элемента.
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
...
Top
Используйте align-top
, чтобы выровнять верх элемента и его потомков с верхом всей строки.
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
...
Middle
Используйте align-middle
, чтобы выровнять середину элемента с базовой линией плюс половину высоты x родительского элемента.
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
...
Bottom
Используйте align-bottom
, чтобы выровнять нижнюю часть элемента и его потомков с нижней частью всей строки.
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
...
Text Top
Используйте align-text-top
, чтобы выровнять верх элемента по верхнему краю шрифта родительского элемента.
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
...
Text Bottom
Используйте align-text-bottom
, чтобы выровнять нижнюю часть элемента по нижней части шрифта родительского элемента.
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
...
Адаптивный
Чтобы управлять вертикальным выравниванием только в определенной точке останова, добавьте префикс {screen}:
к любой существующей утилите вертикального выравнивания. Например, добавление класса md: align-top
к элементу приведет к применению утилиты align-top
при средних размерах экрана и выше.
...
Lorem ipsum dolor sit amet, conctetur adipisicing elit.
Для получения дополнительной информации о функциях адаптивного дизайна Tailwind ознакомьтесь с документацией по адаптивному дизайну.
Настройка
Варианты
По умолчанию для утилит вертикального выравнивания генерируются только адаптивные варианты.
Вы можете контролировать, какие варианты генерируются для утилит вертикального выравнивания, изменив свойство verticalAlign
в разделе вариантов
вашего попутного ветра .config.js
файл.
Например, эта конфигурация также будет генерировать варианты наведения и фокусировки:
module.exports = {
варианты: {
продлевать: {
+ verticalAlign: ['наведение', 'фокус'],
}
}
}
Если вы не планируете использовать утилиты вертикального выравнивания в своем проекте, вы можете полностью отключить их, установив для свойства verticalAlign
значение false
в разделе corePlugins
вашего файла конфигурации:
модуль.