Wie setzen Sie 'display' - Eigenschaft für das flex-Element
Ich versuche zu konvertieren alte layout basiert auf Tabellen und JS auf die neue Flexbox-mit Abwärtskompatibilität, indem die Tabellen für die alten Browser (speziell IE8, IE9 und Opera 10+).
Das problem ist, dass es keine display:flex-item
zu überschreiben, der alte Stil der display:table-cell
.
Ich habe versucht, verschiedene Definitionen wie display:inherit
, display:initial
aber keiner ist in der Lage, um die Anzeige zurücksetzen definition korrekt als flex-Element.
<!-- HTML user list -->
<div class="userDetails layout">
<div class="picture"><img src="..."></div>
<div class="details">username, email, etc.</div>
</div>
/* CSS Table Layout */
.layout { display: table; width: 100%; }
.layout > .picture { display: table-cell; width: 30%; }
.layout > .details { display: table-cell; width: auto; }
/* CSS Flexbox - ignored by browsers that does not support it */
/* just an example - should use all versions for best compatibility */
.layout { display: flex; }
.layout > .picture { display: ???; flex: 0 1 30%; }
.layout > .details { display: ???; flex: 1 1 auto; }
Was ich im display für die .details
es nicht funktioniert als " flex-Element und nicht wachsen füllen den übrigen Raum.
Eine Idee, wie man das überschreiben, ohne mit JS zu erkennen, browser-version und schalten Sie die Stile?
Ich habe versucht, googeln Lösung, aber die meisten Ergebnisse werden nur Allgemeine Artikel über Flexbox; nur ähnlich ist dieser test, die Sie einfach nicht lösen, die rückwärts compatility.
UPDATE 1:
Dies ist ein JSFiddle demo einer reinen Flexbox-und Flexbox-kombiniert-mit-Tisch-layout. Wenn Sie die Größe der Ergebnis-Fenster, das Reine layout schrumpft, anders als die untere, die kombinieren, Tisch und Flexbox.
Hinweis: in Chrome funktioniert dies ordnungsgemäß, versuchen Sie es in Firefox, IE, Safari, etc.
UPDATE 2:
Safari funktioniert einwandfrei mit dem Präfix-Definitionen... aktualisiert JSFiddle demo
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Danield erwähnt hat, alle Kinder der flex-container (gekennzeichnet durch
display: flex
oderdisplay: inline-flex
) werden automatisch flex-Elemente. Es gibt keinedisplay
- Eigenschaft für ein flex-Element; stattdessen legen Sie es auf einen anderen Wert, je nachdem, wie Sie wollen, dass die Kinder der flex-Element angelegt werden. Wenn Browser erkennendisplay: flex-item
, dann werden Sie wahrscheinlich haben einige seltsame nicht-standard-Implementierung von "flexbox", weil dieser Wert nie existiert hat, in irgendeiner Inkarnation des Flexbox-spec (und ich habe keine Ahnung, was genau es entsprechen würde, wenn Sie es haben).Den anfänglichen Wert
display
istinline
, sodisplay: initial
entsprichtdisplay: inline
. Sehen diese Antwort. Das, was du versuchst zu tun ist, zurücksetzen der Elemente, was auch immer Ihre Standard -display
ist als gegeben von Browsern. Sie müssen wissen, dieser Wert im Voraus; fürdiv
Elemente esdisplay: block
.Leider, dies überschreibt die vorhandenen
table-cell
Erklärung in allen Browsern, aus offensichtlichen Gründen. In diesem Fall, könnte man genauso gut einfach mit dem Tisch-layout, wenn es schon für Sie arbeitet, wenn Sie brauchen, um Unterstützung für Browser, die nicht unterstützen flexbox.Gibt es keine
display:flex-item
denn wenn Siedisplay:flex
auf ein container-element, die Kinder sind automatisch flex-Elemente.Hier ist eine demo zu zeigen, dass die
display:table-cell
auf die Kinder hat keinen Einfluss auf die Funktionalität des "flex-Eigenschaften" auf die KinderEdit: Für Firefox und IE, wenn Sie eine Regel hinzufügen
display:flex
nach derdisplay:table-cell
Regel dann derdisplay:table-cell
auf die Kinder hat keinen Einfluss auf die Funktionalität des "flex-Eigenschaften" auf die KinderCSS:
HTML:
display:flex
nach derdisplay:table-cell
Regel für die flex-Elemente, die es scheint zu funktionieren, in anderen Browsern auch. cssdeck.com/labs/bctqezgshinzufügen, flex-shrink die Eigenschaft zu verhindern, schrumpfen mehr als sein Inhalt