Разбираемся с vertical-align — Веб-стандарты
«Опять vertical-align
не работает!» — вздохнёт веб-разработчик.
CSS-свойство vertical-align
— одно из тех, которые с виду очень просты, но могут вызвать вопросы у начинающих разработчиков. Я думаю, что даже у многих ветеранов CSS когда-то были проблемы с тем, чтобы его до конца понять.
В этой статье я постараюсь в понятной форме рассказать про это свойство.
Чего оно не делаетСкопировать ссылку
Распространенное заблуждение о vertical-align
состоит в том, что применяясь к одному элементу, оно заставляет все элементы внутри него изменить свою вертикальную позицию. Например, когда элементу задан vertical-align: top
, это подразумевает, что его содержимое поднимется к его же верхней границе.
Вспоминаются времена, когда мы делали раскладки на основе таблиц:
<td valign="top">
Что-нибудь…
</td>
В данном примере с ячейкой таблицы использование свойства valign
(в настоящее время исключенного из HTML5) приведёт к тому, что элементы внутри ячейки прижмутся к её верху. И естественно, когда верстальщики начинают использовать vertical-align
, они думают, что получится то же самое, и содержимое элемента выровняется в соответствии со значением свойства.
Но vertical-align
работает не так.
Чем оно является на самом делеСкопировать ссылку
Использование свойства vertical-align
может быть разбито на три простых для понимания правила:
- Оно применяется только к строчным элементам
inline
или строчным блокамinline-block
. - Оно влияет на выравнивание самого элемента, а не его содержимого (кроме случаев, когда применяется к ячейкам таблицы).
- Когда оно применяется к ячейке таблицы, выравнивание влияет на содержимое ячейки, а не на неё саму.
Иными словами, следующий код не даст никакого эффекта:
div {
vertical-align: middle; /* эта строка бесполезна */
}
Почему? Потому что <div>
— это не строчный элемент и даже не строчный блок. Конечно, если вы сделаете его строчным или строчным блоком, то применение vertical-align
даст желаемый эффект.
С другой стороны, при правильном применении (к строчному элементу или строчному блоку), свойство vertical-align
заставит текущий элемент выровняться относительно других строчных элементов.
Выше или ниже расположится элемент, будет зависеть от высоты строчных элементов на этой же строке или от свойства line-height
, заданного для неё.
Несколько картинокСкопировать ссылку
Вот картинка с пояснительным текстом, которая поможет вам понять, что происходит при вертикальном выравнивании строчных элементов:
А вот пример, в котором есть несколько строчных элементов, один из которых прижат к верху.
Ключевые словаСкопировать ссылку
Несколько ключевых слов, которые можно задавать в качестве значений для свойства vertical-align
:
baseline
, значение по умолчанию или «изначальное»bottom
middle
sub
super
text-bottom
text-top
top
Возможно, многие из них вы не будете использовать, но было бы неплохо знать все имеющиеся варианты. Например, на демо-странице, из-за того что значение vertical-align
для <input>
установлено как top
, он выровнен по самому высокому элементу в строке (большой картинке).
Однако если вы не хотите выравнивать элемент относительно картинок или других строчных элементов, обладающих блочными свойствами, вы можете выбрать значение text-top
или text-bottom
, тогда элементы будут выравниваться относительно текста в строке.
О ключевом слове
middle
Скопировать ссылку
К сожалению, правило vertical-align: middle
не выровняет строчный элемент по середине самого высокого элемента в строке (как вы, возможно, ожидали). Вместо этого значение middle
заставит элемент выровняться по середине высоты гипотетической строчной буквы «x» (так же называемой x-height). Потому, мне кажется, что это значение на самом деле должно называться text-middle
, чтобы стало понятно, какой будет результат.
Взгляните на пример, где я увеличил размер шрифта так, чтобы размер x-height стал гораздо больше. После этого станет понятно, что значение middle
не получится использовать очень часто.
Числовые значенияСкопировать ссылку
Возможно, вы не знали о том, что vertical-align
принимает числовые и процентные значения. Однако это так, и вот примеры их использования:
input {
vertical-align: 100px;
}
span {
vertical-align: 50%;
}
img {
vertical-align: -300px;
}
Несмотря на то, что вы можете прочитать в спецификации раздел, описывающий, какие есть ключевые слова и значения, я думаю, гораздо полезней будет самостоятельно поиграть с ними и сравнить результаты.
ЗаключениеСкопировать ссылку
Если в одной фразе подводить итог о том, как использовать это традиционно неправильно понимаемое свойство, я бы сказал:
Свойство vertical-align
работает только со строчными элементами или строчными блоками и ячейками таблицы. В случае применения не к ячейкам таблицы, оно действует на сам элемент, а не на его содержимое.
vertical-align — CSS | MDN
Свойство CSS vertical-align
описывает вертикальное позиционирование строчных (inline), строчно-блочных (inline-block) элементов или ячеек таблицы (table-cell).
vertical-align: baseline;
vertical-align: sub;
vertical-align: super;
vertical-align: text-top;
vertical-align: text-bottom;
vertical-align: middle;
vertical-align: top;
vertical-align: bottom;
vertical-align: 10em;
vertical-align: 4px;
vertical-align: 20%;
vertical-align: inherit;
vertical-align: initial;
vertical-align: unset;
Свойство vertical-align
может использоваться в двух контекстах:
- Для вертикального позиционирования области строчного элемента внутри области содержащей его строки. Например, с помощью него можно вертикально позиционировать
<img>
в строке текста:
<p>
top:<img src="https://mdn.mozillademos.org/files/15189/star.png"/>
middle:<img src="https://mdn.mozillademos.org/files/15189/star.png"/>
bottom:<img src="https://mdn.mozillademos.org/files/15189/star.png"/>
super:<img src="https://mdn.mozillademos.org/files/15189/star.png"/>
sub:<img src="https://mdn.mozillademos.org/files/15189/star.png"/>
</p>
<p>
text-top:<img src="https://mdn.mozillademos.org/files/15189/star.png"/>
text-bottom:<img src="https://mdn.mozillademos.org/files/15189/star.png"/>
0.2em:<img src="https://mdn.mozillademos.org/files/15189/star.png"/>
-1em:<img src="https://mdn.mozillademos.org/files/15189/star.png"/>
20%:<img src="https://mdn.mozillademos.org/files/15189/star.png"/>
-100%:<img src="https://mdn.mozillademos.org/files/15189/star.png"/>
</p>
#* {
box-sizing: border-box;
}
img {
margin-right: 0.5em;
}
p {
height: 3em;
padding: 0 .5em;
font-family: monospace;
text-decoration: underline overline;
margin-left: auto;
margin-right: auto;
width: 80%;
}
- Для вертикального позиционирования содержимого ячейки таблицы:
<table>
<tr>
<td>baseline</td>
<td>top</td>
<td>middle</td>
<td>bottom</td>
<td>
<p>Существует теория, которая утверждает, что если однажды кто-нибудь доподлинно выяснит, что такое и для чего нужна Вселенная, она тотчас же исчезнет, и вместо неё появится нечто ещё более причудливое и необъяснимое.</p>
<p>Существует и другая теория, согласно которой это уже случилось.</p>
table {
margin-left: auto;
margin-right: auto;
width: 80%;
}
table, th, td {
border: 1px solid black;
}
td {
padding: 0.5em;
font-family: monospace;
}
Обратите внимание: свойство vertical-align применяется только к строчным элементам и элементам ячеек таблицы: его нельзя использовать для вертикального позиционирования блочных элементов.
Свойство vertical-align
задаётся одним из ключевых значений, указанных ниже.
Значения для строчных элементов
Значения относительно родительского элемента
Данные значения позиционируют элемент по вертикали относительно родительского элемента:
baseline
- Выравнивает базовую линию элемента с базовой линией родительского элемента. Базовая линия некоторых замещаемых элементов (en-US), таких как <textarea> (en-US), не описана в спецификации HTML, что означает, что их поведение при указании данного ключевого слова может отличаться в зависимости от браузера.
sub
- Выравнивает базовую линию элемента с базовой линией подстрочного индекса своего родителя.
super
- Выравнивает базовую линию элемента с базовой линией надстрочного индекса своего родителя.
text-top
- Выравнивает верхний край элемента с верхним краем шрифта родительского элемента.
text-bottom
- Выравнивает нижний край элемента с нижним краем шрифта родительского элемента.
middle
- Выравнивает середину элемента с базовой линией своего родителя плюс половина от его высоты (x-height).
<length>
- Поднимает базовую линию элемента на указанную величину над базовой линией родительского элемента. Допустимы отрицательные значения.
<percentage>
- Поднимает базовую линию элемента на указанную в процентах величину (вычисляется относительно значения свойства
line-height
) над базовой линией родительского элемента. Допустимы отрицательные значения.
Значения относительно строки
Следующие значения позиционируют элемент по вертикали относительно всей строки:
top
- Выравнивает верхний край элемента и его потомков с верхним краем всей строки.
bottom
- Выравнивает нижний край элемента и его потомков с нижним краем всей строки.
Для элементов, у которых нет базовой линии, вместо неё используется нижняя граница внешнего отступа (margin).
Значения для ячеек таблицы
baseline
(иsub
,super
,text-top
,text-bottom
,<length>
, и<percentage>
)- Выравнивает базовую линию ячейки с базовой линией всех остальных ячеек этой строки, которые выравнены относительно базовой линии.
top
- Выравнивает верхнюю границу внутреннего отступа (padding) ячейки с верхним краем строки таблицы.
middle
- Выравнивает внутреннее поле (padding box) ячейки по центру относительно строки таблицы.
bottom
- Выравнивает нижнюю границу внутреннего отступа (padding) ячейки с нижним краем строки таблицы.
Допустимы отрицательные значения.
Формальный синтаксис
HTML
<div>Изображение <img src="https://mdn.mozillademos.org/files/12245/frame_image.svg" alt="link" /> с выравниванием по умолчанию.</div>
<div>Изображение <img src="https://mdn.mozillademos.org/files/12245/frame_image.svg" alt="link" /> с выравниванием по верхнему краю.</div>
<div>Изображение <img src="https://mdn.mozillademos.org/files/12245/frame_image.svg" alt="link" /> с выравниванием по нижнему краю.</div>
<div>Изображение <img src="https://mdn.mozillademos.org/files/12245/frame_image.svg" alt="link" /> с выравниванием по центру.</div>
CSS
img.top { vertical-align: text-top; }
img.bottom { vertical-align: text-bottom; }
img.middle { vertical-align: middle; }
Результат
BCD tables only load in the browser
Vertical Centering in CSS
Yuhu’s Definitive Solution with Unknown Height
Though there is a CSS property vertical-align, it doesn’t work like attribute
valign in HTML tables. CSS property vertical-align doesn’t seem to be able to
solely solve this problem:
Definition of the problem
- there is an area (e.g. <div>) with known height in the page
- an internal object (typically long text in <div>) is inside the area
and I don’t know its height (e.g. because its content is
dynamically generated from a database) - I want to center the object vertically within the area
- without using HTML tables.
No general solution was known until September 2004. I have found it going
home on Wilson street.
Display an
example of the vertical centering in your browser.
Update 2015 — flex
As new browsers support display: flex, it is much easier to vertical
center an item with CSS than before.
<style>
#containter {
height: 400px;
display: flex;
/* flex-direction: column;*/
align-items: center;
/* justify-content: center;*/
}
#content {}
</style>
<div>
<div>
any text<br>
any height<br>
any content, for example generated
from DB<br>
everything is vertically centered
</div>
</div>
See this example in browser.
Uncommenting justify-content: center or
flex-direction: column you can get other types
of centering (horizontal, both). For instance justify-content: center with
align-items: center leads to centered content both vertically and
horizontally.
The most important rule is display: flex.
This relatively new value switches the display of the
containter to a special mode, enabling its
direct descendant to use and align in all the space of the containter
(using special properties like align-items and
others). The container has set some width, i.e. width: 400px just for
purpose of this example. There is no need to style the content element, but
it must be direct descendant of the container.
Support of display: flex is very good in modern browsers. Last not-supporting
browsers are Internet Explorer 9 and 10 (version 10 has a special syntax of
flex). If it is important for you to optimize for those and older browsers,
you should read the rest of this page.
Original content from 2004 with updates:
The idea
The keystone of the solution for Internet Explorer 6, 7 or quirk mode
is this: the internal object is absolutely positioned in half of the area
height. Then is moved up by half of its height. The wrong
interpretation of the height property in older Internet Explorer is used as
a feature here (counted height is taken as a base of percentage height of
nested tags). One extra nested tag <div> is needed for those Explorers.
Solution for standard browsers like Mozilla, Opera, Safari etc. (including
IE 8, 9, 10 and younger) is completely different. Entire area (top <div>) is
set to be displayed as a table (display: table; part of CSS2). The internal
object is set as table-cell (display: table-cell). Now — there is the key
idea — it is possible to use vertical-align property for such table-displayed
element in standard browsers. (Internet Exlorer 6, 7 and quirk mode ignores
those properties or doesn’t know their values.)
Then both syntax are merged. I use the Pixy’s
underscore hack, but with sign #. A CSS property written with the char #
on the start (i.e. #position) is visible for IE 7 and older. Such written
property is invisible for any other standard browser (e.g. Explorer 6 or 7
interprets #position: absolute; unlike other browsers). This so
called «underscore hack» seems to be valid, but if you don’t want to use it,
you may use the more structured code below in my
second example (unfortunately, not working for IE 7). Other types of
browsers and Internet Explorer 8 and younger don’t need to be hacked, as
they support display: table-cell properly.
Compatibility
The code below works in Internet Explorer 5.0, 5.5, 6.0, 7, 8, 9 and 10
beta, in Gecko browsers (Mozilla, Firefox, Netscape 7), in Opera 7, 8 and up,
every Chrome, Konqueror 3.3.1. (maybe lower too), and in Safari (Win, iOS).
The page can be HTML, HTML5 or XHTML, standard or quirk mode.
The valid example doesn’t work in IE 7 standard mode (update 2012: about
3 % of clients). If you find any easy workaround for IE 7, please let me
know.
Understandable code:
<!DOCTYPE HTML>
<html>
<head>
<title>Universal vertical center with CSS</title>
<style>
.greenBorder {border: 1px solid green;} /* just borders
to see it */
</style>
</head>
<body>
<div>
<div>
<div>
any text<br>
any height<br>
any content, for example
generated from DB<br>
everything is vertically centered
</div>
</div>
</div>
</body>
</html>
See this example in
browser
Legend for colors:
CSS styles for every browser
CSS styles for standard browsers
CSS style only for Internet Explorer 6, 7 and quirk (with # hack)
The result looks:
any text
any height
any content, for example generated from DB
everything is vertically centered
See this example in
browser
Let’s make it structural and without hacks
(NOTE: this valid solution described below doesn’t work in Internet Explorer
7 (standard mode), because IE7 doesn’t understand table- values in display
property. The centered object is too high. BUT: IE 7 is used by only about 3
% of users (2012) and the number will decrease. If you still do mind IE7
users, please use the non-valid solution above, write in quirk mode, or use
html conditional comments for separating the properties for IE 7 somehow.)
The first example above is not nice, but I hope you have understood it. It’s
possible to write code differently. For example this way:
<div>
<div>
<div>
any text
any height
any content, for example generated from DB
everything is vertically centered
</div>
</div>
</div>
And the structured valid style:
<style type=»text/css»>
#outer {height: 400px; overflow: hidden; position:
relative;}
#outer[id] {display: table; position: static;}
#middle {position: absolute; top: 50%;}
/* for quirk explorer only*/
#middle[id] {display: table-cell; vertical-align:
middle; width: 100%; position: static;}
#inner {position: relative; top: -50%}
/* for quirk explorer only */
/* optional: #inner[id] {position: static;} */
</style>
See the valid
example in browser (it looks the same way as the last one).
Color legend:
CSS style for Internet Explorer 6 only (or quirk)
CSS styles for standard browsers
CSS2 selector #value[id]
is equivalent to selector #value
,
but Internet Explorer 6 ignores these types of selectors with [id].
Generally: syntax
*[foo]
means any element with attribute foo
. Any
HTML element #something must have the attribute id by definition set to «something».
That’s the trick — #value[id]
works in standard browsers only
(similarly works .value[class])
There’s CSS property position set to absolute or relative for Internet
Explorer. The code position: static
get’s it back to default
value in standard browsers (property top doesn’t work then).
Both vertical and horizontal centering
The core code will be the same, you just need to add some extra CSS rules.
If is your page in standard mode, add this code:
<style>
#outer {width: 100%;}
#inner {width: 200px; margin-left: auto; margin-right: auto;}
</style>
As you probably see, this is the most common horizontal centering method —
auto left and right margin. Because margins needs the space in Firefox and
Opera, you need to set a width to the #outer div. If 100% doesn’t fit your
needs, use any other value.
The important thing is to set some proper width to #inner. This tutorial is
about vertical centering of an object with unknown height. I assume that
you know the width of the object (in most cases you will simply decide
how wide it should be). You may use the pixel values, or the percentage
width. If the centered object is only an unknown-size image, you don’t need
to set width.
If you use quirk mode page rendering (mode depends on !Doctype, as you know),
added code should be a bit longer, because quirk mode of Exploder doesn’t
understand auto margins, but has one nice bug in text-align interpretation
instead. This code should work for both standard and quirk mode:
<style>
#outer {width: 100%;}
#middle {width: 100%; text-align: center;}
#inner {width: 200px; margin-left: auto; margin-right: auto; text-align:
left;}
</style>
Please take note that this is just part of code, which you have to add to
the previous example. If you are lazy to combine codes, please see the
complete example in browser:
vertical
and horizontal centering. You know, I’m lazy too.
How to center vertically on window’s height
The same way, and just add the style:
<style>
body, html {height: 100%;}
#outer {height: 100%; overflow: visible;} /* or without overflow */
...
</style>
It seems that #outer declaration should be sufficient, but it is not. Body
and html declaration sets 100% of the window’s height as a base for next
percentage. Now it is better not to set overflow: hidden (like in the
examples above), because when the content would be taller than window, then
it would be impossible to scroll on.
Related
Previous attempt to center vertically:
Examples:
Read in other language:
Centralizando verticalmente com CSS — Brazilian Portuguese translation of
this article by Maurício Samy Silva
Вертикальне центрування в CSS — Ukrainian translation by Agnessa Petrova
from A2Goos team
Вертикальное центрирование в CSS — Russian translation by Aleksandr Molochan
Czech version of this article
(original, not updated)
All other articles on this website
www.jakpsatweb.cz is in Czech.
About
First published Sep 21, 2004, updated Oct 23, 2006 and May 25 2008. Major
update Dec 6 2012 including bugfix of code in valid example. June 2015 major
update about flex. I’ll update this article with more information if you
wish.
Author:
Dušan Janovský
aka Yuhů
[email protected]
www.jakpsatweb.cz
From Prague, Czech Republic, search algorithms specialist in Seznam.cz
search engine. Wi
Tw
Fb
Div vertical align middle – Тарифы на сотовую связь
100 пользователя считают данную страницу полезной.
Информация актуальна! Страница была обновлена 16.12.2019
«Опять vertical-align не работает!» — вздохнёт веб-разработчик.
CSS-свойство vertical-align — одно из тех, которые с виду очень просты, но могут вызвать вопросы у начинающих разработчиков. Я думаю, что даже у многих ветеранов CSS когда-то были проблемы с тем, чтобы его до конца понять.
В этой статье я постараюсь в понятной форме рассказать про это свойство.
Чего оно не делает
Распространенное заблуждение о vertical-align состоит в том, что применяясь к одному элементу, оно заставляет все элементы внутри него изменить свою вертикальную позицию. Например, когда элементу задан vertical-align:top , это подразумевает, что его содержимое поднимется к его же верхней границе.
Вспоминаются времена, когда мы делали раскладки на основе таблиц:
В данном примере с ячейкой таблицы использование свойства valign (в настоящее время исключенного из HTML5) приведёт к тому, что элементы внутри ячейки прижмутся к её верху. И естественно, когда верстальщики начинают использовать vertical-align , они думают, что получится то же самое, и содержимое элемента выровняется в соответствии со значением свойства.
Но vertical-align работает не так.
Чем оно является на самом деле
Использование свойства vertical-align может быть разбито на три простых для понимания правила:
- Оно применяется только к строчным элементам inline или строчным блокам inline-block .
- Оно влияет на выравнивание самого элемента, а не его содержимого (кроме случаев, когда применяется к ячейкам таблицы).
- Когда оно применяется к ячейке таблицы, выравнивание влияет на содержимое ячейки, а не на неё саму.
Иными словами, следующий код не даст никакого эффекта:
Почему? Потому что
С другой стороны, при правильном применении (к строчному элементу или строчному блоку), свойство vertical-align заставит текущий элемент выровняться относительно других строчных элементов.
Выше или ниже расположится элемент, будет зависеть от высоты строчных элементов на этой же строке или от свойства line-height , заданного для неё.
Несколько картинок
Вот картинка с пояснительным текстом, которая поможет вам понять, что происходит при вертикальном выравнивании строчных элементов:
А вот пример, в котором есть несколько строчных элементов, один из которых прижат к верху.
Ключевые слова
Несколько ключевых слов, которые можно задавать в качестве значений для свойства vertical-align :
- baseline , значение по умолчанию или «изначальное»
- bottom
- middle
- sub
- super
- text-bottom
- text-top
- top
Возможно, многие из них вы не будете использовать, но было бы неплохо знать все имеющиеся варианты. Например, на демо-странице, из-за того что значение vertical-align для установлено как top , он выровнен по самому высокому элементу в строке (большой картинке).
Однако если вы не хотите выравнивать элемент относительно картинок или других строчных элементов, обладающих блочными свойствами, вы можете выбрать значение text-top или text-bottom , тогда элементы будут выравниваться относительно текста в строке.
О ключевом слове middle
К сожалению, правило vertical-align:middle не выровняет строчный элемент по середине самого высокого элемента в строке (как вы, возможно, ожидали). Вместо этого значение middle заставит элемент выровняться по середине высоты гипотетической строчной буквы «x» (так же называемой x-height). Потому, мне кажется, что это значение на самом деле должно называться text-middle , чтобы стало понятно, какой будет результат.
Взгляните на пример, где я увеличил размер шрифта так, чтобы размер x-height стал гораздо больше. После этого станет понятно, что значение middle не получится использовать очень часто.
Числовые значения
Возможно, вы не знали о том, что vertical-align принимает числовые и процентные значения. Однако это так, и вот примеры их использования:
Несмотря на то, что вы можете прочитать в спецификации раздел, описывающий, какие есть ключевые слова и значения, я думаю, гораздо полезней будет самостоятельно поиграть с ними и сравнить результаты.
Заключение
Если в одной фразе подводить итог о том, как использовать это традиционно неправильно понимаемое свойство, я бы сказал:
Свойство vertical-align работает только со строчными элементами или строчными блоками и ячейками таблицы. В случае применения не к ячейкам таблицы, оно действует на сам элемент, а не на его содержимое.
Комментарии +
- Roman Petrenko 9 марта 2012 в 15:21
Отлично изложено. Может быть вы выпускаете журнал на который можно подписатся. Если да то скиньте мне на имаил как можно подписаться. Еще раз спасибо!
Вы имеете в виду offline издание?
Если online, то вы можете подписаться на новости и обновления в твиттере: https://twitter.com/#!/webstandards_ru/
Отличная статья, кстати.
Роман, там вверху справа в браузере есть rss 😉
Спасибо за разъяснения, я даже не знал, что он только к инлайнам применяется. По этому обходил трюки с его использованием.
vertical-align у родителя сработает если у детей vertical-align: inherit;
Денис, я не очень понял что вы имеете в виду. Вы не могли бы написать и выложить кейс?
На том же http://jsfiddle.net/ ?
Отличный перевод, только вот относительно ссылочек — не очень удобно на сайте без
Роберт7 апреля 2012 в 22:46
Не хватает информации об особенности поведения vertical-align в разных браузерах и о различных подводных камнях.
Из интересных особенностей, что недавно встречал – inline-block с overflow:hidden выравнивается по разному, в разных браузерах http://jsfiddle.net/dw8EW/12/
Роберт, это не баг, а специфицированная особенность — последняя фраза в разделе о сабже гласит:
The baseline of an ‘inline-block’ is the baseline of its last line box in the normal flow, unless . if its ‘overflow’ property has a computed value other than ‘visible’, in which case the baseline is the bottom margin edge.
Баг как раз только в Хроме, который, к сожалению, вообще неважно справляется с инлайновым форматированием (у него и проценты для vertical-align работают не по стандарту, и не только).
Остается загадкой почему же разработчики css не догадались сделать замену vertical-align для блочных элементов. Это же очевидная необходимость.
FeelGood, лучше поздно, чем никогда — CSS Box Alignment.
Я, признаться, не понимаю такое поведение:
http://jsfiddle.net/Rxu36/1/
Ситуация:
значение vertical-align у элемента span контролирует выравнивание содержимого своего родителя?
Нет, оно контролирует выравнивание самого span, но так как он выше чем высота строки то он растягивает её на нужную высоту, и располагается на нижней её границе, а чтобы это получилось он её как бы растягивает в верх, если бы был по центру то растянул бы в оба направления, текст остаётся на своём месте, если бы он был ниже чем строка то он бы никак ни влиял на соседний текст, он бы сам двигался и всё.
Спасибо, я понял.
Хотя такое псевдо-контроль можно использовать для выравнивания текста по центру, если известна высота контейнера.
http://jsfiddle.net/Rxu36/5/
Благодарю. Стыдно признаться, но тоже думал что vertical-align применяется к содержимому. ну это, на мой взгляд, логично было. но не тут то было))
Чтобы выровнять содержимое блока, надо задать свойство line-height. Тогда vertical-align будет выравнивать элементы внутри блока, как надо.
Чтобы выровнять содержимое блока, надо задать свойство line-height. Тогда vertical-align будет выравнивать элементы внутри блока, как надо.
если сделать объект display: inline-block; или просто inline и задать свойство vertical-align: middle; содержимое тоже не выравнивается!!(
Подскажите, пожалуйста, как выровнять:
Есть блок:
В него помещено построчно три ссылки на шрифт (нестандартный).
В CSS блоке:
.nav li
Как бы я не ровнял, какие бы теги не применял, первое слово в линейке остается на пару-тройку пикселей ниже. Остальные в линию.
Было: vertical-align, justify-content и много всякой отсебятины типа margins:0 ))
Пробовал с изображениями с этим шрифтом: тоже самое.
Буду крайне признателен за помощь!
Это свойство — действительно одно из самых темных в CSS. Делалось наспех, под лозунгом «долой форматирование атрибутами HTML, Вы всё это теперь можете делать через CSS». Как известно, в HTML 3.x вертикальное выравнивание возможно только для ячеек таблицы (атрибут valign, выравнивается содержимое) и для рисунков (т. е. inline-block, атрибут align, выравнивается сам рисунок). Эти особенности и были тупо скомпилированы в одно css-свойство.
Отсутствие удобных и понятных методов вертикального выравнивания вне таблиц — одна из причин, по которой народ неохотно отказывается от табличной верстки.
Вот простая задачка, с которой мне так и не удалось справиться без таблицы или введения элементов-хаков в HTML (что, на мой взгляд, куда хуже, чем table).
text
Нужно сделать, чтобы текст был справа от картинки. При этом и текст и картинка должны быть центрированы по вертикали. Текста может быть много, и в этом случае он должен растягивать div, а картинка — центрироваться или мало, и тогда все должно быть наоборот.
Прошу прощения, тэги съелись. Вот HTML к задачке:
«div» «img. » «p» text «/p» «/div»
Заменил угловые скобки кавычками, писать через амперсенды очень уж муторно.
спасибо за статью! очень помогла 🙂
Как было сказано выше, в случае если vertical-align применяется к ячейке таблицы, – то оно должно влиять именно на расположение содержимого этой ячейки, однако:
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS | |
6.0+ | 8.0+ | 1.0+ | 3.5+ | 1.0+ | 1.0+ | 1.0+ | 1.0+ |
Краткая информация
Значение по умолчанию | baseline |
---|---|
Наследуется | Нет |
Применяется | К встроенным элементам или ячейкам таблицы. |
Ссылка на спецификацию | http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align |
Версии CSS
CSS 1 | CSS 2 | CSS 2.1 | CSS 3 |
---|
Описание
Выравнивает элемент по вертикали относительно своего родителя, окружающего текста или ячейки таблицы.
Синтаксис
vertical-align: baseline|bottom|middle|sub|super|text-bottom|text-top|top|inherit | значение | проценты
Значения
В качестве значения также можно использовать проценты, пикселы или другие доступные единицы. Положительное число смещает элемент вверх относительно базовой линии, в то время как отрицательное число опускает его вниз. При использовании процентов, отсчет ведется от значения свойства line-height , при этом 0% аналогично значению baseline .
Для выравнивания по вертикали в ячейках таблицы применяются следующие значения.
baseline Выравнивает базовую линию ячейки с базовой линией первой текстовой строки или другого вложенного элемента. bottom Выравнивает по нижнему краю ячейки. middle Выравнивает по середине ячейки. top Выравнивает содержимое ячейки по ее верхнему краю.
HTML5 CSS2.1 IE Cr Op Sa Fx
Результат данного примера показан на рис. 1.
Рис. 1. Применение свойства vertical-align
Объектная модель
[window.]document.getElementBy >elementID «).style.verticalAlign
Браузеры
Internet Explorer до версии 7.0 включительно не поддерживает значение inherit .
I want to keep the height of #abc div at 50px and text to align vertically in the middle of the div .
10 Answers 10
You can use line-height: 50px; , you won’t need vertical-align: middle; there.
The above will fail if you’ve multiple lines, so in that case you can wrap your text using span and than use display: table-cell; and display: table; along with vertical-align: middle; , also don’t forget to use width: 100%; for #abc
Another solution I can think of here is to use transform property with translateY() where Y obviously stands for Y Axis. It’s pretty straight forward. All you need to do is set the elements position to absolute and later position 50% from the top and translate from it’s axis with negative -50%
Note that this won’t be supported on older browsers, for example IE8, but you can make IE9 and other older browser versions of Chrome and Firefox by using -ms, -moz and -webkit prefixes respectively.
For more information on transform , you can refer here.
CSS — vertical-align — Свойство CSS vertical-align устанавливает вертикальное выравнивание встроенного
Свойство CSS vertical-align
устанавливает вертикальное выравнивание встроенного блока, блока встроенного блока или ячейки таблицы.
Свойство вертикального выравнивания может использоваться в двух контекстах:
- Выровнять по вертикали блок встроенного элемента внутри содержащего его линейного блока. Например, его можно использовать для вертикального позиционирования
<img>
в строке текста:
- Выровнять по вертикали содержимое ячейки таблицы:
Обратите внимание, что vertical-align
применяется только к элементам inline, inline-block и table-cell: вы не можете использовать его для вертикального выравнивания элементов уровня блока .
Syntax
vertical-align: baseline; vertical-align: sub; vertical-align: super; vertical-align: text-top; vertical-align: text-bottom; vertical-align: middle; vertical-align: top; vertical-align: bottom; vertical-align: 10em; vertical-align: 4px; vertical-align: 20%; vertical-align: inherit; vertical-align: initial; vertical-align: unset;
Свойство vertical-align
указывается в качестве одного из значений, перечисленных ниже.
Значения для встроенных элементов
Родительско-относительные ценности
Эти значения выравнивают элемент по вертикали относительно его родительского элемента:
baseline
- Выравнивает базовую линию элемента с базовой линией его родителя. Базовая линия некоторых замененных элементов , таких как
<textarea>
, не указана в спецификации HTML, что означает, что их поведение с этим ключевым словом может различаться в разных браузерах. sub
- Выравнивает базовую линию элемента с абонентской линией его родителя.
super
- Выравнивает базовую линию элемента с надстрочной базовой линией его родителя.
text-top
- Выравнивает верхнюю часть элемента со шрифтом родительского элемента.
text-bottom
- Выравнивает нижнюю часть элемента с нижней частью шрифта родительского элемента.
middle
- Выравнивает середину элемента с базовой линией плюс половину высоты x родителя.
<length>
- Выравнивает базовую линию элемента на заданную длину выше базовой линии его родителя.Допускается отрицательное значение.
<percentage>
- Выравнивает базовую линию элемента по указанному проценту над базовой
line-height
его родительского элемента со значением в процентах от свойства line-height . Отрицательное значение допускается.
Относящиеся к линии значения
Следующие значения выравнивают элемент по вертикали относительно всей линии:
top
- Выравнивает верхнюю часть элемента и его потомков с верхней частью всей линии.
bottom
- Выравнивает нижнюю часть элемента и его потомков с нижней частью всей линии.
Для элементов,которые не имеют базовой линии,вместо нее используется нижний край поля.
Значения для ячеек таблицы
-
baseline
(иsub
,super
,text-top
,text-bottom
,<length>
и<percentage>
) - Выравнивает базовую линию ячейки с базовой линией всех остальных ячеек в ряду,которые выровнены по базису.
top
- Выравнивает верхний край набивки ячейки с верхним рядом.
middle
- Центрирует обивку ячейки в пределах ряда.
bottom
- Выравнивает нижний край набивки ячейки с нижним рядом.
Допускаются отрицательные значения.
Formal definition
Формальный синтаксис
baseline | sub | super | text-top | text-bottom | middle | top | bottom | <percentage> | <length>
Examples
Основной пример
HTML
<div>An <img src="https://mdn.mozillademos.org/files/12245/frame_image.svg" alt="link" /> image with a default alignment.</div> <div>An <img src="https://mdn.mozillademos.org/files/12245/frame_image.svg" alt="link" /> image with a text-top alignment.</div> <div>An <img src="https://mdn.mozillademos.org/files/12245/frame_image.svg" alt="link" /> image with a text-bottom alignment.</div> <div>An <img src="https://mdn.mozillademos.org/files/12245/frame_image.svg" alt="link" /> image with a middle alignment.</div>
CSS
img.top { vertical-align: text-top; } img.bottom { vertical-align: text-bottom; } img.middle { vertical-align: middle; }
Result
Specifications
Совместимость с браузерами
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Хромовый Android | Firefox для Android | Опера Андроид | Safari на IOS | Samsung Интернет | |
vertical-align | 1 | 12 | 1 | 4 | 4 | 1 | 1 | 18 | 4 | 14 | 1 | 1.0 |
См.также
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 — Используя положение: относительное; положение: абсолютное
АБСОЛЮТНЫЙ ЦЕНТР,
В КОНТЕЙНЕРЕ.
Этот блок абсолютно центрирован по горизонтали и вертикали внутри своего контейнера
CSS Вертикальное выравнивание для всех (включая чайники)
«Вертикальное выравнивание CSS держит меня в напряжении!»
Ровно в 9 утра. Дождливый понедельник смыл воскресенье. Я почувствовал тяжесть серой недели работы впереди, когда стряхнул свои заметки о сложном случае переменных CSS. Я не мог дышать, пока в офис не ворвался бородатый, крупный мужчина с боевым носом.Он был в ярости. И он был моим коллегой. Похоже, он не спал с момента анонса CSS3. Может быть, дело было в его бледном цвете лица, но я знал, что у этого парня были всевозможные ночные проблемы.
«Куда торопиться, приятель?»
Он бросил свой ноутбук на мой стол, чтобы показать мне экран, заполненный пульсирующими лягушками и пустыми листьями кувшинок.
«У меня есть для вас хороший. У меня проблемы с центрированием моего контента. Он плохой, очень плохой. Я не мог уснуть. И знаете что? Все борются с этим, это может быть серьезный случай. — подумайте о коллективном иске и все такое.”
Глупый наркотик не знал, во что ввязывается. Центрирование фрагмента контента по вертикали было огромным беспорядком, заваленным бюрократизмом. И он пошел вверх, вплоть до IE6. Но мне было жаль бедного ублюдка. Что я могу сказать; Я любитель слезливых историй.
«Успокойтесь, Рикардо. Алекс Сантос, эсквайр, мастер CSS, к вашим услугам».
. . .
Это могло быть не совсем так. Может быть, просто возможно, я приукрасил сказку.
Видите ли, мой коллега Рикардо — крупный бородатый парень — самопровозглашенный манекен CSS. Однажды он сказал мне, что все еще использует
В любом случае, сделать ваш контент правильно выровненным, красивым и в принципе потрясающим — непростая задача в CSS. Я видел достаточно людей, которые боролись с этим, и продолжаю замечать некоторые «критические» ошибки, когда дело касается настоящего адаптивного дизайна.
Но не бойтесь: если вы боролись с вертикальным выравниванием CSS — как мой коллега, возможно, — вы попали в нужное место.
Давайте поговорим о свойстве CSS Vertical Align
Когда я начал заниматься фронтенд-разработкой, у меня были небольшие проблемы с этим свойством. Я подумал, что его следует использовать как классическое свойство text-align. О, если бы это было так просто …
Свойство CSS вертикального выравнивания плавно работает с таблицами, но не с div или любыми другими элементами. Когда вы используете его в div, он выравнивает элемент вместе с другими div, а не содержимое — это то, что мы обычно хотим).Это работает только с дисплеем : inline-block;
.
Вот пример:
См. Pen 1 # Example_OutSystems Experts — Vertical-align on divs от Александра Сантоса (@alexandre_santos) на CodePen.
Мы хотим центрировать контент, а не сам Div!
У вас есть два подхода. Если у вас есть только некоторые элементы div с текстом, такие как панель навигации, вы можете использовать свойство line-height
, что означает, что вам нужно знать высоту элемента, но вам не нужно устанавливать высоту.Таким образом, ваш текст всегда будет по центру.
Однако у этого подхода есть загвоздка. Если в вашем тексте более одной строки, высота строки будет умножена на количество имеющихся строк. Это, вероятно, оставит вас с уродливой страницей в ваших руках, а этого никто не хочет.
Взгляните на этот пример:
См. Pen 2 # Example_OutSystems Experts — Navbar with line-height от Александра Сантоса (@alexandre_santos) на CodePen.
Если контент, который вы хотите центрировать, состоит из нескольких строк, лучше всего использовать таблицы div.Вы можете использовать настоящие таблицы, но это семантически неверно. Кроме того, если вам нужны перерывы для адаптивных целей, лучше использовать элементы div.
Для того, чтобы это работало, у вас должен быть родительский контейнер с display: table;
, и внутри этого контейнера у вас будет количество столбцов, которое вы хотите выровнять по центру, с display: table-cell;
(и vertical-align: middle;
) свойство.
Давайте посмотрим на пример:
См. Pen 3 # Example_OutSystems Experts — Выравнивание ячеек таблицы по вертикали Александра Сантоса (@alexandre_santos) на CodePen.
Почему это работает с макетом таблицы, а не с элементами div? Потому что, когда у вас есть таблица, строки имеют одинаковую высоту. Таким образом, когда содержимое ячейки не использует всю доступную высоту, браузер автоматически добавляет вертикальный отступ для центрирования содержимого.
Свойство Position
Начнем с основ:
-
положение: статическое;
— это значение по умолчанию. Элемент отображается в соответствии с порядком HTML. -
позиция: абсолютная;
— используется для определения точной позиции, в которой должен находиться элемент. Эта позиция всегда связана с ближайшим предком в относительной позиции (не статической). Знаете ли вы, что произойдет, если вы не определите точное положение элемента? Вы теряете над этим контроль! Он отображается случайным образом, полностью игнорируя документооборот. По умолчанию он отображается в верхнем левом углу. -
позиция: относительная;
— используется для позиционирования элемента относительно его нормального положения (статика).Эта позиция сохраняет порядок потока документа. -
позиция: фиксированная;
— используется для позиционирования элемента относительно окна браузера, чтобы он всегда был виден в области просмотра.
Примечание : Некоторые свойства, такие как top
и z-index
, работают, только если элемент имеет позицию (не статическую).
Давайте сделаем наши грязные руки еще грязнее!
Вы хотите выровнять рамку по центру страницы?
Сначала получите элемент с относительным положением и желаемыми размерами.Например: 100% ширины и высоты.
Второй шаг может отличаться в зависимости от ваших целевых браузеров, но вы можете использовать один из двух вариантов:
- Старый вариант : Вам нужно знать точный размер коробки, чтобы удалить половину ширины и половину высоты коробки. Как это:
См. Перо 4 # Example_OutSystems Experts — Абсолютное позиционирование с рамкой размера от Александра Сантоса (@alexandre_santos) на CodePen.
- Классная новая опция CSS3 : добавьте свойство преобразования со значением перевода -50%, и оно всегда будет центрировано.Как это:
См. Pen 5 # Example_OutSystems Experts — Абсолютное позиционирование без рамки от Александра Сантоса (@alexandre_santos) на CodePen.
В принципе, если вы хотите центрировать контент, никогда, (никогда, никогда, никогда!) Не используйте top: 40%
или left: 300px
. Это отлично работает на ваших тестовых экранах, но не по центру. Не совсем.
Помните фиксированное положение? Вы можете сделать то же самое, что и с абсолютным положением, но вам не нужно относительное положение в родительском элементе — оно всегда будет относительно окна браузера.
CSS Vertical Align Criers: вы слышали о Flexbox?
Вы можете использовать макет flexbox, вариант, о котором мой мальчик Динис писал некоторое время назад. Ах да, это намного лучше, чем любой из других доступных вариантов. С помощью flexbox манипулировать элементами по-разному — это детская игра. Даже Рикардо мог это сделать.
Проблема в том, что вам нужно отказаться от некоторых браузеров, например IE9 и ниже. Давай. Отпусти это … не могу больше сдерживаться. (Ага, теперь он застрял в твоей голове.Пожалуйста.)
Вот пример того, как центрировать коробку по вертикали:
См. Pen 6 # Example_OutSystems Experts — Макет Flexbox без размера блока от Александра Сантоса (@alexandre_santos) на CodePen.
Используя макет flexbox, вы можете иметь более одного центрированного блока и правильно выровнять его. Но это уже история для другого раза!
А как насчет CSS Grid?
CSS Grid Layout — самая мощная система компоновки, доступная в CSS.Основное отличие от Flexbox заключается в том, что он работает в двухмерной системе, то есть может обрабатывать как столбцы, так и строки, в отличие от Flexbox, который в значительной степени является одномерной системой. По этой причине это может быть подходящим для создания более сложных макетов, таких как шаблон галереи в пользовательском интерфейсе OutSystems.
При этом его можно использовать просто для центрирования элементов в контейнере! Вот пример того, как центрировать коробку по вертикали:
См. Перо
CodePen Home 7 # Example_OutSystems Experts — Макет сетки без поля размера, автор Бернардо Кардосо (@BenCardoso)
на CodePen.
Подобно Flexbox, этот подход также требует отказа от старых браузеров, хотя поддержка в основных из них совершенно стабильна.
Чтобы узнать больше о CSS Grid, ознакомьтесь с этим полным руководством и некоторыми практическими примерами.
No More CSS Vertical Align Tears
Вертикальное выравнивание во многом похоже на детский шампунь Джонсона: без разрывов. Если вы последуете тому, чему научились с помощью этих нескольких примеров, вы также сможете быстро освоить вертикальное выравнивание.
. . .
Некоторое время спустя я проходил мимо дома Рикардо, но его там не было. Кто-то сказал мне, что он заснул на одной из многих удобных кушеток нашей компании.
Похоже на технический нокаут.
Но когда я посмотрел на экран его ноутбука …
Какого черта он делал? Играть в игры, пока он должен был работать?
Это очень много цветов для понедельника, который начался таким серым.
Ссылки и дополнительная литература
Способ создания программного обеспечения меняется.Будьте на шаг впереди и присоединяйтесь к нам на конференции разработчиков OutSystems — это ваша возможность узнать о последних передовых технологиях от OutSystems и о том, как они могут помочь вам построить больше и ускорить вашу карьеру. Узнайте больше и сэкономьте свое место прямо здесь!
Как вертикально выровнять элементы в Div
Иногда центрирование элементов по вертикали с помощью CSS может вызвать некоторые проблемы. Однако есть несколько способов центрировать элементы в
Здесь мы обсудим некоторые возможные способы, которые легко реализовать, если вы выполните шаги, описанные ниже.
Создать HTML¶
- Создайте два блока со следующим идентификатором: «синий» и «зеленый».
Название документа
Вертикально выровненный элемент
Попробуйте сами »
Добавьте CSS¶
Для блочных элементов вертикальное выравнивание элементов затруднено и зависит от ситуации.Если дочерний элемент может иметь фиксированную высоту, вы можете добавить position: absolute и указать его верх, высоту, верхнюю границу, положение.
- Используйте свойство position с «относительным» значением для родительского элемента, чтобы разместить его относительно его нормального положения.
- Используйте свойство position с «абсолютным» значением для дочернего элемента, чтобы разместить его относительно позиционированного родительского элемента.
- Добавьте свойства высоты, верхнего края, верха, границы и ширины.
#blue {
положение: относительное;
}
#зеленый {
позиция: абсолютная;
верх: 50%;
высота: 100 пикселей;
маржа сверху: -50 пикселей;
}
#синий {
граница: 2px solid # 1C87C9;
высота: 10em;
}
#зеленый {
граница: 1px solid # 8EBF42;
ширина: 100%;
}
Вот результат нашего кода.
Пример выравнивания элемента по вертикали в div с помощью свойства position: ¶
Название документа
<стиль>
#синий {
положение: относительное;
}
#зеленый {
позиция: абсолютная;
верх: 50%;
высота: 100 пикселей;
маржа сверху: -50 пикселей;
}
#синий {
граница: 2px solid # 1C87C9;
высота: 10em;
}
#зеленый {
граница: 1px solid # 8EBF42;
ширина: 100%;
}
Вертикально выровненный элемент
Попробуйте сами »
Результат¶
Другой способ — использовать свойство line-height со значением, равным свойству height.Это метод, который следует использовать, когда центрированный элемент состоит из одной строки, а высота его родительского элемента является фиксированной.
Пример выравнивания элемента по вертикали в div с помощью свойства line-height: ¶
Название документа
<стиль>
п {
маржа: 0;
}
#outer {
граница: 2px solid # 5c34eb;
высота: 100 пикселей;
высота строки: 100 пикселей;
}
Вертикально выровненный элемент
Lorem Ipsum
Попробуйте сами »
Давайте посмотрим, как мы можем выровнять элемент в div с помощью свойства padding.Чтобы этот метод работал, нам нужно установить верхнее и нижнее отступы для внешнего элемента.
Пример выравнивания элемента по вертикали в div с помощью свойства заполнения CSS: ¶
Название документа
<стиль>
.center {
отступ: 60 пикселей 0;
граница: 2px solid # 5c34eb;
}
Вертикально выровненный элемент
Lorem Ipsum.
Попробуйте сами »
Есть еще один метод выравнивания элементов по вертикали. Вы можете использовать свойство vertical-align, которое обычно применяется к элементам inline, inline-block и table-cell. Но его нельзя использовать для выравнивания элементов блочного уровня по вертикали. Раньше он использовался с атрибутом valign, но теперь этот атрибут устарел. Вместо этого вы можете использовать vertical-align: middle.
Общие сведения о выравнивании по вертикали или «Как (не) центрировать содержимое по вертикали»
Часто задаваемые вопросы по различным каналам 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
Этот метод требует, чтобы вы могли удовлетворить следующие условия:
- У вас есть только одна строка текста, которую вы хотите центрировать.
- Вы можете указать фиксированную высоту для родительского элемента.
Если вы согласны с вышеуказанными потребностями, решение:
- Установите высоту строки
Пример этого в коде:
.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+ * /
}
...
Эй, это вертикально по центру.Ура!
В вашем браузере приведенный выше пример отображается как:
Эй, это вертикально по центру. Ура!
Авторские права © 2004 Гэвин Кистнер, все права защищены. Комментарии / предложения / пламя приветствуются.
Помощников — Материализовать
Выравнивание
У нас есть простые в использовании классы, которые помогут вам согласовать ваш контент.
Вертикальное выравнивание
Вы можете легко центрировать объекты по вертикали, добавив класс valign-wrapper
к контейнеру, содержащему элементы, которые вы хотите выровнять по вертикали.
Это должно быть выровнено по вертикали
Это должно быть выровнено по вертикали
Выровнять текст
Эти классы предназначены для горизонтального выравнивания содержимого: .left-align
, .right-align
и .center-align
.
Выровнять по левому краю
Это должно быть выровнено по правому краю
Это должно быть выровнено по центру
Выровнять по левому краю
Выровнять по правому краю
Выровнять по центру
Быстрые поплавки
Быстро перемещайте объекты, добавляя к элементу класс слева
или справа
.! Important
используется, чтобы избежать проблем со специфичностью.
...
...
Форматирование
Эти классы помогают форматировать различный контент на вашем сайте.
Усечение
Чтобы обрезать длинные строки текста в виде многоточия, добавьте класс truncate
к тегу, содержащему текст. См. Ниже пример усечения заголовка внутри карточки.
Это очень длинный заголовок, который будет усечен.
Это очень длинный заголовок, который будет обрезан
Ховер
hoverable
— это класс зависания, который добавляет анимацию для тени блока, как показано ниже. Его можно использовать на большинстве элементов, но он предназначен для использования на карточках.
Название карты
Я очень простая карта.Я хорошо умею хранить небольшие фрагменты информации. Я удобен тем, что для эффективного использования мне требуется немного разметки.
Панель Hoverable Card
Выровнять по вертикали внутри · GitHub
Выровнять по вертикали внутри
Мгновенно делитесь кодом, заметками и фрагментами.
Выровнять по вертикали внутри
#html | |
Lorem ipsum dolor sit amet, conctetur adipiscing elit. | |
#scss | |
дел. { | |
высота: 25 пикселей; | |
высота строки: 25 пикселей; | |
выравнивание текста: по центру; | |
пролет { | |
дисплей: встроенный блок; | |
vertical-align: middle; | |
высота строки: нормальный; | |
} | |
} |
Вы не можете выполнить это действие в настоящее время.Вы вошли в систему с другой вкладкой или окном. Перезагрузите, чтобы обновить сеанс.
Вы вышли из системы на другой вкладке или в другом окне. Перезагрузите, чтобы обновить сеанс.
Выравнивание элементов html.Div по вертикали — Dash
Привет,
У меня следующий упрощенный макет, и моя цель — выровнять все элементы первого Div по вертикали.
импортная тире
импортировать dash_core_components как dcc
импортировать dash_html_components как html
приложение = тире.Бросаться()
app.layout = html.Div ([
html.h2 ("Эволюция мира"),
html.Div ([
html.Div ([
html.Div (children = 'Выбрать'),
dcc.Dropdown (
,
options = {'label': 'America', 'value': 'America'},
multi = True,
значение = ''
)
], style = {'display': 'inline-block', 'width': '20% ',' border ':' сплошной зеленый цвет 2 пикселя '}),
html.Div ([
html.Div (children = 'Выбрать'),
dcc.Dropdown (
,
options = {'label': 'US', 'value': 'US'}, # Список {'label':, 'value':}
multi = True,
значение = ''
)
], style = {'display': 'inline-block', 'width': '20% ',' margin-left ':' 15px ',' border ':' 2px зеленое сплошное '}),
html.Div ([
html.Div (children = 'Выбрать дату начала и окончания'),
dcc.DatePickerRange (
,
display_format = 'ДД / ММ / ГГ',
first_day_of_week = 1,
)
], style = {'display': 'inline-block', 'width': '20% ',' margin-left ':' 15px ',' border ':' 2px зеленое сплошное '}),
html.Div ([
html.Div (children = 'See'),
html.Button ('См. кнопку' ,, n_clicks = 0, style = {'verticalAlign': 'middle'}),
], style = {'display': 'inline-block', 'margin-left': '15px', 'verticalAlign': 'middle', 'border': '2px зеленое сплошное'}),
]),
html.
2024 © Все права защищены.
Добавить комментарий