Jadi saya tahu kita bisa memusatkan div secara horizontal jika kita menggunakannya margin:0 auto;
. Sebaiknyamargin:auto auto;
bekerja menurut saya seharusnya bekerja? Memusatkan juga secara vertikal?
Mengapa tidak vertical-align:middle;
berhasil?
.black {
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
background:rgba(0,0,0,.5);
}
.message {
background:yellow;
width:200px;
margin:auto auto;
padding:10px;
}
<div class="black">
<div class="message">
This is a popup message.
</div>
</div>
Jawaban:
Perbarui Agustus 2020
Meskipun di bawah ini masih layak dibaca untuk info berguna, kami telah memiliki Flexbox untuk beberapa waktu sekarang, jadi gunakan saja, sesuai jawaban ini .
Anda tidak dapat menggunakan:
vertical-align:middle
karena itu tidak berlaku untuk elemen level blokmargin-top:auto
danmargin-bottom:auto
karena nilai yang digunakan akan dihitung sebagai nolmargin-top:-50%
karena nilai margin berbasis persentase dihitung relatif terhadap lebar blok penampungSebenarnya, sifat dari aliran dokumen dan algoritma penghitungan ketinggian elemen membuat tidak mungkin menggunakan margin untuk memusatkan elemen secara vertikal di dalam induknya. Setiap kali nilai margin vertikal diubah, itu akan memicu penghitungan ulang tinggi elemen induk (aliran ulang), yang pada gilirannya akan memicu pusat kembali elemen asli ... menjadikannya pengulangan tak terbatas.
Kamu bisa memakai:
Beberapa solusi seperti ini yang sesuai untuk skenario Anda; ketiga elemen tersebut harus bersarang seperti ini:
JSFiddle berfungsi dengan baik menurut .
sumber
#
adalah hack yang aturannya diawali dengan itu hanya ditafsirkan oleh IE7 dan di bawahnya. Anda mungkin lebih suka memasukkan aturan ini ke dalam lembar gaya khusus IE dengan menggunakan komentar bersyarat, dll.position: absolute; top: 50%; transform: translateY(-50%);
juga layak dan cukup populer ... (tidak sepertitop:50%;margin: - $halfHeight
Anda tidak perlu mengetahui ketinggian sebelumnya ...)Karena pertanyaan ini ditanyakan pada tahun 2012 dan kami telah berkembang pesat dengan dukungan browser untuk flexboxes, saya merasa jawaban ini wajib.
Jika tampilan penampung induk Anda adalah
flex
, maka yes ,margin: auto auto
(juga dikenal sebagaimargin: auto
) akan bekerja untuk memusatkannya baik secara horizontal maupun vertikal, terlepas dari apakah itu elemeninline
ataublock
.Perhatikan bahwa lebar / tinggi tidak harus ditentukan secara mutlak, seperti dalam contoh ini jfiddle yang menggunakan ukuran relatif terhadap viewport.
Meskipun dukungan browser untuk flexboxes selalu tinggi pada saat posting, banyak browser masih tidak mendukungnya atau membutuhkan prefiks vendor. Lihat http://caniuse.com/flexbox untuk informasi dukungan browser terbaru.
Memperbarui
Karena jawaban ini mendapat sedikit perhatian, saya juga ingin menunjukkan bahwa Anda tidak perlu menentukan
margin
sama sekali jika Anda menggunakandisplay: flex
dan ingin memusatkan semua elemen dalam wadah:sumber
Inilah solusi terbaik yang saya temukan: http://jsfiddle.net/yWnZ2/446/ Bekerja di Chrome, Firefox, Safari, IE8-11 & Edge.
Jika Anda telah dideklarasikan
height
(height: 1em
,height: 50%
, dll) atau itu merupakan elemen mana browser tahu ketinggian (img
,svg
, ataucanvas
misalnya), maka semua yang Anda butuhkan untuk centering vertikal adalah ini:Anda biasanya ingin menentukan satu
width
ataumax-width
lebih konten tidak meregangkan seluruh panjang layar / wadah.Jika Anda menggunakan ini untuk modal yang Anda inginkan selalu berpusat di area pandang yang tumpang tindih dengan konten lain, gunakan
position: fixed;
untuk kedua elemen, bukanposition: absolute
. http://jsfiddle.net/yWnZ2/445/Berikut artikel yang lebih lengkap: http://codepen.io/shshaw/pen/gEiDt
sumber
position: relative
ke induk, dan elemen akan dipusatkan di dalam induk. Saya membuat artikel yang jauh lebih besar di Smashing Magazine tentang teknik ini jika Anda ingin membaca lebih lanjut: coding.smashingmagazine.com/2013/08/09/…parent
- mengerti. Terima kasih banyak!display: table
untuk konten tinggi variabel. Jika tidak, metode ini akan berfungsi seperti yang diharapkan. Baca melalui Langgan untuk rincian lebih lanjut secara keseluruhan. Anda juga harus dapat menguji tampilan penuh di IE8 / 9 untuk melihat apakah ada masalah.Sunting: ini tahun 2020, saya akan menggunakan kotak fleksibel sebagai gantinya.
Jawaban asli:
Html
CSS
sumber
Saya tahu pertanyaannya berasal dari tahun 2012, tetapi saya menemukan cara termudah yang pernah ada, dan saya ingin berbagi.
HTML:
dan CSS:
sumber
Jika Anda mengetahui tinggi div yang ingin dipusatkan , Anda dapat memposisikannya secara absolut di dalam induknya lalu menyetel
top
nilainya ke50%
. Itu akan menempatkan bagian atas div anak 50% dari jalan ke bawah induknya, yaitu terlalu rendah. Tarik kembali dengan mengaturnyamargin-top
setengah tingginya. Jadi sekarang Anda memiliki titik tengah vertikal div turunan yang berada di titik tengah vertikal induk - berpusat secara vertikal!Contoh:
http://jsfiddle.net/yWnZ2/2/
sumber
margin-top
tidak dapat disetel dalam% relatif terhadap tinggi elemen, jadi Anda akan mendapatkan penetapan tergantung dimensimargin-top
.Kedua solusi tersebut hanya membutuhkan dua elemen bersarang.
Pertama - Pemosisian relatif dan absolut jika kontennya statis (tengah manual).
https://jsfiddle.net/GlupiJas/5mv3j171/
atau untuk desain yang lancar - untuk penggunaan pusat konten yang tepat seperti contoh di bawah ini:
https://jsfiddle.net/GlupiJas/w3jnjuv0/
Anda perlu menyetel 'min-height' jika konten melebihi 50% dari tinggi jendela. Anda juga dapat memanipulasi ketinggian ini dengan kueri media untuk perangkat seluler dan tablet. Namun hanya jika Anda bermain dengan desain responsif.
Saya kira Anda bisa melangkah lebih jauh dan menggunakan skrip JavaScript / JQuery sederhana untuk memanipulasi min-height atau fixed height jika ada kebutuhan karena alasan tertentu.
Kedua - jika konten dapat mengalir, Anda juga dapat menggunakan properti css tabel dan sel tabel dengan perataan vertikal dan rata tengah teks:
dan
Berfungsi dan menskalakan dengan sempurna, sering digunakan sebagai solusi desain web responsif dengan tata letak kisi dan kueri media yang memanipulasi lebar objek.
https://jsfiddle.net/GlupiJas/4daf2v36/
Saya lebih suka solusi tabel untuk pemusatan konten yang tepat, tetapi dalam beberapa kasus, pemosisian relatif absolut akan melakukan pekerjaan yang lebih baik terutama jika kita tidak ingin mempertahankan proporsi yang tepat dari penyelarasan konten.
sumber
sumber
Tidak ada satu cara mudah untuk memusatkan div secara vertikal yang akan melakukan trik dalam setiap situasi.
Namun, ada banyak cara untuk melakukannya tergantung situasinya.
Berikut ini beberapa di antaranya:
Anda juga dapat menggunakan Google untuk "pemusatan vertikal css"
sumber
tinggi variabel, margin atas dan bawah otomatis
tinggi variabel, margin atas dan bawah otomatis
sumber
Menggunakan Flexbox:
HTML:
CSS:
Lihat hasil
sumber
sumber