Flexbox funktioniert nicht auf den button oder fieldset-Elemente
Ich versuche, Zentrum innere Elemente einer <button>
-tag mit flexbox ist justify-content: center
. Aber Safari nicht center Sie. Ich kann den gleichen Stil zu jedem anderen tags und es funktioniert wie vorgesehen (siehe <p>
-tag). Nur der button ist Links ausgerichtet.
Versuchen Sie Firefox oder Chrome, und Sie können den Unterschied sehen.
Gibt es eine user-agent-Stil, den ich überschreiben? Oder, eine andere Lösung zu diesem problem?
CSS:
div {
display: flex;
flex-direction: column;
width: 100%;
}
button, p {
display: flex;
flex-direction: row;
justify-content: center;
}
HTML:
<div>
<button>
<span>Test</span>
<span>Test</span>
</button>
<p>
<span>Test</span>
<span>Test</span>
</p>
</div>
Und ein jsfiddle:
http://jsfiddle.net/z3sfwtn2/2/
- Ähnliches Problem: Warum kann nicht <fieldset> flex-Container?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Problem
Das problem ist, dass einige Browser noch nicht entwickelt, die
<button>
- element eine flex (oder grid) container.Mehr technisch, in einigen Browsern die
<button>
element nicht akzeptieren, die änderungen an seinendisplay
Wert, jenseits der Wechsel vonblock
undinline-block
. Dies bedeutet, dass ein<button>
element kann nicht ein<table>
entweder.Kann Ihnen dieses Verhalten auch anwenden zu
<fieldset>
und<legend>
Elemente.Siehe die bug-reports unten für mehr details.
Hinweis: auch wenn Sie nicht flex-Container,
<button>
Elemente können flex-Elemente.Die Lösung
Gibt es eine einfache und einfache cross-browser-Lösung für dieses problem:
Wrap-der Inhalt der
button
imspan
, und stellen Sie diespan
die flex-container.Angepasst, HTML (gewickelt
button
Inhalte in einerspan
)Eingestellt CSS (gezielte
span
)Überarbeitete Demo
Referenzen /Bug-Reports
Flexbox auf ein
<button>
blockifies den Inhalt, aber nicht die Schaffung eines flex-Kontext FormatierungHinzufügen von Unterstützung für display:flex/grid-layout und ColumnSet geben innerhalb von
<button>
- ElementeSiehe auch:
<button>
s, aber warum auf der Erde ist es nicht die Arbeit für<fieldset>
entweder? Sollte das nicht element als ein regulärer block-level-element ist gültig für ein flex-container?<button>
gut funktioniert, wie eineflex-container
in Chrom 76 und Safari 12.1. Aber beide sind fehlerhaft, wenn Sie die Taste ein Kinddisplay:grid
. Siehe codepen.io/urlyman/pen/rXqmqY. Firefox-68 hält.<button>
nicht entworfen, um eine flex - (oder raster -) container? Es sieht aus wie der Browser bezüglich der Unfähigkeit set display auf diese Elemente als einen Fehler und aktiv zu fixieren.div
in einer Schaltfläche gültiges HTML?div
kann nicht ein Kind von einembutton
weil, wenn Sie denken, dass es in old-school-HTML, ein block-level-element kann nicht ein Kind von einem inline-level-element. Aber heute, mit HTML5, die technisch richtige Antwort ist, dass einbutton
element kann nur akzeptieren, Phrasing Content. Einspan
stellt Phrasing Content, aber einediv
nicht. Eindiv
stellt Flow Content. detailsHier ist meine einfachste hack.