cover-image

CSS Secrets

Typische Webdesign-Probleme klug gelöst

Lea Verou

image

Lea Verou

Lektorat: Ariane Hesse

Übersetzer: Jørgen W. Lang

Korrektorat: Claudia Lötschert

Herstellung: Susanne Bröckelmann

Umschlaggestaltung: Michael Oréal, www.oreal.de

Satz: III-Satz, www.drei-satz.de

Druck und Bindung: Media-Print Informationstechnologie, mediaprint-druckerei.de

Bibliografische Information Der Deutschen Nationalbibliothek

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

ISBN:

Print    978-3-96009-025-0

PDF    978-3-96010-057-7

ePub    978-3-96010-058-4

mobi    978-3-96010-059-1

Dieses Buch erscheint in Kooperation mit O’Reilly Media, Inc. unter dem Imprint »O’REILLY«. O’REILLY ist ein Markenzeichen und eine eingetragene Marke von O’Reilly Media, Inc. und wird mit Einwilligung des Eigentümers verwendet.

1. Auflage 2016

Copyright © 2016 dpunkt.verlag GmbH

Wieblinger Weg 17

69123 Heidelberg

Authorized German translation of the English edition of CSS Secrets, ISBN 9781449372637 © 2015 Lea Verou. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same.

Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.

Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.

Die Informationen in diesem Buch wurden mit größter Sorgfalt erarbeitet. Dennoch können Fehler nicht vollständig ausgeschlossen werden. Verlag, Autoren und Übersetzer übernehmen keine juristische Verantwortung oder irgendeine Haftung für eventuell verbliebene Fehler und deren Folgen.

5 4 3 2 1 0

Lob für »CSS Secrets«

Dieses Buch steht für eine neue Generation von CSS-Büchern, gemacht für eine neue Generation von CSS. CSS ist keine einfache Sprache mehr, die durch komplizierte Browserhacks und Workarounds behindert wird. Stattdessen ist CSS mittlerweile zu einem äußerst mächtigen und komplexen Ökosystem herangewachsen, das aus über 80 W3C-Spezifikationen besteht. Dabei versteht es niemand besser, die neue Generation von CSS weiterzugeben und lösungsorientierte Designprinzipien zu vermitteln, als Lea Verou – eine der wenigen wirklich begnadeten Coder, die ich kenne.

Jeffrey Zeldman
Autor, Designing with Web Standards

Lea Verous enzyklopädischer Verstand ist einmalig. Dank dieses informativen Buchs können auch Sie einen Eindruck von der Arbeit mit CSS gewinnen. Sie werden herausfinden, wie Sie fast alles damit tun können, was Ihnen in den Sinn kommt. Und wenn Sie glauben, CSS schon in- und auswendig zu kennen, garantiere ich Ihnen, dass es auch für Sie in diesem Buch noch Geheimnisse zu entdecken gibt.

Jeremy Keith
Shepherd of Unknown Futures, Clearleft

Wenn Sie nach Insiderinformationen über faszinierende CSS-Techniken suchen, sinnvollen Vorgehensweisen und hundertprozentiger Genialität, dann zögern Sie nicht – lesen Sie dieses Buch. Ich fand es klasse!

Eric A. Meyer

Lea ist eine unglaublich intelligente Programmiererin. Dieses Buch ist randvoll mit schlauen und nützlichen Ideen für Leute, die CSS bereits gut kennen. Und was noch besser ist: Sie werden sich bei Ihrer Arbeit auch schlauer fühlen, weil dieses Buch Sie ermutigt, über das Offensichtliche hinauszugehen.

Chris Coyier
CodePen

CSS Secrets ist jetzt schon ein Klassiker – so viele Tipps und Tricks, die Sie direkt benutzen können, um Ihre UX-Designs zu verbessern!

Christopher Schmitt
Co-Autor des CSS-Kochbuchs

Es gibt nur wenige Bücher, die so viele Praxistipps erhalten wie Lea Verous CSS Secrets. Reich gefüllt mit Dutzenden Lösungen zu häufigen Designproblemen ist dieses Buch eine besonders wertvolle Sammlung schlauer Tipps und Tricks, um Ihren Job zu erledigen, und zwar schnell. Das Buch ist auch dann lesenswert, wenn Sie glauben, CSS bereits in- und auswendig zu kennen!

Vitaly Friedman
Mitgründer und Chefredakteur bei Smashing Magazine

Jedesmal, wenn ich etwas von Lea Verou lese, lerne ich wirklich etwas Neues. CSS Secrets ist da keine Ausnahme. Dieses Buch ist in leicht verdauliche Stücke unterteilt und bis zum Rand gefüllt mit leckeren, saftigen Wissenshappen. Auch wenn das Buch teilweise recht zukunftsorientiert ist, enthält es genügend Dinge, die ich direkt in meinen eigenen Projekten verwenden konnte.

Jonathan Snook
Webdesigner und Entwickler

Leas Buch ist fantastisch. Sie biegt und verdreht CSS, bis es Dinge tut, an die nicht einmal die Autoren der Spezifikationen gedacht haben, da bin ich sicher! In den einzelnen Kapiteln zeigt sie unterschiedliche Methoden, verschiedene grafische Effekte zu erzielen. Später bei Ihrer Arbeit werden Sie sagen: “Hmm, was Lea da gemacht hat, wird hier ganz hervorragend funktionieren!”. Und bevor Sie es merken, ist Ihre Website so gut wie frei von Bildern, weil Sie sämtliche Grafiken als leicht zu pflegende CSS-Komponenten vorhalten können. Noch wichtiger ist allerdings, dass Leas Techniken auch noch Spaß machen, immer auf dem Grat zwischen dem Praktischen und fast schon Unmöglichen!

Nicole Sullivan
Principal Software Engineer, Erfinderin von OOCSS

Lea Verous CSS Secrets ist weniger eine Sammlung von CSS-Tipps als vielmehr ein Lehrbuch für das Lösen von Problemen mit CSS. Ihre tief gehende Erklärung der Denkprozesse hinter den einzelnen Secrets bringt Ihnen bei, eigene Lösungen für CSS-Probleme zu finden. Und überlesen Sie auf keinen Fall die Einführung. Sie enthält einige äußerst lesenswerte “Best Practices” für die Arbeit mit CSS.

Elika J. Etemad (aka fantasai)
Gastexpertin der CSS-Arbeitsgruppe des W3C

Leas Vorträge sind schon seit langer Zeit ein Muss auf Webenwickler-Konferenzen auf der ganzen Welt. Als Destillat Ihrer gesammelten Erfahrungen bietet CSS Secrets elegante Lösungen für heikle Designprobleme. Was noch wichtiger ist: Sie zeigt, wie Sie diese Probleme mit CSS lösen können. Jeder Frontend-Designer und -Entwickler sollte dieses Buch unbedingt lesen.

Dudley Storey
Designer, Entwickler, Autor, Experte für webbasierte Bildung

Ich dachte, ich kenne mich bereits sehr gut mit CSS aus. Dann las ich Lea Verous Buch. Wenn Sie Ihr CSSWissen auf das nächste Level bringen wollen, müssen Sie dieses Buch lesen.

Ryan Seddon
Team Lead, Zendesk

CSS Secrets ist das am stärksten technisch orientierte Buch zum Thema, das ich kenne. Lea hat es geschafft, die Grenzen einer einfachen Sprache wie CSS so sehr zu erweitern, dass sie sich kaum noch von Magie unterscheidet. Dies ist mit Sicherheit kein Anfängerbuch, trotzdem ist es äußerst empfehlenswert, wenn Sie glauben, CSS schon ziemlich gut zu kennen.

Hugo Giraudel
Frontend-Enwickler, Edenspiekermann

Ich denke immer, CSS ist ein bisschen wie Magie: Ein paar Regeln können Ihre Webseiten von “langweilig” zu “wunderschön” verwandeln. In CSS Secrets hebt Lea Verou dieses Magie auf ein völlig neues Niveau. Sie ist die Meister-Magierin des CSS. Und wir dürfen diese magische Welt mit ihr zusammen erkunden. Ich kann gar nicht aufzählen, wie oft ich beim Lesen dieses Buchs laut “Das ist jetzt mal richtig cool!” vor mich hingesagt habe. Das einzige Problem mit CSS Secrets ist, dass ich nach dem Lesen alles zur Seite legen und den ganzen Tag nur noch mit CSS herumspielen will.

Elisabeth Robson
Mitgründerin von WickedlySmart.com und Co-Autorin von JavaScript-Programmierung von Kopf bis Fuß

CSS Secrets ist ein Buch, das alle Webentwickler in ihrer Bibliothek haben sollten. Durch die Verwendung der enthaltenen Informationen lernen Sie zahlreiche Hinweise und Tipps, mit denen CSS Dinge tut, die Sie nie für möglich gehalten haben. Ich war erstaunt, wie oft die Autorin einfache und elegante Querdenker-Lösungen für Probleme anbot, über die ich mir jahrelang den Kopf zerbrochen habe.

Robin Nixon
Webentwickler, Onlinetrainer und Autor mehrerer CSS-Bücher

Lea Verou ist eine meisterhafte Designerin und Programmiererin. Ihr Buch ist so schön und durchdacht wie ihr Code. Egal ob CSS Ihnen recht neu ist, oder Sie die Feinheiten von CSS3 bereits gut kennen – dieses Buch bietet für jeden etwas.

Estelle Weyl
Vorreiterin für das Open Web und Mitautorin von CSS: The Definitive Guide

In liebevoller Erinnerung an meine Mutter und beste Freundin, Maria Verou (1952–2013), die diese Welt viel zu früh verlassen hat.

Inhaltsverzeichnis

Vorwort

Einleitung

Danksagungen

Making of ...

Über dieses Buch

Kapitel 1

Einführung

Webstandards: Freund oder Feind?

Tipps zum Schreiben von CSS

Kapitel 2

Hintergründe & Rahmen

1 Durchscheinende Rahmen

2 Mehrfache Rahmen

3 Flexible Hintergrundpositionierung

4 Innen abgerundete Ecken

5 Gestreifte Hintergründe

6 Komplexe Hintergrundmuster

7 (Pseudo-)zufällige Hintergrundmuster

8 Durchgehende Bildrahmen

Kapitel 3

Formen

9 Flexible Ellipsen

10 Parallelogramme

11 Rauten

12 Abgeschnittene Ecken

13 Trapezförmige Tabs

14 Einfache Tortendiagramme

Kapitel 4

Visuelle Effekte

15 Einseitige Schatten

16 Unregelmäßige Schattenwürfe

17 Farbtönungen

18 Milchglas-Effekt

19 Eselsohren-Effekt (abgeknickte Ecken)

Kapitel 5

Typografie

20 Silbentrennung

21 Zeilenumbrüche einfügen

22 Abwechselnd gestreifte Textzeilen

23 Die Tabulatorweite anpassen

24 Ligaturen

25 Schönere Ampersand-Zeichen

26 Eigene Unterstreichungen

27 Realistische Text-Effekte

28 Kreisförmiger Text

Kapitel 6

User Experience

29 Den richtigen Cursor wählen

30 Den anklickbaren Bereich vergrößern

31 Eigenes Design für Checkboxen

32 Ablenkung vermeiden durch Abblenden von Elementen

33 Ablenkung durch Weichzeichnung vermeiden

34 Hinweise auf Scrollbarkeit

35 Interaktive Bildvergleiche

Kapitel 7

Struktur & Layout

36 Intrinsische Größenanpassung

37 Spaltenbreiten in Tabellen zähmen

38 Stildefinitionen anhand der Anzahl der Geschwisterelemente

39 Anpassungsfähiger Hintergrund, fester Inhalt

40 Vertikale Zentrierung

41 Fest verankerte Footer

Kapitel 8

Übergänge & Animationen

42 Elastische Übergänge

43 Schrittweise Animationen

44 Blinkender Text

45 Animierte Texteingabe

46 Zustände von Elementen sanft animieren

47 Animation entlang eines kreisförmigen Pfads

Index

Secrets nach Spezifikation

CSS Animations

w3.org/TR/css-animations

42 Elastische Übergänge

43 Schrittweise Animationen

44 Blinkender Text

45 Animierte Texteingabe

46 Zustände von Elementen sanft animieren

47 Animation entlang eines kreisförmigen Pfads

CSS Backgrounds & Borders

w3.org/TR/css-backgrounds

1 Durchscheinende Rahmen

2 Mehrfache Rahmen

3 Flexible Hintergrundpositionierung

4 Innen abgerundete Ecken

5 Gestreifte Hintergründe

6 Komplexe Hintergrundmuster

7 (Pseudo-)zufällige Hintergrundmuster

8 Durchgehende Bildrahmen

9 Flexible Ellipsen

12 Abgeschnittene Ecken

14 Einfache Tortendiagramme

15 Einseitige Schatten

19 Eselsohren-Effekt (abgeknickte Ecken)

22 Abwechselnd gestreifte Textzeilen

26 Eigene Unterstreichungen

30 Den anklickbaren Bereich vergrößern

32 Ablenkung vermeiden durch Abblenden von Elementen

34 Hinweise auf Scrollbarkeit

35 Interaktive Bildvergleiche

CSS Backgrounds & Borders Level 4

wdev.w3.org/csswg/css-backgrounds-4

12 Abgeschnittene Ecken

CSS Basic User Interface

w3.org/TR/css3-ui

2 Mehrfache Rahmen

4 Innen abgerundete Ecken

35 Interaktive Bildvergleiche

CSS Box Alignment

w3.org/TR/css-align

40 Vertikale Zentrierung

CSS Flexible Box Layout

w3.org/TR/css-flexbox

40 Vertikale Zentrierung

41 Fest verankerte Footer

CSS Fonts

w3.org/TR/css-fonts

24 Ligaturen

25 Schönere Ampersand-Zeichen

CSS Image Values

w3.org/TR/css-images

5 Gestreifte Hintergründe

6 Komplexe Hintergrundmuster

7 (Pseudo-)zufällige Hintergrundmuster

8 Durchgehende Bildrahmen

12 Abgeschnittene Ecken

14 Einfache Tortendiagramme

19 Eselsohren-Effekt (abgeknickte Ecken)

22 Abwechselnd gestreifte Textzeilen

26 Eigene Unterstreichungen

34 Hinweise auf Scrollbarkeit

35 Interaktive Bildvergleiche

CSS Image Values Level 4

w3.org/TR/css4-images

5 Gestreifte Hintergründe

6 Komplexe Hintergrundmuster

14 Einfache Tortendiagramme

CSS Intrinsic & Extrinsic Sizing

w3.org/TR/css3-sizing

36 Intrinsische Größenanpassung

CSS Masking

w3.org/TR/css-masking

11 Rauten

12 Abgeschnittene Ecken

CSS Text

w3.org/TR/css-text

20 Silbentrennung

23 Die Tabulatorweite anpassen

CSS Text Level 4

dev.w3.org/csswg/css-text-4

20 Silbentrennung

CSS Text Decoration

w3.org/TR/css-text-decor

26 Eigene Unterstreichungen

27 Realistische Text-Effekte

CSS Transforms

w3.org/TR/css-transforms

10 Parallelogramme

11 Rauten

12 Abgeschnittene Ecken

13 Trapezförmige Tabs

14 Einfache Tortendiagramme

19 Eselsohren-Effekt (abgeknickte Ecken)

35 Interaktive Bildvergleiche

40 Vertikale Zentrierung

47 Animation entlang eines kreisförmigen Pfads

CSS Transitions

w3.org/TR/css-transitions

11 Rauten

12 Abgeschnittene Ecken

17 Farbtönungen

33 Ablenkung durch Weichzeichnung vermeiden

42 Elastische Übergänge

CSS Values & Units

w3.org/TR/css-values

3 Flexible Hintergrundpositionierung

32 Ablenkung vermeiden durch Abblenden von Elementen

40 Vertikale Zentrierung

41 Fest verankerte Footer

42 Elastische Übergänge

45 Animierte Texteingabe

Compositing and Blending

w3.org/TR/compositing

17 Farbtönungen

35 Interaktive Bildvergleiche

Filter Effects

w3.org/TR/filter-effects

16 Unregelmäßige Schattenwürfe

17 Farbtönungen

18 Milchglas-Effekt

33 Ablenkung durch Weichzeichnung vermeiden

35 Interaktive Bildvergleiche

Fullscreen API

fullscreen.spec.whatwg.org

32 Ablenkung vermeiden durch Abblenden von Elementen

Scalable Vector Graphics

w3.org/TR/SVG

