Unlimited Wordpress themes, plugins, graphics & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Web Design
  2. CSS

Hinzufügen von RTL-Unterstützung zu Flexbox und CSS Grid

by
Read Time:8 minsLanguages:

German (Deutsch) translation by Zhang Xiang Liang (you can also view the original English article)

Logische Eigenschaften definieren einen neuen Ansatz, der die Art und Weise ändert, wie wir mit Layouts in CSS arbeiten. Neben vielen anderen Vorteilen ermöglichen sie uns, Layouts, die auf logischen Eigenschaften basieren, eine RTL-Sprachunterstützung (von rechts nach links) hinzuzufügen: Flexbox und CSS-Grid.

In diesem Tutorial verwenden wir zwei Tuts+ Demos aus früheren Tutorials und konvertieren sie, um zu sehen, wie einfach es ist, logischen Layouts RTL-Unterstützung hinzuzufügen:

Lassen Sie uns zunächst kurz sehen, wie logische Eigenschaften in CSS funktionieren.

1. Logische Layouts und Inhaltsausrichtung

Das Hauptziel der logischen CSS-Eigenschaften besteht darin, Entwicklern das einfache Umblättern von Layouts zu ermöglichen, wenn sich die Eigenschaften des writing-mode oder der direction ändern. Angenommen, Sie haben eine LTR-Website (von links nach rechts) und möchten diese in ein RTL-Skript übersetzen, wie es mit Arabisch oder Hebräisch verwendet wird. Wenn Sie in Ihrem CSS konsistent logische Eigenschaften verwendet haben, müssen Sie nur die direction: rtl; Regel auf der Seite hinzufügen und das Layout wird automatisch umgedreht.

Logische Eigenschaften verwenden eher logische als physikalische Anweisungen, um Layouts zu definieren. Beispielsweise entspricht das Schlüsselwort start in LTR-Skripten wie Latin left, während es in RTL-Skripten right entspricht. In ähnlicher Weise entspricht end in LTR right und in RTL-Skripten left. Aus diesem Grund ist es einfach, Layouts, die auf logischen Dimensionen basieren, RTL-Unterstützung hinzuzufügen.

Die logischen CSS-Eigenschaften haben drei Hauptanwendungsfälle:

  1. Flexbox (z.B. flex-start, flex-end)
  2. CSS-Grid (z.B. grid-row-start, grid-row-end, grid-column-start, grid-column-end)
  3. logische Entsprechungen häufig verwendeter Eigenschaften wie margin, padding, border, text-align und andere.

Wenn Sie Codebeispiele für die oben genannten Anwendungsfälle anzeigen möchten, lesen Sie meinen aktuellen Artikel über logische CSS-Eigenschaften.

Lassen Sie uns nun sehen, wie wir die logischen Eigenschaften nutzen können, um der Flexbox und dem CSS-Grid RTL-Unterstützung hinzuzufügen.

2. Hinzufügen von RTL-Unterstützung zu Flexbox

Im folgenden Beispiel wird mit Flexbox ein Layout für eine Nachrichtenwebsite erstellt (hier finden Sie das vollständige Tutorial). Es hat eine zentrierte Überschrift und enthält ein paar Karten unterschiedlicher Größe. Die Demo verwendet zwei Medienabfragen: 800px und 1000px. Die Anordnung der Karten hängt davon ab, welche Größe des Ansichtsfensters Sie in der Demo sehen:

Um eine RTL-Version des CSS zu erstellen, müssen wir nur eine Regel hinzufügen:

Und wie Sie unten sehen können, wurde die Demo bei jeder Ansichtsfenstergröße perfekt umgedreht - nicht nur der Text, sondern auch das Layout:

Warum war es so einfach dies zu tun?

Wenn in CSS-Layouts physische Anweisungen verwendet werden, können diese Ihre RTL-Bemühungen häufig durcheinander bringen. Wenn Sie sich das unten stehende CSS ansehen, werden Sie feststellen, dass keine physischen Anweisungen verwendet werden. Daher war es so einfach, das Layout umzudrehen (Textdekorationsregeln wie Schriftarten und Farben wurden aus Gründen der besseren Lesbarkeit aus dem Code entfernt):

Flexbox kümmert sich um das gesamte Layout, und Flexbox-Eigenschaften sind logische Eigenschaften. Größen- und Ausrichtungseigenschaften wie border, margin, padding und width können in bestimmten Fällen Probleme verursachen, da sie sich auf physikalische und nicht auf logische Richtungen stützen. In der Demo wird beispielsweise die padding-top Eigenschaft im alten Stil anstelle des brandneuen logischen Äquivalents padding-block-start,verwendet.

Da wir jedoch eine LTR-zu-RTL-Konvertierung durchführen möchten, müssen wir nur die horizontale (links-rechts) Achse umdrehen, nicht jedoch die vertikale (oben-unten). Der obige Code enthält nur Eigenschaften, die vertikale Richtungen definieren, z. B. padding-top und border-bottom. Diese bleiben in beiden Layouts gleich.

Da der Code keine Eigenschaften enthält, die horizontale Richtungen definieren (z. B. padding-left wäre so eine Eigenschaft ), müssen wir sie nicht an RTL-Skripte anpassen.

3. So fügen Sie dem CSS-Grid RTL-Unterstützung hinzu

Sehen wir uns nun die CSS-Grid-Demo an. Es definiert ein asymmetrisches Layout, das auf dem CSS-Raster basiert (hier ist das vollständige Tutorial):

Fügen wir dem CSS dieselbe direction Regel hinzu und sehen, wie das ursprüngliche Layout geändert wird:

So wurde die Demo umgedreht:

Obwohl die meisten Elemente wie erwartet umgedreht wurden, fehlt etwas. Wenn Sie die beiden Demos sorgfältig vergleichen, können Sie feststellen, dass das Kronenabzeichen zwischen den Bildern und der Überschrift "Gibraltar“ verschwunden ist.

the missing crownthe missing crownthe missing crown

Also, wo ist die Krone?

Das CSS gibt uns die Antwort, warum die Krone fehlt. Sie ist immer noch da, aber vor dem Hintergrund versteckt. Hier ist der CSS-Code der Demo (ohne Regeln für Farbe, Schriftart und andere Textdekorationen):

Der obige Code verwendet zahlreiche CSS-Rastereigenschaften wie grid-row, grid-column, grid-template-rows, und grid-template-columns. Da das CSS-Grid jedoch auf logischen und nicht auf physischen Dimensionen basiert, können gitterbezogene Eigenschaften nicht das Problem sein.

Das Problem ergibt sich aus anderen Eigenschaften, mit denen Elemente physisch in der horizontalen Dimension (links-rechts) positioniert werden:

Um RTL-Skripte zu unterstützen, müssen wir left und right wie folgt umkehren:

Wenn Sie sich die modifizierte RTL-Demo ansehen, können Sie sehen, dass die Krone wieder aufgetaucht ist und jetzt alles perfekt ausgerichtet ist:

Sie haben wahrscheinlich bemerkt, dass wir im modifizierten CSS anstelle der entsprechenden logischen Eigenschaft right verwendet haben. Dies liegt daran, dass die logischen Eigenschaften noch nicht produktionsbereit sind, da die Browserunterstützung noch etwas lückenhaft ist.

So würde das geänderte CSS jedoch mit dem logischen Äquivalent der right Eigenschaft aussehen:

Das Äquivalent von right ist inset-inline-start in RTL-Skripten, da dies der Anfang der Inline-Achse ist. In LTR-Skripten entspricht inset-inline-start jedoch left, da in diesem Fall die Zeilen links auf dem Bildschirm beginnen.

Wenn also die ursprüngliche Demo die logische Eigenschaft inset-inline-start anstelle der physischen left Richtung verwendet hätte, hätten wir das Layout von LTR in RTL konvertieren können, ohne Regeln anpassen zu müssen.

Unten sehen Sie dieselbe RTL-Demo mit logischen Eigenschaften. Ich habe auch aus Gründen der Konsistenz von top auf inset-block-start umgestellt.

Fazit

Mit den logischen CSS-Eigenschaften können wir Skripte von rechts nach links einfacher als je zuvor unterstützen. Wir können Seiten, die auf Flexbox und CSS-Grid basieren, schnell RTL-Unterstützung hinzufügen, da es sich um logische Layouts handelt, die nicht auf physischen Richtungen wie links, rechts, oben und unten beruhen.

Neben RTL-Sprachen können wir auch logische Eigenschaften verwenden, um Schreibmodi von oben nach unten in vertikale Sprachskripte wie Japanisch zu konvertieren. Weitere Informationen finden Sie in meinem vorherigen Tutorial!

Machen Sie sich mit CSS Layout vertraut

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.