Zusammenfassung der Kompatibilitätsprobleme beim Flex-Layout

Zusammenfassung der Kompatibilitätsprobleme beim Flex-Layout

1. W3C-Versionen von Flex

Version 2009
Flag: Anzeige: Box; oder eine Eigenschaft, die Box-{*} ist (z. B. Box-Pack)

Version 2011
Flags: Anzeige: Flexbox; oder die Funktion flex() oder die Eigenschaft flex-pack

Version 2012
Flags: Anzeige: Flex/Inline-Flex; und Flex-{*}-Eigenschaften

Version 2014
Neue Regeln für den Z-Index von Flex-Elementen hinzugefügt

2015 W3C-Redaktionsentwurf
Keine wesentlichen Änderungen

PS Bitte beachten Sie, dass es sich bei der Version 2015 um den W3C Editor's Draft handelt. Es handelt sich lediglich um einen Entwurf, der sich noch in der Überarbeitungsphase befindet. Die Meinungen der Browser-Anbieter wurden noch nicht eingeholt.

2. Browserkompatibilität

W3C-Spezifikation zu Flex: http://dev.w3.org/csswg/css-flexbox-1/

Informationen zur Browserkompatibilität finden Sie unter CanIUse: http://caniuse.com/#feat=flexbox

Laut den Daten von CanIUse lässt es sich wie folgt zusammenfassen:

  • IE10 unterstützt 2012 teilweise und erfordert das Präfix -ms-
  • Android 4.1/4.2-4.3 unterstützt teilweise 2009, erfordert das Präfix -webkit-
  • Safari7/7.1/8 unterstützt teilweise 2012, erfordert -webkit- Präfix
  • IOS Safari 7.0-7.1/8.1-8.3 unterstützt teilweise 2012, erfordert das Präfix -webkit-

Sie müssen also die neue Version 2012 berücksichtigen: http://www.w3.org/TR/2012/CR-css3-flexbox-20120918/

Und Android muss die alte Version 2009 berücksichtigen: http://www.w3.org/TR/2009/WD-css3-flexbox-20090723/

3. Browserkompatible Flex-Syntax

Die obige Analyse ist sehr klar. Verwenden Sie einfach die Syntax der entsprechenden Version für das Ziel, das kompatibel sein muss. Die häufig verwendeten Layoutcodes sind unten aufgeführt:

/* Kindelemente - gleichmäßig aufgeteilte Spalten*/
.flex1 {
  -webkit-box-flex: 1; /* ALT – iOS 6-, Safari 3.1-6 */
  -moz-box-flex: 1; /* ALT – Firefox 19- */
  Breite: 20 %; /* Für alte Syntax, sonst bricht es zusammen. */
  -webkit-flex: 1; /* Chrom */
  -ms-flex: 1; /* IE 10 */
  flex: 1; /* NEU, Spezifikation – Opera 12.1, Firefox 20+ */
}
/* Übergeordnetes Element - horizontale Anordnung (Hauptachse) */
.flex-h {
  Anzeige: Box; /* ALT - Android 4.4- */
  Anzeige: -webkit-box; /* ALT – iOS 6-, Safari 3.1-6 */
  Anzeige: -moz-box; /* ALT – Firefox 19- (fehlerhaft, funktioniert aber größtenteils) */
  Anzeige: -ms-flexbox; /* TWEENER – IE 10 */
  Anzeige: -webkit-flex; /* NEU – Chrome */
  Anzeige: flex; /* NEU, Spezifikation – Opera 12.1, Firefox 20+ */
  /* Version 09 */
  -webkit-box-orient: horizontal;
  /* Version 12 */
  -webkit-flex-direction: Zeile;
  -moz-flex-direction: Reihe;
  -ms-flex-direction: Zeile;
  -o-flex-direction: Reihe;
  Flex-Richtung: Reihe;
}
/* Übergeordnetes Element - horizontaler Zeilenumbruch */
.flex-hw {
  /* Version 09 */
  /*-webkit-box-lines: mehrere;*/
  /* Version 12 */
  -webkit-flex-wrap: umschließen;
  -moz-flex-wrap: umschließen;
  -ms-flex-wrap: umschließen;
  -o-flex-wrap: umwickeln;
  Flex-Wrap: Umwickeln;
}
/* Übergeordnetes Element - horizontale Mitte (funktioniert nur, wenn die Hauptachse horizontal ist) */
.flex-hc {
  /* Version 09 */
  -WebKit-Box-Pack: Mitte;
  /* Version 12 */
  -webkit-justify-content: zentrieren;
  -moz-justify-content: zentrieren;
  -ms-justify-content:center;
  -o-justify-content: zentrieren;
  Inhalt ausrichten: zentriert;
  /* Andere Werte sind wie folgt:
    align-items Richtet die Ursprungsrichtung der Hauptachse aus. flex-end Richtet die Verlängerungsrichtung der Hauptachse aus. space-between Mit gleichem Abstand anordnen, sodass am Anfang und Ende keine Leerzeichen bleiben. space-around Mit gleichem Abstand anordnen, sodass am Anfang und Ende keine Leerzeichen bleiben.*/
}
/* Übergeordnetes Element - vertikale Anordnung (Hauptachse) */
.flex-v {
  Anzeige: Box; /* ALT - Android 4.4- */
  Anzeige: -webkit-box; /* ALT – iOS 6-, Safari 3.1-6 */
  Anzeige: -moz-box; /* ALT – Firefox 19- (fehlerhaft, funktioniert aber größtenteils) */
  Anzeige: -ms-flexbox; /* TWEENER – IE 10 */
  Anzeige: -webkit-flex; /* NEU – Chrome */
  Anzeige: flex; /* NEU, Spezifikation – Opera 12.1, Firefox 20+ */
  /* Version 09 */
  -webkit-box-orient: vertikal;
  /* Version 12 */
  -webkit-flex-direction: Spalte;
  -moz-flex-direction: Spalte;
  -ms-flex-direction: Spalte;
  -o-flex-direction: Spalte;
  Flex-Richtung: Spalte;
}
/* Übergeordnetes Element - vertikaler Zeilenumbruch */
.flex-vw {
  /* Version 09 */
  /*-webkit-box-lines: mehrere;*/
  /* Version 12 */
  -webkit-flex-wrap: umschließen;
  -moz-flex-wrap: umschließen;
  -ms-flex-wrap: umschließen;
  -o-flex-wrap: umwickeln;
  Flex-Wrap: Umwickeln;
}
/* Übergeordnetes Element - vertikal zentriert (funktioniert nur, wenn die Hauptachse horizontal ist) */
.flex-vc {
  /* Version 09 */
  -webkit-box-align: zentriert;
  /* Version 12 */
  -webkit-align-items: zentrieren;
  -moz-align-items: zentrieren;
  -ms-align-items: zentrieren;
  -o-align-items: zentrieren;
  Elemente ausrichten: zentrieren;
}
/* Untergeordnetes Element – ​​wird an der ersten Position von links nach rechts (von oben nach unten) angezeigt und dient zum Ändern der Anzeigereihenfolge des Quelldokuments */
.flex-1 {
  -webkit-box-ordinal-group: 1; /* ALT – iOS 6-, Safari 3.1-6 */
  -moz-box-ordinal-group: 1; /* ALT – Firefox 19- */
  -ms-flex-order: 1; /* TWEENER – IE 10 */
  -webkit-order: 1; /* NEU – Chrome */
  Reihenfolge: 1; /* NEU, Spezifikation – Opera 12.1, Firefox 20+ */
}
/* Untergeordnetes Element – ​​wird an der zweiten Position von links nach rechts (von oben nach unten) angezeigt und dient zum Ändern der Anzeigereihenfolge des Quelldokuments */
.flex-2 {
  -webkit-box-ordinal-group: 2; /* ALT – iOS 6-, Safari 3.1-6 */
  -moz-box-ordinal-group: 2; /* ALT – Firefox 19- */
  -ms-flex-order: 2; /* TWEENER – IE 10 */
  -webkit-order: 2; /* NEU – Chrome */
  Reihenfolge: 2; /* NEU, Spezifikation – Opera 12.1, Firefox 20+ */
}

Für eine bessere Kompatibilität müssen wir für den Container flex-h/flex-v statt allgemeinem Flex deklarieren:

