Schreib- und Leserichtung mit HTML und CSS

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Es scheint selbstverständlich, dass Webseiten automatisch von links nach rechts und von oben nach unten laufen. Das ist für Sprachen wie Deutsch, Englisch oder Französisch selbstverständlich – aber keineswegs für alle Schriftsysteme.

Arabisch und Hebräisch werden beispielsweise von rechts nach links geschrieben und gelesen. Bei manchen ostasiatischen Schriftsystemen kann Text außerdem von oben nach unten verlaufen.

HTML und CSS bieten deshalb verschiedene Möglichkeiten, die Schreib- und Leserichtung eines Textes festzulegen und die Darstellung daran anzupassen.[1]

Schreibrichtung mit HTML

Damit der Text bei der Anzeige einer HTML-Seite richtig aussieht, müssen wir den Richtungskontext des Textes festlegen. Wir bezeichnen diesen Kontext als die Basisrichtung für den Text.

Es ist von grundlegender Bedeutung, die richtige Basisrichtung für den bidirektionalen Unicode-Algorithmus festzulegen. Die korrekte Angabe der Basisrichtung legt die korrekte Standardausrichtung für den Text, aber auch die Richtung des Elementflusses (z. B. bei flex-direction) fest.

dir – Schreibrichtung festlegen

Die Basisrichtung wird entweder explizit durch das nächstgelegene übergeordnete Element mit einem dir-Attribut festgelegt, oder, in Ermangelung eines solchen Attributs, von der Standardrichtung des Dokuments geerbt, die links-nach-rechts (LTR) ist.


Schreibrichtung in HTML festlegen ansehen …
<h1 dir="ltr">Laufrichtung mit <code>dir</code> auslesen</h1>
<main dir="ltr">
	<h2 lang="de" dir="ltr">Sprachvielfalt</h2>
	<p id="hinweis" lang="de" dir="ltr">Klicken Sie irgendwo auf die Seite. Es wird dann angezeigt, ob, und wenn ja welche Laufrichtung (dir) das Element hat.</p>
	<p class="absatz" lang="ar" dir="rtl">اسمي ستيفان</p>

bdo – Schreibrichtung umkehren

Das bdo-Element (engl. für bidirectional overwrite) dient dazu die Textrichtung innerhalb eines Fließtextes zu ändern.

Schreibrichtung in HTML umkehren ansehen …
<p> Eines der arabischen Wörter für Frieden, 
    <bdo lang="ar" dir="rtl">سلام</bdo>, kennt
    man sicher von der Grußformel "as-salāmu ʿalaikum", 
    <bdo lang="ar" dir="rtl">السلام عليكم</bdo>.
</p>

Innerhalb des Absatzes gibt es einige Wörter mit geänderter Schreibrichtung (Das Wort Salām findet sich im Gruß rechts wieder, also am Anfang der Schreibrichtung von rechts nach links!); der Absatz selbst läuft in „normaler“ Schreibrichtung.

Nicht alles ist left und right

Da man für unterschiedliche Schreibrichtungen dann jeweils andere seitliche Abstände und Rahmen festlegen müsste, gibt es in CSS logische Eigeschaften, die sich nach der Schreibrichtung orientieren:

Eine Eigenschaft für unterschiedliche Schreibrichtungen ansehen …
section {
	border-inline-start: thick solid #c32e04;
	padding-inline-start: 1em;
	inline-size: 25em;
}

[lang=ja] {
	writing-mode: vertical-rl;
}

Anstelle der Angaben von rechts oder links verwenden wir nun den Begriff inline, bzw. inline-start.

Schreibrichtung mit CSS

CSS bietet mit direction ebenfalls eine Möglichkeit, die horizontale Schreibrichtung festzulegen:

Technisch möglich: Schreibrichtung im CSS festlegen
.arabic {
  direction: rtl;
}

Für semantische Angaben zur Sprache bzw. Schreibrichtung sollte jedoch dir in HTML bevorzugt werden. CSS beschreibt in erster Linie die Darstellung.

writing-mode – horizontale und vertikale Schreibrichtung

Mit der writing-mode-Eigenschaft legst du fest, in welcher Richtung Text geschrieben und gelesen wird. Sie bestimmt, ob die Inlineachse horizontal oder vertikal verläuft. Entsprechend verläuft die Zeilenrichtung (die Blockachse) rechtwinklig dazu.

Während direction zwischen einer Schreibrichtung von links nach rechts (ltr) und von rechts nach links (rtl) unterscheidet, legt writing-mode die Ausrichtung der Schreibrichtung fest. Die beiden Eigenschaften können daher miteinander kombiniert werden.