6 Komplexe Hintergrundmuster

14 Einfache Tortendiagramme

28 Kreisförmiger Text

Selectors

w3.org/TR/selectors

31 Eigenes Design für Checkboxen

38 Stildefinitionen anhand der Anzahl der Geschwisterelemente

Vorwort

Ach ja, die gute alte Zeit. Damals, im vorigen Jahrtausend, gab es tatsächlich nur zwei CSS-fähige Browser. Und die verstanden nur eine kleine Untermenge der Dinge, die in einer ziemlich beschränkten Spezifikation definiert waren. Tatsächlich konnte man sich alles, was funktionierte (oder auch nicht), problemlos merken. Hierzu gehörten auch die verschiedenen Implementierungs-Bugs, die derartig viele Fehler und Missverständnisse enthielten, dass es fast schon wieder komisch war. Einige Fehler sorgten sogar dafür, dass das Layoutverhalten des Browsers vollkommen inkompatibel wurde. Und wir waren gezwungen, Armeen von Hacks einzusetzen, die Parsingfehler ausnutzten, um die Unterschiede wieder auszubügeln!

Moment mal!

Diese “gute alte Zeit” war furchtbar. Ich bin wirklich froh, dass sie endlich vorbei ist!

Gerade in den letzten Jahren haben sich die Dinge, was CSS angeht, deutlich verbessert. Mittlerweile sind die Browser größtenteils miteinander kompatibel. Und wenn nicht, dann liegt das eher daran, dass ein Browser ein bestimmtes Feature einfach nicht unterstützt. Früher versuchten zwei Browser eher, die gleiche Sache ganz unterschiedlich umzusetzen – meistens aber nicht besonders gut. Die Spezifikationen haben die Möglichkeiten von CSS erweitert, z.B. indem sie neue Features definieren, mit denen alte und komplexe Lösungswege heutzutage viel einfacher und kompakter umzusetzen sind. CSS ist umfangreicher und leistungsstärker als je zuvor. Der Preis ist eine größere Komplexität. Wenn Sie ausreichend viele Bausteine zusammenfügen, egal, wie einfach sie jeweils sind, können sehr interessante Dinge entstehen. (Mehr zu diesem Thema erfahren Sie beispielsweise im LEGO Movie).

Aber genau diese unbeabsichtigte Komplexität gibt CSS die Fähigkeit, uns mit frischen Features zu überraschen, die wir überhaupt nicht erwartet oder geplant hätten. Die “Secrets” findet man dort, wo sich Eigenschaften überschneiden und Werte auf neue Weise benutzt werden. Mit Farbverläufen (Gradients) lassen sich der berühmte “Eselsohren”-Effekt umsetzen, Elemente können animiert und anklickbare Bereiche vergrößert werdem. Selbst Tortendiagramme sind machbar ... und vieles mehr. CSS besitzt Fähigkeiten, von denen wir damals, als ich noch jung war, nur geträumt haben – Möglichkeiten, die jenseits unserer Vorstellungskraft lagen. CSS besitzt Fähigkeiten, von denen ich nie gedacht hätte, dass sie einmal in einer kompakten und menschenlesbaren Weise ausgedrückt werden könnten. CSS hat sich so weit entwickelt, dass es mit Sicherheit noch eine Menge an Geheimnissen zu entdecken gibt. Vielleicht finden Sie ja selbst auch welche.

Bis dahin gibt es eine Vielzahl faszinierender Techniken zu lernen, die es bereits ans Tageslicht geschafft haben. Nur wenige haben mehr Verdienst daran als Lea Verou, dass diese Schätze geborgen und mit der Welt geteilt werden. Von ihren Blogartikeln über ihre Beiträge zur Open Source Software bis hin zu ihren dynamischen, interaktiven Vorträgen in der ganzen Welt hat Lea ein enormes Wissen zu CSS angesammelt. Dieses Buch ist ein wunderbares Destillat dieses Wissens. Hiermit besitzen Sie eine Anleitung zu einigen der interessantesten, überraschendsten und nützlichsten Techniken, die es in der Welt von CSS gibt – ein Handbuch, geschrieben von einem der klügsten Köpfe zu diesem Thema. Was Lea auf diesen Seiten zusammengestellt hat, wird Sie bereichern, erfreuen und sogar überraschen.

Machen Sie sich auf den Weg, lernen Sie und sorgen Sie dafür, dass diese Entdeckungen keine Geheimnisse mehr bleiben.

Eric A. Meyer

Einleitung

In den letzten Jahren hat CSS eine Verwandlung durchgemacht, ähnlich der JavaScript-Revolution um 2004. Eine supereinfache Sprache für Stildefinitionen entwickelte sich zur komplexen Technologie, die (inklusive der Entwürfe) von über 80 W3C-Spezifikationen definiert wird. CSS besitzt ein eigenes Entwickler-Ökosystem, eigene Konferenzen, Frameworks und Werkzeuge. CSS ist so sehr gewachsen, dass es für einen einzelnen Menschen schlicht unmöglich ist, alle Bestandteile im Kopf zu behalten. Selbst in der W3C-Arbeitsgruppe, die die Sprache definiert, gibt es keine Experten, die sich mit allen Aspekten von CSS auskennen, auch wenn einige schon ziemlich nah dran sind. Stattdessen konzentrieren sich die meisten Mitglieder der Arbeitsgruppe auf bestimmte CSS-Spezifikationen, ohne dabei viel über die anderen zu wissen.

Ungefähr bis 2009 war CSS-Expertise nicht dadurch definiert, wie gut man die Sprache kannte. Das wurde für ein mehr oder weniger ernsthaftes Arbeiten einfach vorausgesetzt. Als Maßstab für CSS-Können galt, wie viele Browser-Bugs (und deren Lösungen) man im Kopf hatte. Im Jahr 2015 sind die Browser dagegen größtenteils standardkonform, und zweifelhafte Browserhacks rufen eher ein Stirnrunzeln hervor. Einige unvermeidliche Inkompatibilitäten gibt es natürlich immer noch. Allerdings passieren die Änderungen, nicht zuletzt weil die Browser automatisch aktualisiert werden, so schnell, dass es eine Zeit- und Platzverschwendung wäre, sie in einem Buch zu dokumentieren.

Das Akronym DRY steht für »Don’t Repeat Yourself« (wiederhole dich nicht). Mit diesem bekannten Programmierer-Mantra soll ein bestimmter Aspekt wartbaren Codes gefördert werden: die Fähigkeit, bestimmte Parameter mit so wenigen Änderungen wie möglich, anzupassen, idealerweise nur mit einer. Die Betonung auf DRY CSS-Code werden Sie in diesem Buch immer wieder finden. Das Gegenteil von DRY ist WET, was so viel heißt wie »We Enjoy Typing« (wir tippen gerne) oder auch »Write Everything Twice« (schreib’ alles zweimal).

Bei modernem CSS geht es nur noch selten darum, irgendwelche kurzlebigen Browser-Bugs zu umgehen. Heutzutage ist es viel wichtiger, die CSSFähigkeiten auf kreative Weise zu nutzen, um DRY-konforme, wartbare, flexible und leichte Lösungen zu finden, die weitestgehend standardkonform sind. Und genau darum geht es in diesem Buch.

Viele Bücher dokumentieren bestimmte CSS-Features von A–Z. CSS Secrets gehört allerdings nicht dazu. Der Zweck dieses Buches ist es, Wissenslücken zu füllen, die übrig sind, nachdem Sie sich mit dem Referenzmaterial vertraut gemacht haben. Es soll Ihr Bewusstsein erweitern, indem es neue Möglichkeiten aufzeigt, bereits bekannte Features zu nutzen. Es soll Ihnen CSS-Fähigkeiten näherbringen, die nicht so berühmt und beliebt sind, aber deutlich mehr Liebe verdienen. Der Hauptzweck dieses Buchs ist aber, Ihnen zu zeigen, wie Sie CSS zur Problemlösung einsetzen können.

CSS Secrets ist auch kein Kochbuch. Die einzelnen »Geheimnisse« (Secrets) sind keine eigenständigen Rezepte mit klar definierten Schritten, die Sie nur nachzukochen brauchen. Stattdessen versuche ich, detailliert zu beschreiben, welche Denkweise den einzelnen Techniken zugrunde liegt. Meiner Meinung nach ist es viel wertvoller den Prozess der Lösungsfindung zu verstehen, als die Lösung selbst. Selbst wenn Sie glauben, dass eine bestimmte Technik für Ihre Arbeit nicht von Belang ist, kann das Wissen um einen bestimmten Lösungsweg hilfreich sein, um vollkommen andere Probleme anzugehen. Kurz gesagt: Dieses Buch wird Ihnen hoffentlich eine Menge der sprichwörtlichen Fische bescheren – sein Hauptzweck besteht jedoch darin, Sie »ein Leben lang zu ernähren«, indem es Ihnen zeigt, wie Sie die Fische selbst fangen können.

Danksagungen

Ohne die Hilfe einer Vielzahl fantastischer Menschen, denen ich zutiefst dankbar bin, wäre dieses Buch nicht möglich gewesen. Ein großes und herzliches Dankeschön geht an:

Bildnachweise

Ein großes Dankeschön an all die netten Leute, die ihre Fotos mit großzügigen Creative-Commons-Lizenzen veröffentlichen. Ohne sie wäre auf allen Bildern dieses Buchs mein Kater zu sehen (was trotzdem in vielen Beispielen der Fall ist). Hier ist eine Liste der CC-Fotos, die ich verwendet habe, und wo sie zu finden sind:

»House Made Sausage from Prairie Grass Cafe, Northbrook,« Kurman Communications, Inc.

flickr.com/kurmanphotos/7847424816

image

»Cats that Webchick Is Herding,« Kathleen Murtagh

flickr.com/ceardach/4549876293

image

»Stone Art,« by Josef Stuefer

flickr.com/josefstuefer/5982121

image

»A Field of Tulips,« Roman Boed

flickr.com/romanboed/867231576

image

»Resting in the Sunshine,« Steve Wilson

flickr.com/pokerbrit/10780890983

image

»Naxos Island, Greece,« Chris Hutchison

flickr.com/employtheskinnyboy/3904743709

image

Making of ...

Dieses Buch hält sich an seine eigenen Prinzipien. Es ist in sauberem HTML5 geschrieben, angereichert mit ein paar data-Attributen, die in O’Reillys HTMLBook-Standard (oreillymedia.github.io/HTMLBook) definiert sind. Das bedeutet, alles, was Sie in diesem Buch sehen – das Layout, die Abbildungen, die Farben –, ist mit CSS gestalteter HTML-Code.1 Viele der Abbildungen wurden mit SVG erstellt oder verwenden SVG-Daten-URLs, die mit Hilfe von SCSS-Funktionen erzeugt wurden. Die wenigen mathematischen Formeln wurden in LaTeX geschrieben und im Hintergrund in MathML konvertiert. Vielleicht interessiert es Sie, dass auch die Nummerierung der Seiten, Kapitel und der einzelnen Secrets mit simplen CSS-Countern erstellt wurden.

