Saya memusatkan DIV di dalam DIV lain menggunakan flexbox. Pikirkan jendela dialog yang muncul di tengah layar bila diperlukan.
Ini berfungsi dengan baik, namun akan terlihat jauh lebih baik jika ruang di atas dan di bawah dialog tidak persis sama, memiliki 40% dari ruang yang tersisa berada di atas dan 60% di bawah dialog. Itu menjadi rumit karena ketinggian dialog bervariasi dengan jumlah teks di dalamnya.
Jadi misalnya, jika tinggi browser 1000 px, dan tinggi jendela dialog adalah 400 px, saya ingin ruang vertikal yang tersisa (600 px) menjadi 240 px di atas dan 360 px di bawah dialog. Saya bisa melakukannya dengan Javascript, tapi saya ingin tahu apakah ada cara pintar dengan CSS. Saya mencoba menambahkan margin bawah ke #dialogBox DIV, tetapi itu tidak berfungsi ketika tinggi dialog semakin mendekati tinggi browser.
#dialogBoxPanel
{
position:absolute;
display:flex;
align-items:center;
justify-content:center;
left:0px;
top:0px;
width:100%;
height:100%;
}
#dialogBox
{
width:350px;
}
<div id="dialogBoxPanel">
<div id="dialogBox">Text</div>
</div>
Jawaban:
Gunakan elemen pseudo dan arah kolom untuk mensimulasikan ruang putih. Cukup sesuaikan
flex-grow
elemen pseudo untuk mengontrol berapa banyak ruang kosong yang harus diambil masing-masing. Flex-grow yang setara akan memberikan ruang yang sama:Tampilkan cuplikan kode
Anda juga dapat menggunakan
2
dan3
. Kami hanya perlu menjaga rasio yang sama:Tampilkan cuplikan kode
Gagasan lain adalah menggunakan nilai teratas sama dengan
40%
dan memperbaiki posisi dengan menerjemahkan (logika yang sama dengan50%
saat pemusatan)sumber
Solusi ini menggunakan
display: grid
, ini fitur baru jadi pastikan untuk memeriksa dukungan browser dan klik di sini untuk mempelajari lebih lanjut.Ini adalah garis yang mengontrol ruang atas dan bawah:
grid-template-rows: 40fr [content-start] auto [content-end] 60fr;
Konten teks potongan dapat diedit untuk Anda untuk memeriksa bahwa kotak tetap berada di tengah bahkan jika ketinggiannya berubah.
sumber
4fr auto 6fr
. Apa yang Anda miliki berfungsi tetapi dengan beberapa overflow karena 40% + 60% + 1fr akan selalu lebih besar dari 100% dan Anda memusatkan sehingga overlow akan dibagi rata dari atas dan bawah: jsfiddle.net/cobutn0e/2 . Anda juga akan melihat bahwa itu tidak 100% seperti yang diharapkan1fr=minmax(auto,1fr)
dan dalam kasus Anda itu akan jatuh keauto
karena tidak ada ruang kosong sejak 40% + 60% = 100% (itu sebabnya Anda akan selalu memiliki meluap)Anda dapat menambahkan div spacer dan mengatur flex-grow dengan rasio 4: 6.
sumber
Cara sederhana menggunakan posisi dan margin, saya berasumsi bahwa tinggi dialog Anda selalu 40% dari tinggi browser.
HTML
sumber