/* Übergeordnetes Element - Flex-Container */
.flex {
  Anzeige: Box; /* ALT - Android 4.4- */
  Anzeige: -webkit-box; /* ALT – iOS 6-, Safari 3.1-6 */
  Anzeige: -moz-box; /* ALT – Firefox 19- (fehlerhaft, funktioniert aber größtenteils) */
  Anzeige: -ms-flexbox; /* TWEENER – IE 10 */
  Anzeige: -webkit-flex; /* NEU – Chrome */
  Anzeige: flex; /* NEU, Spezifikation – Opera 12.1, Firefox 20+ */
}

Daher wird empfohlen, flex-h/flex-v zu verwenden, um den Container so zu deklarieren, dass er den Flex-Modus verwendet, wenn Android-Kompatibilität erforderlich ist (Syntax der Version 2009), und flex zu verwenden, um den Container einzurichten, wenn Android-Kompatibilität nicht erforderlich ist (Syntax der Version 2012).

Hinweis: Der oben angegebene Code ist nicht vollständig mit allen High-End-Browsern kompatibel, aber er ist kompatibler als jeder andere vorhandene Code. Spezifische Kompatibilitätstestergebnisse finden Sie in der Demo

4.Flex-Layout-Demo

Onlinetest: Demo

Testergebnisse:

  • Android 4.2.2 unterstützt keinen Zeilenumbruch
  • Die Leistung der Pseudoelementposition ist unter Android 4.2.2 inkonsistent
  • Die Leistung von iOS Safari 7.1 entspricht der von Chrome 28, Chrome 43 und Firefox
  • Bitte geben Sie mir weitere Testergebnisse, danke.

Hinweis: Aus den Testergebnissen können wir ersehen, dass Flex Layout Pseudoelemente als Elemente behandelt, um Platz zuzuweisen (das Dokument scheint zu erwähnen, dass die Einstellung position: fixed/absolute; für Pseudoelemente diese Situation vermeiden kann, aber dieser Artikel hat dies noch nicht überprüft). Wir hoffen jedoch im Allgemeinen, dass Pseudoelemente nur dekorative Effekte haben und das Layout nicht beeinflussen, was nicht mit unseren Erwartungen übereinstimmt. Seien Sie daher bei der Verwendung von Pseudoelementen in Flex-Layouts besonders vorsichtig, führen Sie möglichst viele Browser-Kompatibilitätstests durch oder verwenden Sie stattdessen Float-Layouts.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

<<:  Vue3.0 verwendet das Plug-In vue-grid-layout, um Drag-Layout zu implementieren

>>:  Erweiterte MySQL-Funktionen - detaillierte Erläuterung des Konzepts und des Mechanismus der Datentabellenpartitionierung

Artikel empfehlen

Fähigkeiten zur Erstellung von Webformularen

Tatsächlich haben die drei obigen Tabellen alle d...

Detaillierte Erklärung der CocosCreator-Optimierung DrawCall

Inhaltsverzeichnis Vorwort Was ist DrawCall Welch...

So fügen Sie einem Alpine-Image einen Ansible-Dienst hinzu

Verwenden Sie apk add ansible, um den Ansible-Die...

Häufig verwendete JavaScript-Array-Methoden

Inhaltsverzeichnis 1. filter() 2. fürJedes() 3. e...

Detaillierte Erklärung der Rolle des neuen Operators in Js

Vorwort Js ist heutzutage die am häufigsten verwe...

So erweitern Sie die Festplattenpartition für das CentOS-System

Problem/Fehler/Szenario/Anforderung Die Festplatt...

Detaillierte Erläuterung des Anwendungsbeispiels für den JQuery-Tag-Selektor

In diesem Artikelbeispiel wird der spezifische Co...

So implementieren Sie Code und Schritte für den digitalen Paging-Effekt in CSS

Eine beträchtliche Anzahl von Websites verwendet d...

Grundlagen der MySQL-Speicher-Engine

Im vorherigen Artikel haben wir über MySQL-Transa...

Tiefgreifendes Verständnis des Linux-Lastausgleichs LVS

Inhaltsverzeichnis 1. LVS-Lastausgleich 2. Grundl...