Viele der von O’Reilly veröffentlichten Bücher werden heutzutage auf diese Weise hergestellt. Speziell für diesen Zweck wurde ein System namens Atlas geschaffen. Das Beste an Atlas ist, dass es nicht nur O’Reilly-Mitarbeitern, sondern der gesamten Öffentlichkeit zur Verfügung steht.

Allerdings ist dieses Buch kein typisches Atlas-Projekt. Ich habe die Grenzen des heutzutage mit Print-CSS Möglichen meines Wissens so sehr erweitert wie bisher kein anderes Buch. Das hat geholfen, eine Menge Fehler in Atlas und Antenna House (dem von Atlas verwendeten PDF-Renderer) zu finden, brachte aber auch viele Probleme mit sich, die direkt mit den CSS-Spezifikationen für Print-Stylesheets zu tun haben. Diese habe ich direkt an die CSS-Arbeitsgruppe weitergegeben.

Vermutlich fragen Sie sich jetzt, wie viel Code wohl nötig ist, um ein Buch wie dieses anhand von Webtechnologien zu erstellen. Hier ein paar statistische Werte zur Produktion der englischen Fassung:

Hier ist eine Liste der Werkzeuge, die ich neben Atlas beim Schreiben dieses Buchs verwendet habe:

Die verwendeten Schriftarten waren Rockwell für die Überschriften, Frutiger für den Fließtext, Consolas für Codebeispiele und Baskerville für die Widmung und viele Abbildungen.

Dieses Buch wurde auf einem 13" MacBook Air in vielen verschiedenen Ländern geschrieben, unter anderen Griechenland, Kenia, Australien, Neuseeland, den Philippinen, Singapur, Chile, Brasilien, den Vereinigten Staaten, Frankreich, Spanien, Großbritannien, Wales, Polen, Kanada und Österreich.

Über dieses Buch

Für wen dieses Buch gedacht ist

Dieses Buch richtet sich hauptsächlich an CSS-Entwickler auf mittlerem bis hohem Niveau. Indem wir die sonst nötigen Einführungen weglassen, haben wir Platz, um die anspruchsvolleren Anwendungsfälle moderner CSS-Features und deren Kombinationen zu erforschen. Das heißt, dass wir von unseren Lesern einige Dinge erwarten:

Damit Leser, die nicht alle Voraussetzungen erfüllen, dieses Buch ebenfalls genießen können, gibt es am Anfang einiger »Secrets« einen Kasten mit Voraussetzungen. Hier finden Sie eine Liste der CSS-Techniken oder vorigen CSS-Secrets, die Sie kennen und verstehen müssen, damit das aktuelle Secret einen Sinn ergibt. (Auf CSS 2.1-Features wird verzichtet, weil der Kasten sonst ziemlich lang würde.) Er sieht in etwa so aus:

Auf diese Weise kann man Unbekanntes gegebenenfalls nachlesen und danach mit dem eigentlichen Secret weitermachen. Solange die Voraussetzungen erfüllt sind, können die Secrets in beliebiger Reihenfolge gelesen werden. Allerdings habe ich mir zur optimalen Reihenfolge sehr viele Gedanken gemacht. Daher hat das Lesen in der Reihenfolge des Buchs durchaus einen Sinn.

Beachten Sie bitte, dass ich »CSS-Entwickler« geschrieben habe und dass »Designfähigkeiten« in der Liste der Erwartungen an Sie nicht auftauchen. Dies ist kein Designbuch. Natürlich werden bestimmte Designprinzipien berührt und auch einige UX-Verbesserungen beschrieben. Trotzdem geht es in CSS Secrets in erster Linie darum, Probleme mit Code zu lösen. Zwar sorgt CSS für eine visuelle Ausgabe, bleibt aber Code, genau wie SVG, WebGL/OpenGL oder die JavaScript-Canvas-API Code und kein Design sind. Um gutes, flexibles CSS zu schreiben, wird die gleiche Art analytischen Denkens benötigt, die auch sonst beim Programmieren gebraucht wird. Heutzutage verwenden die meisten Leute Präprozessoren, um mithilfe von Variablen, Mathematik, Bedingungen und Schleifen ihren CSS-Code zu erzeugen. Das sieht schon ziemlich nach Programmierung aus!

Das soll Designer aber nicht davon abhalten, dieses Buch zu lesen. Alle, die ausreichende Erfahrung mit dem Schreiben von CSS haben, können von diesem Buch profitieren, und ich weiß, dass es viele talentierte Designer gibt, die ausgezeichneten CSS-Code schreiben. Allerdings muss ich betonen, dass ich Ihnen in diesem Buch nicht beibringen will, wie Sie Ihr visuelles Design oder die Benutzbarkeit einer Website verbessern können. Als mögliche Nebenwirkung will ich das aber auch nicht ganz ausschließen.

Verwendete Formate und Konventionen

Dieses Buch besteht aus 47 »Secrets«, die thematisch in sieben Kapitel aufgeteilt sind. Diese Secrets sind mehr oder weniger unabhängig voneinander und können, solange die Voraussetzungen erfüllt sind, in beliebiger Reihenfolge gelesen werden. Die Beispiele der einzelnen Secrets sind keine kompletten Websites – nicht einmal Teile davon. Sie sind absichtlich so kurz und einfach wie möglich gehalten, um ihr Verständnis zu erleichtern. Ich gehe davon aus, dass Sie bereits wissen, was Sie implementieren wollen. Ich will hier keine guten Designideen vermitteln, sondern Lösungen für deren Implementierung.

image

Abbildung V.1
Dies ist ein Beispiel für eine Abbildung in der Seitenleiste, mit der ich Ihnen den großartigen Sir Adam Catlace vorstelle.

Jedes Secret besteht aus zwei oder mehr Abschnitten. Der erste Abschnitt mit der Überschritt »Problem« stellt die allgemeine CSS-Aufgabe vor, die es zu lösen gilt. Gelegentlich beschreibt die Einführung besonders beliebte Lösungen, die aber nicht ganz optimal sind (weil z.B. zu viel Markup gebraucht wird oder hartkodierte Werte benutzt werden). Der Abschnitt endet in der Regel mit Variationen der Frage: »Gibt es eine bessere Möglichkeit, unser Ziel zu erreichen?«

Hinweise wie dieser enthalten zusätzliche Informationen oder erklären einen im Text verwendeten Begriff.

Nach der Vorstellung des Problems folgen eine oder mehrere Lösungen. Dieses Buch ist durch die vielen von mir gehaltenen CSS-Vorträge inspiriert. Daher habe ich versucht, das interaktive Präsentationsformat, soweit es das Buch erlaubt, beizubehalten.

image Dies ist eine Warnung. Ihr Zweck ist es, (und das mag Sie jetzt überraschen!) Sie vor falschen Annahmen und anderen möglichen Gefahren zu warnen.

Aus diesem Grund enthalten die Lösungen viele Abbildungen, damit die visuellen Änderungen der einzelnen Schritte besser mitverfolgt werden können. Da sich die Abbildungen nicht immer direkt neben dem dazugehörigen Text befinden, sind sie durchnummeriert und im Text entsprechend markiert. Ein Beispiel für eine Abbildung sehen Sie in Abbildung V.1, und dieser Satz war ein Beispiel für eine Referenz darauf.

Eingebetteter Code wird als Festbreitenschrift dargestellt, während neben Farbangaben oft eine kleine Vorschau gezeigt wird (z.B. image #f06). Codeblöcke sehen so aus wie hier:

background: url("adamcatlace.jpg");

Oder so:

HTML

<figure>
    <img src="adamcatlace.jpg" />
    <figcaption>Sir Adam Catlace</figcaption>
</figure>

Vermutlich ist es Ihnen schon aufgefallen: Enthält der Codeblock kein CSS, wird dies in der rechten oberen Ecke vermerkt. Geht es bei dem besprochenen Beispiel nur um ein einzelnes Element, bei dem weder Pseudoklassen noch Pseudoelemente eine Rolle spielen, wird aus Gründen der Kürze normalerweise auf einen Selektor oder die geschweiften Klammern ({}) verzichtet.

Sämtliche JavaScript-Beispiele in diesem Buch enthalten reinen JavaScript-Code, ohne dass irgendwelche Frameworks oder Bibliotheken verwendet werden. Es gibt nur eine Hilfsfunktion, $$(), die es uns erleichtert, eine Schleife über eine Reihe von Elementen auszuführen, auf die ein bestimmter CSS-Selektor zutrifft. Die Funktionsdefinition lautet:

JS

function $$(selector, context) {
    context = context || document;
    var elements = context.querySelectorAll(selector);
    return Array.prototype.slice.call(elements);
}

Jedes Secret enthält ein oder mehrere funktionsfähige Beispiele, die über kurze und leicht zu merkende URLs unter play.csssecrets.io erreichbar sind. Eine Referenz darauf sieht so aus:

image PLAY! play.csssecrets.io/polka

Ich empfehle Ihnen dringend, diese »Play!«-Beispiele auszuprobieren, besonders wenn Sie die beschriebenen Techniken nicht richtig verstehen oder beim Verständnis stecken bleiben.

image

Ehre, wem Ehre gebührt: Wurde eine beschriebene Technik bereits von jemand anderem dokumentiert, ziehen wir in einem Absatz wie diesem den Hut vor der jeweiligen Person und geben außerdem den URL der Quelle an. Wir wissen alle, dass ein Abschnitt mit »Referenzen« am Ende eines Buchs nur nervt. Daher geben wir die Referenzen lieber im Kontext an.

Fast alle Secrets enden mit einer Liste der dazugehörigen Spezifikationen, die so aussieht wie hier:

Verwandte Spezifikationen

Hierzu gehören Referenzen auf alle Spezifikationen, aus denen die erwähnten Merkmale stammen. Wie beim Kasten mit den »Voraussetzungen« gilt dies jedoch nicht für CSS 2.1 (w3.org/TR/CSS21), da wir diese ansonsten in jedem »Verwandte Spezifikationen«-Abschnitt aufführen müssten. Das bedeutet, dass es für einige Secrets, die ausschließlich CSS 2.1-Features verwenden, keinerlei »Verwandte Spezifikationen« gibt.

Browserunterstützung und Fallback-Lösungen

image

Eine der größten Eigenarten dieses Buchs ist vermutlich das komplette Fehlen von Tabellen zur Browserunterstützung. Dies war eine bewusste Entscheidung. Bei den heutigen Release-Zyklen für Browser sind solche Informationen oft schon veraltet, wenn das Buch in die Läden kommt. Ich glaube, das ungenaue Informationen zur Browserunterstüztung irreführend und schlimmer als gar keine Informationen sind.

Dennoch werden die meisten gezeigten Secrets entweder gut bis sehr gut von den meisten aktuellen Browsern unterstützt oder lassen sich zumindest verwenden, ohne komplett zu versagen (nach dem Prinzip der »Graceful Degradation«). Besitzt eine hier beschriebene Technik gegenwärtig nur eingeschränkte Browserunterstützung, ist sie mit einem »Eingeschränkte Unterstützung«-Warnsymbol versehen wie dieser Absatz hier. Das sollte Hinweis genug sein, um Sie darauf hinzuweisen, die Lösung nur zu benutzen, nachdem Sie sich über die ausreichende Browserunterstützung informiert haben und ggf. nötige Fallback-Lösungen bereithalten.

Es existiert eine ganze Reihe guter Websites, die aktuelle Informationen zur Browserunterstützung bereitstellt:

Gelegentlich werden Sie feststellen, dass ein bestimmtes Merkmal zwar unterstützt wird, sich von Browser zu Browser aber unterscheidet. Vielleicht benötigen Sie eine bestimmte Präfixschreibweise (vendor prefix) oder eine leicht veränderte Syntax. In den Beispielen dieses Buchs finden Sie ausschließlich die standardkonforme Schreibweise. Allerdings können Sie so gut wie immer verschiedene Schreibweisen gemeinsam benutzen, und die Kaskade kümmert sich darum, welche Anweisung gewinnt. Aus diesem Grund sollten Sie die Standardversion immer zuletzt angeben. Um beispielsweise einen vertikalen Farbverlauf von image yellow nach image red zu definieren, finden Sie im Buch nur die standardkonforme Schreibweise:

background: linear-gradient(0deg, yellow, red);

Sollten Sie zudem auch sehr alte Browser unterstützen wollen, müssen Sie möglicherweise Code wie diesen schreiben:

Mehr zu Präfixschreibweisen und warum Sie diese von Ihrem Hauptcode getrennt halten sollten, finden Sie in Kapitel 1, Abschnitt »Eine Geschichte von Eis, Feuer und Herstellerpräfixen« auf Seite 7.

background: -moz-linear-gradient(0deg, yellow, red);
background: -o-linear-gradient(0deg, yellow, red);
background: -webkit-linear-gradient(0deg, yellow, red);
background: linear-gradient(0deg, yellow, red);

Da sich diese Unterschiede etwa so schnell verändern wie die Browserunterstützung, wird davon ausgegangen, dass Sie diese Dinge standardmäßig vor der Benutzung eines bestimmten CSS-Features recherchieren. Wir werden in den Lösungen dieses Buchs nicht weiter darauf eingehen.

So ähnlich verhält es sich mit den Fallback-Lösungen. In den meisten Fällen ist es üblich und sinnvoll, Fallback-Lösungen anzubieten, damit Ihre Website auch in älteren Browsern noch funktioniert, selbst wenn die Seiten dort nicht ganz so schick aussehen. Manchmal sind die Ausweichlösungen so offensichtlich wie die Annahme, dass Sie wissen, wie die Kaskade funktioniert. Dann wird nicht besonders intensiv darauf eingegangen. Wenn Sie beispielsweise einen Farbverlauf wie den gerade gezeigten definieren, sollten Sie am Anfang des Codes für alle Fälle immer auch eine einfache Farbdefinition verwenden. Eine gute Idee für eine einfache Farbe wäre beispielsweise der Durchschnitt aus beiden Verlaufsfarben (in diesem Fall image rgb(255, 128, 0)):

background: rgb(255, 128, 0);
background: -moz-linear-gradient(0deg, yellow, red);
background: -o-linear-gradient(0deg, yellow, red);
background: -webkit-linear-gradient(0deg, yellow, red);
background: linear-gradient(90deg, yellow, red);

In manchen Fällen lassen sich Fallback-Lösungen jedoch nicht über die Kaskade implementieren. Als letztes Mittel können Sie dann Werkzeuge wie Modernizr einsetzen, das dem Wurzelelement (<html>) bestimmte Klassen wie textshadow oder no-textshadow hinzufügt. Diese können Sie dann benutzen, um bestimmte Elemente nur dann mit Stilen zu versehen, wenn bestimmte Features unterstützt werden (oder auch nicht):

h1 { color: gray; }

.textshadow h1 {
    color: transparent;
    text-shadow: 0 0 .3em gray;
}

Ist das Feature, für das Sie einen Fallback erstellen wollen, neu genug, können Sie auch die »native« Modernizr-Schreibweise @supports benutzen. Das vorige Beispiel sähe dann so aus:

h1 { color: gray; }

@supports (text-shadow: 0 0 .3em gray) {
     h1 {
        color: transparent;
        text-shadow: 0 0 .3em gray;
    }
}

Im Augenblick sollten Sie @supports jedoch mit Vorsicht genießen. Durch seine Verwendung haben wir unseren Effekt nicht nur auf Browser beschränkt, die mit Textschatten umgehen können, sondern der Effekt funktioniert jetzt nur noch in Browsern, die die @supports-Regel verstehen. Und das sind noch einmal deutlich weniger.

Wenn alle Stricke reißen, gibt es immer noch die Möglichkeit, ein paar Zeilen hausgemachten JavaScript-Code zu benutzen, um ermitteln, ob bestimmte Features unterstützt werden, und dem Wurzelelement ggf. wie mit Modernizr entsprechende Klassen zuzuweisen. Um herauszufinden, ob eine bestimmte CSS-Eigenschaft untersützt wird, müssen Sie das element.style-Objekt eines beliebigen Elements auf die Existenz der Eigenschaft überprüfen:

JS

var root = document.documentElement; // <html>

if ('textShadow' in root.style) {
    root.classList.add('textshadow');
}
else {
    root.classList.add('no-textshadow');
}

Müssen wir auf mehrere Eigenschaften testen, können wir auch eine Funktion daraus machen:

JS

function testProperty(property) {
    var root = document.documentElement;

    if (property in root.style) {
        root.classList.add(property.toLowerCase());
        return true;
    }

    root.classList.add('no-' + property.toLowerCase());
    return false;
}