Apa cara terbaik untuk memusatkan konten div secara vertikal saat ketinggian konten bervariasi. Dalam kasus khusus saya, ketinggian div wadah tetap, tetapi akan lebih bagus jika ada solusi yang akan bekerja dalam kasus-kasus di mana wadah memiliki ketinggian variabel juga. Juga, saya akan menyukai solusi tanpa, atau menggunakan sangat sedikit peretasan CSS dan / atau markup non-semantik.
css
vertical-alignment
jessegavin
sumber
sumber
Jawaban:
Cukup tambahkan
ke div batin.
Apa yang dilakukannya adalah memindahkan batas atas div dalam ke setengah ketinggian div luar (
top: 50%;
) dan kemudian div dalam naik setengah tingginya (transform: translateY(-50%)
). Ini akan bekerja denganposition: absolute
ataurelative
.Perlu diingat bahwa
transform
dantranslate
memiliki awalan vendor yang tidak termasuk untuk kesederhanaan.Codepen: http://codepen.io/anon/pen/ZYprdb
sumber
transform
hal terkait-webkit-
diawali dan sekarang berfungsi. Jadi hanya sebagai pengingat: Jangan lupa untuk menambahkan-webkit-
awalan juga.position: absolute
, bukan?translate
akan membuat semuanya buram saat mencoba menangani ketinggian .5px pada semuanya.Ini tampaknya menjadi solusi terbaik yang saya temukan untuk masalah ini, selama browser Anda mendukung
::before
elemen pseudo: CSS-Trik: Pemusatan di Unknown .Tidak memerlukan markup tambahan dan tampaknya berfungsi dengan sangat baik. Saya tidak bisa menggunakan
display: table
metode ini karenatable
elemen tidak mematuhimax-height
properti.sumber
.block { white-space: nowrap; font-size: 0; line-height: 0; }
dan meninggalkan margin kanan negatif pada elemen pseudo, Anda hanya perlu mengatur ulang fs dan lh di .centered ... seperti ini Anda memastikan bahwa elemen akan diposisikan dengan benar bahkan jika itu lebih lebar dari viewport (dan tidak harus menggunakan imo margin negatif agak berantakan).Ini adalah sesuatu yang perlu saya lakukan berkali-kali dan solusi yang konsisten masih mengharuskan Anda menambahkan markup non-semantik dan beberapa peretas khusus peramban. Ketika kami mendapatkan dukungan browser untuk css 3, Anda akan mendapatkan pemusatan vertikal tanpa dosa.
Untuk penjelasan teknik yang lebih baik, Anda dapat melihat artikel yang saya adaptasi , tetapi pada dasarnya melibatkan penambahan elemen tambahan dan menerapkan gaya yang berbeda di IE dan browser yang mendukung
position:table\table-cell
elemen non-tabel.Ada banyak cara (retasan) untuk menerapkan gaya pada set browser tertentu. Saya menggunakan komentar kondisional tetapi melihat artikel yang terhubung di atas untuk melihat dua teknik lainnya.
Catatan: Ada cara sederhana untuk mendapatkan pemusatan vertikal jika Anda mengetahui ketinggian sebelumnya, jika Anda mencoba memusatkan satu baris teks, atau dalam beberapa kasus lainnya. Jika Anda memiliki perincian lebih lanjut, masukkan saja karena mungkin ada metode yang tidak memerlukan peramban peramban atau markup non-semantik.
Pembaruan: Kami mulai mendapatkan dukungan browser yang lebih baik untuk CSS3, menjadikan flex-box dan transformasi sebagai metode alternatif untuk mendapatkan pemusatan vertikal (di antara efek lainnya). Lihat pertanyaan lain ini untuk informasi lebih lanjut tentang metode modern, tetapi perlu diingat bahwa dukungan browser masih samar untuk CSS3.
sumber
Menggunakan pemilih anak, saya telah mengambil jawaban Fadi yang luar biasa di atas dan mengubahnya menjadi hanya satu aturan CSS yang dapat saya terapkan. Sekarang yang harus saya lakukan adalah menambahkan
contentCentered
nama kelas ke elemen yang saya ingin pusatkan:Forked CodePen: http://codepen.io/dougli/pen/Eeysg
sumber
*
pemilih akan berkinerja lebih buruk daripada jawaban yang diterima. Mungkin tidak menjadi masalah, tetapi patut dicatat. stevesouders.com/blog/2009/06/18/simplifying-css-selectors> div
sebagai gantinya. calendar.perfplanet.com/2011/…Hasil terbaik untuk saya sejauh ini:
div untuk dipusatkan:
sumber
Anda dapat menggunakan margin otomatis. Dengan flex, div juga tampaknya terpusat secara vertikal.
sumber
Bagi saya cara terbaik untuk melakukan ini adalah:
Keuntungannya adalah tidak harus membuat ketinggian eksplisit
sumber
Ini adalah solusi luar biasa saya untuk
div
yang dinamis (persentase) tinggi.CSS
HTML
Coba ini sendiri.
sumber
Anda dapat menggunakan tampilan fleksibel seperti kode di bawah ini:
sumber