Die wichtigsten Werte sind:

  • horizontal-tb – Die Inlineachse verläuft horizontal, die Blockachse von oben nach unten. Dies ist die Standardeinstellung.
  • vertical-rl – Die Inlineachse verläuft vertikal, die Blockachse von rechts nach links. Dies entspricht beispielsweise der traditionellen japanischen Schreibweise.
  • vertical-lr – Die Inlineachse verläuft vertikal, die Blockachse von links nach rechts.

Die Richtung der Inlineachse wird dabei zusätzlich durch direction beeinflusst.

vertikale Überschrift ansehen …
h2.sideways-rl {
  writing-mode: sideways-rl;
}
h2.sideways-lr {
  writing-mode: sideways-lr;
}

h2.upright {
  writing-mode: vertical-rl;
  text-orientation: upright;
  letter-spacing:-.5em;
}

Im Beispiel wird die Überschrift gedreht neben dem Text dargestellt und man muss den Kopf seitwärts kippen, um sie zu lesen. Mit den Radiobuttons unter dem Text kann man auswählen, welche Klasse der Überschrift zugewiesen wird – zur Auswahl stehen sideways-rl, sideways-lr und upright. Die upright-Klasse stellt auf senkrechte Leserichtung mit aufrechter Textorientierung um. Da die meisten Schriften nicht auf diese Darstellung ausgelegt sind, ist der Abstand zwischen den Buchstaben nun zu groß und das wird mit einem negativen letter-spacing ausgeglichen. Es gibt auch einige wenige Schriften, die besonders für vertikale Schreibweise optimiert sind.

Übrigens: weil text-orientation nur für vertikale Typographie funktioniert, muss der writing-mode für die „aufrechte“ Darstellung auf einen Vertikal-Modus umgeschaltet werden.

text-orientation – Ausrichtung einzelner Zeichen

Die text-orientation-Eigenschaft bestimmt die Drehung von Text, wenn writing-mode nicht horizontal-tb ist.

https://24ways.org/2016/css-writing-modes/

https://uxplanet.org/hero-images-are-dead-these-solutions-are-replacing-them-184aae824c55

Ruby – zusätzliche Angaben bei vertikalen Schriften

Ruby und vertikale Texte ansehen …
  .vertical {
    writing-mode: vertical-rl;
  }

  ruby {
    ruby-position: over; /* in vertical-rl bedeutet "rechts" */
  }

  /* Varianten für text-orientation */
  .mixed {
    text-orientation: mixed;
  }

  .upright {
    text-orientation: upright;
  }

  .sideways {
    text-orientation: sideways;
  }

Die japanischen Texte werden mit ruby-Elementen ausgezeichnet und durch rt-Elemente ergänzt.

Durch writing-mode: vertical-rl; wird die Schreibrichtung von oben nach unten festgelegt.
Text mit lateinischen Buchstaben wird je nach text-orientiation seitwärts oder in „richtiger“ Drehung untereinander dargestellt.

Bidirektionale Texte mit unicode-bidi

Bei Texten, die unterschiedliche Schreibrichtungen enthalten, kommt der Unicode-Bidirektionalitätsalgorithmus (BiDi) zum Einsatz. Mit unicode-bidi kann dieses Verhalten beeinflusst werden.

Folgende Angaben sind möglich:

  • bidi-normal: (Standardwert)
  • bidi-override (überschreibt vorgegebene Laufrichtung)
Änderung der Laufrichtung ansehen …
  <text x="210" y="30" direction="rtl" unicode-bidi="bidi-override">
    andersrum!
  </text>
  <text x="260" y="100" direction="rtl" unicode-bidi="bidi-normal">
    andersrum!
  </text>

Beachten Sie das Ausrufezeichen im unteren Text. Mit unicode-bidi: bidi-normal ändern die Satzzeichen, aber nicht die Buchstaben ihre Laufrichtung.

Mit dem direction-Attribut (analog der CSS-Eigenschaft: direction) können Sie die Laufrichtung von Text beeinflussen. (Eine Angabe des HTML-Universalattributs dir ist in SVG nicht möglich!)

Folgende Angaben sind möglich:

  • ltr: (Standardwert) von links nach rechts
  • rtl: von rechts nach links

SVG und XML-Dokumente

Auch SVG-Texte können mit den aus CSS bekannten Eigenschaften für die Schreibrichtung formatiert werden. Die entsprechenden Eigenschaften werden dabei nicht mehr als spezielle SVG-Attribute, sondern über CSS gesetzt.



Siehe auch

  • Logische Eigenschaften‎ - In Texten mit anderer Schreibrichtung sind Angaben wie rechts und links eher verwirrend. Deshalb wurden als Ergänzung logische Eigenschaften eingeführt.


Weblinks

  1. W3C: Structural markup and right-to-left text in HTML