Il problema
In alcuni browser l' <button>
elemento non accetta modifiche al suo display
valore, oltre al passaggio da block
e inline-block
. Ciò significa che un <button>
elemento non può essere un contenitore flessibile, una griglia o <table>
uno.
Oltre a <button>
elementi, si può trovare questo vincolo applicando <fieldset>
e <legend>
gli elementi, pure.
Vedere le segnalazioni di bug di seguito per maggiori dettagli.
Nota: sebbene non possano essere contenitori flessibili, gli <button>
elementi possono essere elementi flessibili.
La soluzione
Esiste una soluzione alternativa semplice e facile per tutti i browser a questo problema:
Avvolgi il contenuto di button
in a span
e crea il span
contenitore flessibile.
HTML modificato ( button
contenuto a capo in a span
)
<div>
<button>
<span>
<span>Test</span>
<span>Test</span>
</span>
</button>
<p>
<span>Test</span>
<span>Test</span>
</p>
</div>
CSS modificato (mirato span
)
button > span, p {
display: flex;
flex-direction: row;
justify-content: center;
}
Demo rivista
Riferimenti / Segnalazioni di bug
Flexbox su un <button>
blocca i contenuti ma non stabilisce un contesto di formattazione flessibile
Utente (Oriol Brufau): I figli del <button>
sono bloccati, come impone la specifica flexbox. Tuttavia, <button>
sembra stabilire un contesto di formattazione del blocco invece di uno flessibile.
Utente (Daniel Holbert): Questo è effettivamente ciò che richiede la specifica HTML. Diversi elementi contenitore HTML sono "speciali" ed effettivamente ignorano il loro display
valore CSS in Gecko [a parte se è a livello di riga o a livello di blocco]. <button>
è uno di questi. <fieldset>
e lo <legend>
sono anche.
Aggiunta del supporto per la visualizzazione: layout flessibile / griglia e colonne all'interno degli <button>
elementi
Utente (Daniel Holbert):
<button>
non è implementabile (dai browser) in puro CSS, quindi sono un po 'una scatola nera, dal punto di vista dei CSS. Ciò significa che non reagiscono necessariamente allo stesso modo, ad esempio, di un <div>
.
Questo non è specifico per flexbox - es. Non rendiamo le barre di scorrimento se metti overflow:scroll
un pulsante, e non la rendiamo come una tabella se ci metti display:table
sopra.
Facendo ancora un passo indietro, questo non è specifico per <button>
. Considera <fieldset>
e <table>
che hanno anche un comportamento di rendering speciale.
E i vecchi elementi HTML come <button>
e <table>
e <fieldset>
semplicemente non supportano i display
valori personalizzati , se non per rispondere alla domanda di alto livello "questo elemento è a livello di blocco o inline", per far scorrere altri contenuti attorno all'elemento .
Vedi anche: