Рассмотрим следующий код :
HTML:
<div>
<label for='name'>Name:</label>
<input type='text' id='name' />
</div>
CSS:
div {
height: 50px;
border: 1px solid blue;
}
Каким способом можно проще всего поставить label
и input
посередине div
(по вертикали)?
css
html
vertical-alignment
Миша Морошко
источник
источник
<table>
и применитьvalign='middle'
к его<td>
s.Ответы:
div { display: table-cell; vertical-align: middle; height: 50px; border: 1px solid red; }
<div> <label for='name'>Name:</label> <input type='text' id='name' /> </div>
Преимущества этого метода в том, что вы можете изменить высоту
div
, изменить высоту текстового поля и изменить размер шрифта, и все всегда будет оставаться посередине.http://jsfiddle.net/53ALd/6/
источник
display: table-cell
. Поддерживается ли это в некоторых браузерах?display: table-cell
div заставляет вести себя так, как от них не ожидается, например, последующий рендеринг div в той же строке / и т. Д.более современный подход - использовать css flex-box.
div { height: 50px; background: grey; display: flex; align-items: center }
<div> <label for='name'>Name:</label> <input type='text' id='name' /> </div>
более сложный пример ... если у вас есть несколько элементов в гибком потоке, вы можете использовать align-self для выравнивания отдельных элементов иначе, чем указанное выравнивание ...
div { display: flex; align-items: center } * { margin: 10px } label { align-self: flex-start }
<div> <img src="https://de.gravatar.com/userimage/95932142/195b7f5651ad2d4662c3c0e0dccd003b.png?size=50" /> <label>Text</label> <input placeholder="Text" type="text" /> </div>
его также очень легко центрировать по горизонтали и вертикали:
div { position:absolute; top:0;left:0;right:0;bottom:0; background: grey; display: flex; align-items: center; justify-content:center }
<div> <label for='name'>Name:</label> <input type='text' id='name' /> </div>
источник
display:flex
имеет меньшую совместимость, работает на chrome 29+Это работает в разных браузерах, обеспечивает большую доступность и меньше разметки. отказаться от div. Оберните этикетку
label{ display: block; height: 35px; line-height: 35px; border: 1px solid #000; } input{margin-top:15px; height:20px} <label for="name">Name: <input type="text" id="name" /></label>
источник
for
иid
.Мне известно, что этот вопрос был задан более двух лет назад, но для недавних зрителей есть альтернативное решение, которое имеет несколько преимуществ по сравнению с решением Марка-Франсуа:
div { height: 50px; border: 1px solid blue; line-height: 50px; }
Здесь мы просто добавляем только значение,
line-height
равное высоте div. Преимущество состоит в том, что теперь вы можете изменить свойство отображения div по своему усмотрению,inline-block
например, на, и его содержимое останется вертикально центрированным. Принятое решение требует, чтобы вы рассматривали div как ячейку таблицы. Это должно работать отлично, кроссбраузерно.Единственное другое преимущество - это еще одно правило CSS вместо двух :)
Ура!
источник
Используйте
padding
наdiv
( сверху и снизу ) иvertical-align:middle
наlabel
иinput
.пример на http://jsfiddle.net/VLFeV/1/
источник
div
и содержимое внутри вообще не двигалось. Я что-то упускаю?Оберните метку и введите другой блок div с определенной высотой. Это может не работать в версиях IE ниже 8.
position:absolute; top:0; bottom:0; left:0; right:0; margin:auto;
источник
Вы можете использовать
display: table-cell
свойство, как в следующем коде:div { height: 100%; display: table-cell; vertical-align: middle; }
источник