Perhatikan kode berikut :
HTML:
<div>
<label for='name'>Name:</label>
<input type='text' id='name' />
</div>
CSS:
div {
height: 50px;
border: 1px solid blue;
}
Apa cara termudah untuk meletakkan label
dan input
di tengah div
(secara vertikal)?
css
html
vertical-alignment
Misha Moroshko
sumber
sumber
<table>
dan menerapkannyavalign='middle'
pada<td>
s.Jawaban:
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>
Kelebihan dari metode ini adalah Anda dapat mengubah tinggi
div
, mengubah tinggi bidang teks dan mengubah ukuran font dan semuanya akan selalu berada di tengah.http://jsfiddle.net/53ALd/6/
sumber
display: table-cell
. Apakah itu didukung di browser tertentu?display: table-cell
makes divs berperilaku dengan cara yang tidak diharapkan untuk berperilaku, seperti rendering div berikutnya pada baris yang sama / dll.pendekatan yang lebih modern akan menggunakan 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>
contoh yang lebih kompleks ... jika Anda memiliki banyak elemen dalam aliran fleksibel, Anda dapat menggunakan align-self untuk menyelaraskan elemen tunggal secara berbeda dengan perataan yang ditentukan ...
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>
juga sangat mudah untuk memusatkan secara horizontal dan vertikal:
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>
sumber
display:flex
memiliki kompatibilitas yang lebih rendah, berfungsi pada chrome 29+Ini berfungsi lintas browser, menyediakan lebih banyak aksesibilitas dan dilengkapi dengan lebih sedikit markup. buang div. Bungkus labelnya
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>
sumber
for
danid
untuk kesederhanaan maksimum.Saya tahu pertanyaan ini telah diajukan lebih dari dua tahun yang lalu, tetapi untuk pemirsa baru-baru ini, berikut adalah solusi alternatif, yang memiliki beberapa keunggulan dibandingkan solusi Marc-François:
div { height: 50px; border: 1px solid blue; line-height: 50px; }
Di sini kita hanya menambahkan yang
line-height
sama dengan ketinggian div. Keuntungannya adalah Anda sekarang dapat mengubah properti tampilan dari div sesuai keinginan Anda,inline-block
misalnya, dan isinya akan tetap berada di tengah secara vertikal. Solusi yang diterima mengharuskan Anda memperlakukan div sebagai sel tabel. Ini harus bekerja dengan sempurna, lintas browser.Satu-satunya keuntungan lain adalah hanya satu aturan CSS lagi, bukan dua :)
Bersulang!
sumber
Gunakan
padding
didiv
( atas dan bawah ) danvertical-align:middle
dilabel
daninput
.contoh di http://jsfiddle.net/VLFeV/1/
sumber
div
dan konten di dalamnya tidak bergerak sama sekali. Apakah saya melewatkan sesuatu?Bungkus label dan masukan div lain dengan ketinggian yang ditentukan. Ini mungkin tidak berfungsi di versi IE yang lebih rendah dari 8.
position:absolute; top:0; bottom:0; left:0; right:0; margin:auto;
sumber
Anda dapat menggunakan
display: table-cell
properti seperti pada kode berikut:div { height: 100%; display: table-cell; vertical-align: middle; }
sumber