Saya ingin menggunakan flexbox yang memiliki beberapa item dengan lebar yang sama. Saya perhatikan bahwa flexbox mendistribusikan ruang sekitar secara merata, bukan ruang itu sendiri.
Sebagai contoh:
.header {
display: flex;
}
.item {
flex-grow: 1;
text-align: center;
border: 1px solid black;
}
<div class="header">
<div class="item">asdfasdfasdfasdfasdfasdf</div>
<div class="item">z</div>
</div>
Item pertama jauh lebih besar daripada yang kedua. Jika saya memiliki 3 item, 4 item, atau n item, saya ingin semuanya muncul pada baris yang sama dengan jumlah ruang per item yang sama.
Ada ide?
flex
properti adalah properti singkatan untukflex-grow
,flex-shrink
danflex-basis
properti. Dianjurkan untuk menggunakan steno di atas properti individual karena steno dengan benar mengatur ulang setiap komponen yang tidak ditentukan untuk mengakomodasi penggunaan umum. Nilai awal adalah0 1 auto
.min-width: 0
untuk mencapai menggunakan elemen anak dengan teks meluap. Lihat css-tricks.com/flexbox-truncated-textAnda dapat menambahkan
flex-basis: 100%
untuk mencapai ini.Contoh yang Diperbarui
Untuk apa nilainya, Anda juga bisa menggunakan
flex: 1
untuk hasil yang sama.Singkatan dari
flex: 1
sama denganflex: 1 1 0
, yang setara dengan:sumber
flex: 0 1 auto
. Yang berarti pengaturanflex: 1
akan menghasilkanflex: 1 1 auto
. Ini tidak akan berfungsi. Jawaban yang benar adalahflex: 1 1 0
seperti yang dinyatakan di atas oleh Adamflex: 1
hasilflex: 1 1 0
tidakflex: 1 1 auto
seperti yang Anda klaim. Lihatlah spesifikasi W3 resmi di bawah bagian 'steno cepat' : kapanflex-basis
"dihilangkan dari sten fleks, nilai yang ditentukan adalah0
", tidakauto
. Terima kasih atas downvote acak.flex: 1
danflex-direction: column
. Ketinggian anak-anak tidak sama ketika elemen-elemen lain ditempatkan di dalam anak-anak. Satu-satunya hal yang memperbaikinya adalah pengaturanflex: 1 1 0
. Masih berdiri hari ini dengan chromium 55.0.2883.87flex: 1
memiliki perilaku yang sama denganflex: 1 1 0
, danflex: 0 1 auto
memiliki perilaku yang berbeda.Anda perlu menambahkan
width: 0
untuk membuat kolom sama jika konten item membuatnya bertambah besar.sumber
.item
penyebabnya tumbuh lebih luas dari yang.item
seharusnya.flex: 1 1 0;
, alih-alihflex-grow: 1 1 0;
flex-basis
untuk0
melayani tujuan yang sama seperti mengaturwidth
untuk0
.Jawaban yang diterima oleh Adam (
flex: 1 1 0
) bekerja dengan sempurna untuk wadah flexbox yang lebarnya ditetapkan, atau ditentukan oleh leluhur. Situasi di mana Anda ingin anak-anak sesuai dengan wadah.Namun, Anda mungkin memiliki situasi di mana Anda ingin wadah tersebut cocok untuk anak-anak, dengan anak-anak berukuran sama berdasarkan anak terbesar. Anda dapat membuat wadah flexbox yang pas untuk anak-anaknya dengan:
position: absolute
dan bukan pengaturanwidth
atauright
, ataudisplay: inline-block
Untuk wadah flexbox seperti itu, jawaban yang diterima TIDAK bekerja, anak-anak tidak berukuran sama. Saya kira ini adalah batasan flexbox, karena berperilaku sama di Chrome, Firefox dan Safari.
Solusinya adalah dengan menggunakan kisi bukan flexbox.
Demo: https://codepen.io/brettdonald/pen/oRpORG
sumber
Saya bukan ahli dengan flex tetapi saya sampai di sana dengan menetapkan basis menjadi 50% untuk dua item yang saya hadapi. Tumbuh menjadi 1 dan menyusut ke 0.
Penataan inline:
flex: '1 0 50%',
sumber