Masalah
Di beberapa browser, <button>
elemen tidak menerima perubahan pada display
nilainya, selain beralih antara block
dan inline-block
. Ini berarti bahwa <button>
elemen tidak bisa menjadi wadah flex atau grid, atau <table>
keduanya.
Selain <button>
unsur-unsur, Anda mungkin menemukan kendala ini berlaku untuk <fieldset>
dan <legend>
elemen, juga.
Lihat laporan bug di bawah untuk lebih jelasnya.
Catatan: Meskipun tidak bisa menjadi wadah fleksibel, <button>
elemen bisa menjadi item fleksibel.
Solusinya
Ada solusi lintas-browser yang sederhana dan mudah untuk masalah ini:
Bungkus isi button
dalam a span
, dan buat span
wadah fleksibel.
HTML yang disesuaikan (dibungkus button
konten dalam a span
)
<div>
<button>
<span>
<span>Test</span>
<span>Test</span>
</span>
</button>
<p>
<span>Test</span>
<span>Test</span>
</p>
</div>
CSS yang disesuaikan (bertarget span
)
button > span, p {
display: flex;
flex-direction: row;
justify-content: center;
}
Demo Revisi
Referensi / Laporan Bug
Flexbox pada suatu <button>
memblokir konten tetapi tidak membuat konteks pemformatan fleksibel
Pengguna (Oriol Brufau): Anak-anak dari <button>
diblokir, seperti yang ditentukan oleh spesifikasi flexbox. Namun, <button>
tampaknya membuat konteks pemformatan blok daripada yang fleksibel.
Pengguna (Daniel Holbert): Itulah yang dibutuhkan spesifikasi HTML. Beberapa elemen penampung HTML bersifat "khusus" dan secara efektif mengabaikan display
nilai CSS-nya di Gecko [selain dari apakah itu tingkat sebaris vs. tingkat blok]. <button>
adalah salah satunya. <fieldset>
& <legend>
juga.
Tambahkan dukungan untuk tampilan: flex / grid dan tata letak kolom di dalam <button>
elemen
Pengguna (Daniel Holbert):
<button>
tidak dapat diimplementasikan (oleh browser) dalam CSS murni, jadi itu adalah kotak hitam, dari perspektif CSS. Ini berarti bahwa mereka tidak selalu bereaksi dengan cara yang sama seperti misalnya keinginan <div>
.
Ini tidak spesifik untuk flexbox - misalnya kami tidak membuat scrollbar jika Anda meletakkan overflow:scroll
tombol, dan kami tidak membuatnya sebagai tabel jika Anda meletakkannya display:table
.
Melangkah mundur lebih jauh, ini tidak spesifik <button>
. Pertimbangkan <fieldset>
dan <table>
yang juga memiliki perilaku rendering khusus.
Dan elemen HTML lama seperti <button>
dan <table>
dan <fieldset>
tidak mendukung display
nilai khusus , selain untuk menjawab pertanyaan tingkat tinggi "apakah elemen ini tingkat blok atau tingkat sebaris", untuk mengalirkan konten lain di sekitar elemen .
Lihat juga: