CSS · Typografie · Internationalisierung · Layouts
CSS Writing Modes
vertikale und internationale Layouts

CSS Writing Modes gehen weit über vertikale Typografie hinaus. Sie definieren das gesamte Koordinatensystem, in dem Inline-Achse und Block-Achse liegen — und damit auch, wie Margins, Paddings, Widths und Flows in RTL-, LTR- und vertikalen Layouts korrekt funktionieren, ohne physische Eigenschaften zu verwenden.

16 Min. Lesezeit writing-mode · text-orientation · RTL · LTR · CJK · logische Properties Alle modernen Browser · Safari · Firefox

1. Writing Modes: mehr als nur vertikaler Text

CSS Writing Modes sind oft mit vertikaler Typografie gleichgesetzt — dabei beschreiben sie das fundamentale Koordinatensystem des CSS-Layout-Modells. Jedes Element hat eine Inline-Achse (die Richtung, in der Text fließt) und eine Block-Achse (die Richtung, in der Blöcke gestapelt werden). Für horizontales Westeuropäisch: Inline läuft von links nach rechts, Block läuft von oben nach unten. Für Japanisch vertikal von rechts: Inline läuft von oben nach unten, Block läuft von rechts nach links.

Das Verständnis dieser Achsen ist entscheidend für moderne CSS-Architekturen, weil alle Flexbox- und Grid-Konzepte (Hauptachse, Querachse, justify-content, align-items) ebenfalls auf der Inline/Block-Achse aufgebaut sind — nicht auf physischen Richtungen. Wenn sich der writing-mode ändert, drehen sich diese Achsen mit, und Flexbox/Grid-Layouts passen sich automatisch an. Das ist kein zufälliges Feature, sondern ein durchdachtes Design-Prinzip, das die Basis für echte Internationalisierung im Web bildet.

2. writing-mode — die vier Hauptwerte erklärt

Die CSS-Property writing-mode hat vier Hauptwerte. horizontal-tb ist der Standard für westliche Sprachen: Text fließt horizontal, Blöcke stapeln sich von oben nach unten. vertical-rl ist der traditionelle Wert für ostasiatische vertikale Texte: Text fließt von oben nach unten, Zeilen stapeln sich von rechts nach links — klassisch für japanische Literatur und traditionelle chinesische Schrift. vertical-lr ist das Spiegelbild: Text fließt von oben nach unten, Zeilen stapeln sich von links nach rechts — selten verwendet, aber z.B. in mongolischer Schrift und einigen technischen Diagrammen. Der vierte Wert sideways-rl und sideways-lr rotieren den gesamten Textblock um 90 Grad — nützlich für Tab-Labels und seitliche Navigationen.

Ein wichtiger technischer Aspekt: Wenn writing-mode auf vertical-rl oder vertical-lr gesetzt wird, wechseln auch width und height ihre logische Bedeutung. Was physisch als width definiert ist, wird zur Block-Dimension (die vertikale Ausdehnung des Texts), und height wird zur Inline-Dimension. Das ist einer der Gründe, warum logische Eigenschaften wie inline-size und block-size vorzuziehen sind: Sie bleiben relativ zur Schreibrichtung korrekt, unabhängig von writing-mode-Änderungen.


/* The four writing-mode values and their effects */

/* Standard horizontal: text flows left-to-right, blocks top-to-bottom */
.horizontal-ltr {
  writing-mode: horizontal-tb;
  direction: ltr; /* Default */
}

/* Traditional CJK vertical: text flows top-to-bottom, columns right-to-left */
.vertical-japanese {
  writing-mode: vertical-rl;
  /* inline-size now controls the height, block-size controls the width */
}

/* Vertical left-to-right: text flows top-to-bottom, columns left-to-right */
.vertical-ltr {
  writing-mode: vertical-lr;
  /* Used in: Mongolian script, some technical diagrams */
}

/* Rotated sideways: entire block rotated 90 degrees */
.sidebar-label {
  writing-mode: sideways-lr;
  /* Useful for: tab labels, rotated headings, column headers */
}

/* writing-mode affects how width/height map to logical dimensions:
   In horizontal-tb: width = inline-size, height = block-size
   In vertical-rl:   width = block-size,  height = inline-size */

.responsive-box {
  /* Physical — breaks with writing-mode changes */
  width: 200px;  /* horizontal: inline, vertical: block */

  /* Logical — always inline dimension regardless of writing-mode */
  inline-size: 200px; /* Preferred for internationalized layouts */
}

3. text-orientation — Zeichenausrichtung in vertikalen Layouts

Wenn writing-mode auf vertical-rl oder vertical-lr steht, stellt sich die Frage, wie einzelne Zeichen ausgerichtet werden. Die Property text-orientation steuert genau das. Der Wert mixed ist der Standard: CJK-Zeichen (Chinesisch, Japanisch, Koreanisch) werden aufrecht positioniert (stehen gerade), während lateinische Buchstaben um 90 Grad rotiert werden. Der Wert upright stellt alle Zeichen aufrecht — auch Buchstaben aus lateinischen Schriften werden aufrecht positioniert, was für dekorative Effekte oder bestimmte sprachliche Anforderungen nützlich ist. sideways rotiert alle Zeichen um 90 Grad, einschließlich CJK-Zeichen.

Für japanische Webprojekte ist das Zusammenspiel von writing-mode: vertical-rl und text-orientation: mixed der Standard. CJK-Zeichen, die naturgemäß für vertikales Lesen ausgelegt sind, werden aufrecht gestellt, während eingebettete englische Wörter oder Zahlen rotiert erscheinen — was dem natürlichen japanischen Lesegefühl entspricht. Für rein typografische Effekte in westlichen Sprachen (z.B. ein gedrehter Kapitelname in einem Buchdesign) ist text-orientation: sideways die passende Wahl, weil es alle Zeichen als zusammenhängende Einheit rotiert statt einzeln aufrechtzustellen.

4. CJK-Typografie: chinesisch, japanisch, koreanisch vertikal

Vertikale CJK-Typografie ist ein komplexes Gebiet, das über einfaches Setzen von writing-mode: vertical-rl hinausgeht. Traditionelles Japanisch verwendet vertikale Schrift mit Furigana-Rubytext (Aussprachehinweise über oder neben Kanji-Zeichen), Tate-Chu-Yoko (horizontale Einschübe in vertikalem Text für Zahlen oder Abkürzungen) und spezifische Zeichensatz-Anforderungen. CSS unterstützt diese Konzepte über die ruby-Elemente und das text-combine-upright-Property.

text-combine-upright (auch bekannt als Tate-Chu-Yoko) ermöglicht es, kurze Zeichenfolgen — typischerweise zwei- bis vierstellige Zahlen — in einem vertikalen Text-Kontext horizontal inline darzustellen. text-combine-upright: all wendet dies auf alle Zeichen eines Elements an, text-combine-upright: digits 2 speziell auf zwei aufeinanderfolgende Ziffern. Dieses Feature ist für professionelle japanische Webentwicklung unverzichtbar und wird in Chrome, Safari und Firefox unterstützt. Die Kombination aus writing-mode: vertical-rl, text-orientation: mixed und text-combine-upright bildet das vollständige CSS-System für japanische Vertikaltypografie.


/* Complete CJK vertical typography setup */

.article-japanese {
  writing-mode: vertical-rl;
  text-orientation: mixed;    /* CJK upright, Latin rotated */
  font-family: "Noto Serif CJK JP", "Yu Mincho", serif;
  line-height: 1.8;           /* Generous spacing for vertical reading */

  /* In vertical mode: width controls number of columns (block dimension) */
  inline-size: 100%;          /* Full height of the container */
}

/* Tate-Chu-Yoko: inline horizontal numbers in vertical text */
.tcy {
  text-combine-upright: all;  /* Numbers/short sequences shown horizontally */
}

/* Example: 2024年 → "20" combined, "24" combined, "年" upright */
.year-digits {
  text-combine-upright: digits 4; /* Combine up to 4 consecutive digits */
}

/* Ruby annotations for furigana */
ruby {
  ruby-position: over;        /* In vertical: over = right side of character */
}

/* Chinese traditional vertical — right-to-left column order */
.article-traditional-chinese {
  writing-mode: vertical-rl;
  text-orientation: upright;  /* All CJK upright, which is default for CJK */
}

/* Korean vertical — less common, mostly horizontal */
.korean-vertical-decoration {
  writing-mode: vertical-lr;
  text-orientation: upright;
}

5. Logische CSS-Eigenschaften: das Ende von margin-left

Logische CSS-Eigenschaften sind das komplementäre System zu CSS Writing Modes. Statt margin-left und margin-right verwendet man margin-inline-start und margin-inline-end. Statt padding-top und padding-bottom verwendet man padding-block-start und padding-block-end. Diese Properties sind relativ zur aktuellen Inline- und Block-Achse, nicht zu physischen Richtungen. Wenn writing-mode oder direction wechselt, passen sich logische Properties automatisch an.

Die Kurzschreibweisen margin-inline, margin-block, padding-inline und padding-block erlauben das gleichzeitige Setzen beider Seiten einer Achse — ähnlich wie margin: 0 auto, aber achsen-relativ. Für zentrierte Layouts ist margin-inline: auto die logische Alternative zu margin-left: auto; margin-right: auto. Die Dimensionseigenschaften inline-size und block-size ersetzen width und height, und min-inline-size, max-inline-size, min-block-size, max-block-size ergänzen das System vollständig. Browser-Support ist in allen modernen Browsern gegeben.

6. RTL-Layouts: Arabisch und Hebräisch in CSS

Rechts-nach-links-Schriften wie Arabisch und Hebräisch erfordern nicht nur gespiegelten Text, sondern ein vollständig umgekehrtes Layout. Das HTML-Attribut dir="rtl" aktiviert die RTL-Textrichtung, die CSS-Property direction: rtl ergänzt das CSS-seitig. In RTL-Kontext läuft die Inline-Achse von rechts nach links, Block-Elemente stapeln sich weiterhin von oben nach unten. Alle logischen CSS-Eigenschaften passen sich automatisch an: margin-inline-start ist dann rechts, margin-inline-end ist links.

Für internationalisierte CSS-Architekturen gilt das Prinzip: Physische Eigenschaften (margin-left, padding-right, float: left, border-left) müssen für RTL-Sprachen explizit überschrieben werden. Logische Properties (margin-inline-start, padding-inline-end, float: inline-start, border-inline-start) funktionieren automatisch korrekt in beiden Richtungen. Das Umschreiben eines CSS-Frameworks von physischen auf logische Properties ist der größte Schritt zur echten Internationalisierbarkeit — und verringert gleichzeitig die Menge an RTL-Override-Styles erheblich.

7. Mehrsprachige Seiten: CSS-Architektur für globale Projekte

Eine mehrsprachige Seite, die LTR-Sprachen (Deutsch, Englisch, Japanisch vertikal) und RTL-Sprachen (Arabisch, Hebräisch) unterstützen soll, braucht eine durchdachte CSS-Architektur. Die Basis: Alle Layout-Properties konsequent als logische Eigenschaften definieren. Das :lang()-Pseudo-Klassen-Selektor erlaubt sprachspezifisches CSS ohne zusätzliche Klassen — :lang(ar) für Arabisch, :lang(ja) für Japanisch, :lang(he) für Hebräisch. Das HTML-lang-Attribut, korrekt gesetzt, aktiviert sowohl Browser-interne Lese-Heuristiken als auch die CSS-Selektor-Kaskade.

Ein wichtiger Aspekt für mehrsprachige CSS Writing Modes: Flexbox und Grid reagieren auf direction und writing-mode, aber nur wenn logische Properties verwendet werden. justify-content: flex-start bedeutet in RTL dann "rechts" — exakt das gewünschte Verhalten. Mit physischen Properties (text-align: left statt text-align: start) würde der Entwickler RTL-Override-Styles schreiben müssen. Das text-align: start-Wert ist der logische Pendant zu left/right und passt sich automatisch an.


/* International CSS architecture with logical properties */

/* Base: all spacing uses logical properties */
.card {
  padding-inline: 1.5rem;     /* left/right in LTR, right/left in RTL */
  padding-block: 1rem;        /* top/bottom — same in all writing modes */
  margin-inline: auto;        /* Center block: equivalent of margin: 0 auto */
  border-inline-start: 4px solid currentColor; /* Left in LTR, right in RTL */
  border-radius: 0.75rem;
  inline-size: min(100%, 640px); /* Width (or height in vertical mode) */
}

/* Text alignment — logical values */
.card-title {
  text-align: start;          /* Left in LTR, right in RTL — automatic */
}

/* Language-specific overrides */
:lang(ar) {
  font-family: "Noto Sans Arabic", sans-serif;
  /* direction: rtl is set via HTML dir="rtl" — no CSS override needed */
}

:lang(ja) .article-body {
  writing-mode: vertical-rl;
  text-orientation: mixed;
}

/* Float using logical values */
.pull-quote {
  float: inline-start;        /* Left in LTR, right in RTL */
  margin-inline-end: 1.5rem;  /* Space after the floated element */
}

/* Inset shorthand — logical equivalent of top/right/bottom/left */
.tooltip {
  position: absolute;
  inset-inline-start: 0;      /* left in LTR, right in RTL */
  inset-block-start: 100%;    /* top always */
}

8. Physische vs. logische Eigenschaften im Vergleich

Die Entscheidung zwischen physischen und logischen CSS-Eigenschaften hat direkte Auswirkungen auf die Wartbarkeit internationalisierter Projekte. Mit physischen Properties entsteht zwangsläufig ein zweites Stylesheet oder eine Klassen-Schicht für RTL-Überschreibungen. Mit logischen Properties funktioniert dieselbe Regel in LTR und RTL korrekt, ohne Override.

Physisch Logisch RTL-sicher vertical-rl-sicher
margin-left margin-inline-start Ja Ja
padding-right padding-inline-end Ja Ja
width inline-size Gleich Ja
text-align: left text-align: start Ja Gleich
border-left border-inline-start Ja Ja

9. Writing Modes für dekorative Typografie-Effekte

CSS Writing Modes werden nicht nur für Internationalisierung genutzt, sondern auch für dekorative Typografie-Effekte in westlichen Designs. Gedrehte Kapitelbezeichnungen in Buchdesigns, vertikale Tab-Labels, seitliche Statusbadges auf Produktkarten oder Wasserzeichen-ähnliche Hintergrundtexte — all das kann mit writing-mode: vertical-rl und text-orientation: sideways realisiert werden. Der Vorteil gegenüber transform: rotate(): Das Element nimmt im Dokumentfluss den Platz ein, den es in seiner rotatierten Form benötigt — kein Überlapp mit benachbarten Elementen.

Ein konkreter Anwendungsfall: Tabellenköpfe, die in einer kompakten Ansicht vertikal stehen sollen, um Spaltenplatz zu sparen. Statt schmalen Spalten mit abgeschnittenem Text setzt man writing-mode: vertical-rl; transform: rotate(180deg) auf die th-Elemente — die rotate(180deg)-Korrektur dreht die Leserichtung von unten-nach-oben zu oben-nach-unten. Das Ergebnis: kompakte Tabellen mit vollständigen, lesbaren Überschriften ohne Abkürzungen. Die Kombination aus writing-mode und transform für diesen Zweck ist etabliertes Best Practice für dichte Datentabellen.

Mironsoft

Internationale CSS-Architekturen, Hyvä-Themes und mehrsprachige Magento-Shops

Mehrsprachigen Shop oder RTL-Support implementieren?

Wir entwickeln internationale CSS-Architekturen für Magento-Shops mit logischen Properties, korrektem RTL-Support für arabische Märkte und schreiben Hyvä-Themes, die writing-mode-Änderungen ohne Layout-Brüche überstehen.

RTL-Implementierung

Arabisch- und Hebräisch-Support in Magento-Themes mit logischen CSS-Properties

CSS-Refactoring

Physische Properties auf logische umschreiben — einmalige Arbeit, dauerhaft wartbar

Mehrsprachig

CSS-Architektur für Shops in DE, AR, JA, HE und weiteren Sprachen in einem Theme

10. Zusammenfassung

CSS Writing Modes definieren das Koordinatensystem, auf dem das gesamte CSS-Box-Modell und Flexbox/Grid aufgebaut sind. Das Verständnis von Inline-Achse und Block-Achse ist die Voraussetzung für korrekte Internationalisierung: Wenn writing-mode oder direction wechselt, drehen sich diese Achsen mit — und alle logischen Properties passen sich automatisch an. text-orientation: mixed ist der Standard für CJK-Vertikaltypografie, text-combine-upright ermöglicht Tate-Chu-Yoko für Zahlen in japanischen Texten. Logische Eigenschaften wie margin-inline-start, padding-block, inline-size und text-align: start ersetzen physische Properties und machen CSS RTL-sicher ohne Override-Styles.

Für internationale Webprojekte ist der Wechsel von physischen zu logischen Properties die wichtigste Investition. Ein CSS-System, das von Anfang an logische Properties verwendet, braucht für RTL-Support nur dir="rtl" im HTML und ein Schrift-Override im CSS — keine zweite Stylesheet-Ebene, keine [dir="rtl"] .element { margin-left: 0; margin-right: 1rem; }-Override-Flut. CSS Writing Modes in Kombination mit logischen Properties bilden das vollständige, wartbare Fundament für globale Webprojekte.

CSS Writing Modes — Das Wichtigste auf einen Blick

Achsensystem

Inline-Achse (Textfluss) und Block-Achse (Stapelrichtung) drehen sich mit writing-mode mit. Alle logischen Properties folgen diesen Achsen.

Logische Properties

margin-inline-start, padding-block, inline-size, text-align: start — RTL/LTR-agnostisch. Kein Override-Stylesheet für RTL-Sprachen nötig.

CJK vertikal

writing-mode: vertical-rl + text-orientation: mixed + text-combine-upright: digits — vollständiges System für japanische Vertikaltypografie.

RTL-Support

HTML: dir="rtl". CSS: logische Properties ohne Änderung korrekt. :lang(ar) für schriftspezifische Fonts. float: inline-start statt float: left.

11. FAQ: CSS Writing Modes

1Was macht CSS writing-mode?
Definiert Inline-Achse (Textfluss) und Block-Achse (Stapelrichtung). Beeinflusst gesamtes Layout-System — Flexbox, Grid und logische Properties folgen diesen Achsen.
2horizontal-tb vs. vertical-rl?
horizontal-tb: Standard, links-rechts + oben-unten. vertical-rl: Text oben-unten, Zeilen stapeln rechts-nach-links. Traditionell für japanische und chinesische Texte.
3Logische Properties für internationale Layouts?
margin-inline-start, padding-block, inline-size — relativ zu Inline/Block-Achse. In RTL automatisch korrekt — kein separates Override-Stylesheet nötig.
4Was macht text-orientation?
Zeichenausrichtung in vertikalen Layouts. mixed: CJK aufrecht, Latein rotiert. upright: alle aufrecht. sideways: alle rotiert. Standard ist mixed — korrekt für CJK.
5Was ist text-combine-upright?
Tate-Chu-Yoko: kurze Zeichenfolgen (Zahlen) in vertikalem Text horizontal als Einheit. text-combine-upright: digits 2. Pflicht für japanische Profitypografie im Web.
6RTL-Support für Arabisch implementieren?
HTML: dir='rtl'. CSS: logische Properties — keine Änderung nötig. :lang(ar) für arabischen Font. Kein separates RTL-Stylesheet bei korrekter Architektur.
7writing-mode ändert width/height-Bedeutung?
Ja. In vertical-rl wird width zur Block-Dimension, height zur Inline-Dimension. inline-size und block-size bleiben konsistent. Logische Properties bevorzugen.
8Tabellenköpfe vertikal drehen?
writing-mode: vertical-rl; transform: rotate(180deg) auf th. rotate(180deg) korrigiert Leserichtung auf oben-nach-unten. Element nimmt vertikalen Platz im Fluss ein.
9Flexbox in RTL korrekt?
Ja, mit logischen Values. justify-content: flex-start bedeutet RTL rechts. text-align: start, float: inline-start passen sich automatisch an direction an.
10:lang() Selektor nutzen?
:lang(ar), :lang(ja) matchen über HTML-lang-Attribut — kein extra CSS-Klassen. Sprachspezifische Fonts, writing-mode und Typografie ohne zusätzliche Markup-Komplexität.