# HTML-Renderer

Ein HTML-Renderer, oft Browser-Engine genannt, ist ein Programm zur Visualisierung von Hypertext Markup Language und Scalable Vector Graphics. Mit „Visualisierung“ ist hier die Durchführung der Bildsynthese gemeint.
HTML war ursprünglich eine (strukturelle) Beschreibung von Text, eine Art von Rich Text mit Hyperlink-Funktionalität, von dem Erfinder des World Wide Web, Tim Berners-Lee, „IIRC Hypertext“ genannt. Zwar gibt es HTML-Attribute, die direkt das Aussehen des Elements beschreiben (etwa die Schriftgröße), diese werden jedoch in XHTML und neueren Standards als hinfällig eingestuft und nur noch aus Gründen der Kompatibilität unterstützt.
Das spiegelt wider, dass HTML nicht festlegen soll, wie ein Dokument anzuzeigen ist. Dadurch ist HTML so flexibel, dass es z. B. in einer Beamer-Präsentation, auf einem Computermonitor, einem PDA oder einem Schwarz-Weiß-LCD angezeigt werden kann. All diese Anzeigegeräte haben unterschiedliche Möglichkeiten für die visuelle Gestaltung des Inhaltes. Da HTML keine solche Gestaltung festlegt, kann das Anzeigeprogramm das HTML anzeigegerätespezifisch interpretieren und das visuelle Layout mehr oder weniger frei gestalten.
Der HTML-Renderer ordnet dieser eher semantisch-strukturellen Definition eine visuelle Darstellung des Textes zu.
Dies geschieht in nahezu allen Browsern mittels Cascading Style Sheets (CSS). Die Stylesheets enthalten eine Liste von Selektoren (Bedingungen an die Teilstruktur des HTML-Dokuments, die zutreffen müssen, damit die Regeln angewendet werden) und Regeln (Attribute, die auf die der entsprechenden Teilstruktur zugeordnete visuelle Repräsentation angewendet werden). Per Voreinstellung liefert der Browser ein Standard-Stylesheet aus, das die meisten Elemente grundformatiert. CSS ist sehr flexibel. Es ist möglich, diesen Satz von Regeln komplett pro Benutzer oder pro Dokument auszutauschen. Dadurch sind den Darstellungsvarianten fast keine Grenzen gesetzt.
Ein HTML-Renderer ist also Teil eines Webbrowsers, der einer eher semantisch orientierten Dokumentenstruktur eine visuelle Darstellung zuordnet. Eine Layout-Engine interpretiert das Layoutmodell, das durch CSS definiert wurde, und füllt in dieses Layout den durch HTML semantisch angereicherten Text.

## Funktionsweise
### Parsen

Das HTML-Dokument wird eingelesen und dessen Elemente strukturiert. Diesen Vorgang nennt man Parsen. Nahezu jeder Browser nutzt dafür seinen eigenen Renderer. Die Festlegung der Standards für HTML-Dokumente werden dabei unter anderem vom World Wide Web Consortium festgelegt und definiert. Dabei existieren unterschiedliche Standards, die Syntax der Elemente bleibt aber weitestgehend gleich. Der Entwickler sollte mit Hilfe des sogenannten Doctypes angeben, welcher Standard benutzt wird. Wird der festgelegte Standard nicht vollständig eingehalten, ist das HTML-Dokument nicht valide, der Browser kann die Elemente nicht richtig interpretieren und es kann zu Fehldarstellungen kommen.

### Generierung des Document Object Models

Wurde das Dokument erfolgreich eingelesen, wird ein sogenanntes Document Object Model erstellt. Diese hierarchische Struktur beinhaltet Informationen über die Ordnung und Unterelemente (Kinder genannt). Das Document Object Model ist auch nach der Ausgabe noch relevant, da etwa clientseitige Scriptsprachen wie JavaScript auf dieses zugreifen können, um es zu manipulieren.

### Reflow

Die Berechnung von SGML-Strukturen (wie etwa HTML) wird als Reflow bezeichnet. In diesem Prozess wird die grundlegende Geometrie der zu formatierenden Objekte berechnet – etwa die Höhe oder die Breite eines Elements. Die zu formatierenden Objekte werden als frames (dt. Rahmen) bezeichnet und sind nicht zu verwechseln mit den Frames, die das Laden einer HTML-Seite in eine andere ermöglichen.

## Liste von Renderern

Grafisch
* Gecko (u. a. verwendet von Mozilla Firefox, SeaMonkey, Mozilla Camino)
** Goanna (u. a. verwendet von Pale Moon, Basilisk, gewissen K-Meleon-Forks)
* KHTML (u. a. Konqueror)
** WebKit (u. a. Apple Safari, Google Chrome bis Version 27, Epiphany, ICab, Midori, JavaFX WebView)
*** Blink (u. a. Opera ab Version 15, Google Chrome ab Version 28, Vivaldi, Microsoft Edge ab Version 79); 2013 von WebKit abgespalten
* Presto (Opera bis Version 12)
* Trident (Internet Explorer für Windows)
* EdgeHTML (Microsoft Edge bis Version 44)
* Tasman (u. a. Internet Explorer für Macintosh)
* Robin (The Bat)
* Servo (Experimentell von Mozilla und Samsung entwickelt)
* NetSurf (schlanker Browser)
Textbasiert
* Lynx
* Links
* W3m

## Rendern von Audio-Daten

Es gibt auch Rendern von Audio-Daten von HTML durch eine CSS-Teilspezifikation, mit der eine synthetische Stimme beim Vorlesen von Hypertext durch CSS-Attribute navigiert wird. Rendern von Audio-Daten ist jedoch nicht in den gängigen Webbrowsern implementiert. Rendern von Audio-Daten gibt es nur in Spezialanwendungsprogrammen (Screenreader) für Blinde oder stark sehbehinderte Menschen.