Artikel

CSS-Dreiecke

Dreiecke per CSS. Was erst einmal den Einsatz von Grafiken, eine neue CSS-Eigenschaft oder vielleicht irgendeinen nicht validen Hack vermuten lässt, kann ganz einfach mit reinem CSS gelöst werden. Und das ohne Grafiken oder Markup-Änderungen.

Funktionsweise

Die Dreiecke werden über die border-Eigenschaft von CSS realisiert:

Zunächst einmal wird ein Element mit einem Rahmen versehen. So weit, so bekannt.

Vergrößert man den Rahmen nun sehr stark - bei gleichzeitig sehr kleinem Inhalt, erhält man die Ausgangsform für die Dreiecke in CSS:

Wenn man jetzt den Rahmen an einigen Seiten entfernt (border-color:transparent;), erhält man das gewünschte Dreieck (in dem Beispiel habe ich die anderen Rahmen auf einen helleren Rotton gesetzt):

Hinweis: Die Technik lässt sich am Flexibelsten mit allen 4 Rahmen einsetzen, es funktioniert allerdings auch mit nur 2 Rahmen. Was letztendlich sichtbar ist, bestimmt man über die Rahmenfarbe, die Rahmen müssen aber in jedem Fall gesetzt werden.

Leere Elemente vermeiden

Leider hätte ein Einsatz der Technik in dieser Form einen entscheidenden Nachteil: Das Element, dass das Dreieck erzeugt, hätte eine Höhe und Breite von 0 Pixeln (in den beiden oberen Beispielen habe ich, zur Veranschaulichung, den Inhalt auf 1px gesetzt, damit die Dreiecke aber nicht zu Trapezen mutieren, sollte der Inhalt möglichst 0 Pixel betragen). Somit hätten wir einige leere Elemente ohne weitere semantische Bedeutung.

Glücklicherweise gibt es aber einen Ausweg aus diesem Dilemma: Die beiden Pseudo-Klassen ::before und ::after. Setzt man die content-Eigenschaft auf " " (ein Leerzeichen), display auf block; und vergibt Werte für height und width, kann man die jeweilige Pseudo-Klasse wie ein gewöhnliches Element stylen:

Dieses Mal hat das Element sogar Inhalt.

Erzeugt man nun anstelle des Vierecks ein Dreieck wie oben beschrieben und verschiebt dieses mittels absoluter Positionierung nach links, erhält man den gewünschten Effekt:

Et voilà: Dreieck und Inhalt

Breadcrumb-Navigation

Diesen Trick kann man sich gut bei Breadcrumb-Navigationen zunutze machen.

Tipp: Will man einzelne Menüpunkte besonders hervorheben, bietet sich der CSS 3-Selektor :nth-child() an.

Download-Button

Die möglichen Einsatzgebiete gehen aber über Breadcrumb-Navigationen hinaus. So könnte man beispielsweise einen Download-Button ebenfalls mit den Dreiecken gestalten...

Listen-Symbole

... oder vielleicht Listen-Symbole:

Weitere mögliche Einsatzszenarien

Bei Fortschrittsanzeigen (zum Beispiel bei einem Bezahlvorgang) oder einem Dateibrowser (für explorer-ähnliche, erweiterbare Bereiche) könnte man diese Dreiecke ebenfalls gut einsetzen.

Prinzipiell lässt sich beinahe jedes Dreieck mit dieser Technik ersetzen, wodurch es theoretisch sehr viele Möglichkeiten gibt, diese Technik einzusetzen.

Probleme im Praxiseinsatz

Browser-Support

Auch wenn es sich um keine neue CSS 3-Eigenschaft handelt, ist der Browser-Support doch ähnlich wie bei CSS 3.

Dreimal dürft ihr raten, welche Browser mit den CSS-Dreiecken nichts anfangen können. Richtig. Unsere allseits geliebten Internet Explorer 6 und 7. Internet Explorer 8 und neuer können die Dreiecke wie gewünscht darstellen.

Die anderen (modernen) Browser haben in der Regel keine Probleme, die Dreiecke darzustellen - zumindest in der derzeit aktuellen (stabilen) Version.

border-Eigenschaft wird auf Dreiecke erweitert

Webdesigner, die zum Unterstreichen von Text (üblicherweise bei Links) die border-Eigenschaft, aufgrund der größeren Flexibilität gegenüber der text-decoration-Eigenschaft, bevorzugen, werden mit CSS-Dreiecken wohl kaum glücklich werden, denn die border-Eigenschaft funktioniert nicht mehr so, wie erhofft: Die Dreiecke werden zu einem Teil des Inhalts (den beiden Pseudo-Klassen ::after und ::before sei Dank) und damit auch unterstrichen.

Komplizierte Implementierung

So schön das Ganze auch sein mag, einfach ist die Anwendung dieser Technik nicht. Die Herangehensweise ist erst einmal ziemlich ungewohnt und neu. Webdesigner, die die beiden Pseudo-Klassen ::before und ::after öfter einsetzen, werden sich aber schnell zurechtfinden.

Vorteile gegenüber Grafiken

Bei den ganzen Nachteilen muss das Ganze dann aber doch irgendwelche Vorteile bieten... Und diese Vorteile gibt es auch:

Weniger HTTP-Request und kleinere Dateigrößen

Letztendlich kann man damit seine Webseite noch ein Stückchen kleiner bekommen und schneller anzeigen lassen (alle die, die mit der Stoppuhr oder einer tollen App die Millisekunden beim Aufbau Ihrer Webseite messen, werden wissen, wovon ich rede). Auch wenn einige Zeilen Code nötig sind, schrumpft die Dateigröße der gesamten Webseite um wenigstens einige Byte, während gleichzeitig die Anzahl der HTTP-Request kleiner wird - schließlich braucht man keine extra Bilddateien mehr zu laden.

Skalierbar wie Vektorgrafiken

Sofern man die Dreiecke nicht mit absoluten Einheiten, sondern beispielsweise mit (r)em oder % anlegt, erhält man eine Art Vektorgrafik. Eine wirkliche Grafik ist es natürlich nicht, aber der Vorteil der schier endlosen Skalierbarkeit ist trotzdem vorhanden.

Der Original-Artikel erschien im bei t3n.de unter dem Namen CSS-Dreiecke.

Der Artikel wurde zuletzt im überarbeitet.