Eine Sammlung an Tipps, um deine CSS-Fähigkeiten zu professionalisieren.
Für andere großartige Listen schaue dir [@sindresorhus](https://github.com/sindresorhus/)s kuratierte Liste von “awesome” Listen an.
box-sizing
unset
, anstatt alle Eigenschaften
zurückzusetzen
:not()
um Rahmen an die Navigation zu setzen
oder zu entfernen
line-height
an body
:focus
für Form-Elemente
nth-child
max-height
für reine CSS-Galerien
rem
für globales Ändern der Größe; Benutze
em
für lokale Größenveränderungen
:root
für flexible Schrift
font-size
auf Formular-Elemente für eine bessere
mobile Erfahrung
Pointer
-Events um Mausereignisse zu
kontrollieren
display: none
ein
CSS Resets helfen dabei eine Gestaltungskonsistenz zwischen verschiedenen Browsern herzustellen, indem sie für einen sauberen Zustand zwischen den einzelnen Elementen sorgen. Du kannst eine CSS Resetsammlung wie Normalize, usw. benutzen, oder einen etwas einfacheren Ansatz wählen:
Nun werden Elemente von ihren Margins und Paddings befreit und
box-sizing
lässt dich das CSS Box-Modell handhaben.
Hinweis: Wenn du den
Inherit box-sizing
-Tipp im unten folgenden Punkt befolgst, kannst du dich dafür entscheiden
keine box-sizing
-Eigenschaft in dein CSS Reset aufzunehmen.
box-sizing
Übernehme box-sizing
von html
:
Dies macht es einfacher das box-sizing
über Plugins oder
andere Komponenten zu verändern.
unset
, anstatt alle Eigenschaften zurückzusetzen
Wenn du die Eigenschaften eines Elements zurücksetzt, ist es nicht notwendig jede einzelne Eigenschaft individuell zurückzusetzen:
button {
background: none;
border: none;
color: inherit;
font: inherit;
outline: none;
padding: 0;
}
Du kannst alle Eigenschaften eines Elements spezifizieren, indem du das
all
-Kürzel verwendest. Der Wert unset
setzt die
Eigenschaften eines Elements auf den initialen Wert zurück:
Hinweis: Die Kurzform all
und “unset” wird
in IE11 nicht unterstützt.
:not()
um Rahmen an die Navigation zu setzen oder zu
entfernen
Anstatt den Rahmen zu ergänzen…
…um ihn dann beim letzten Element wieder zu entfernen…
…benutze die :not()
-Pseudoklasse um nur die Elemente zu
gestalten, die du willst:
Sicher, du kannst .nav li + li
verwenden, aber mit
:not()
ist die Absicht sehr klar und der CSS Selektor
definiert den Rahmen auf die Weise wie ihn auch ein Mensch beschreiben
würde.
Du kan kontrollere, om en skrifttype er installeret lokalt, før du henter den eksternt, hvilket også er et godt ydelsestip.
@font-face {
font-family: "Dank Mono";
src:
/* Full name */
local("Dank Mono"),
/* Postscript name */
local("Dank Mono"),
/* Otherwise, download it! */
url("//...a.server/fonts/DankMono.woff");
}
code {
font-family: "Dank Mono", system-ui-monospace;
}
Hat tip til Adam Argyle for at dele denne protip og demoen.
line-height
an body
Du brauchst kein line-height
an jedes <p>
,
<h*>
, usw separat zu schreiben. Ergänze es stattdessen
an body
:
Auf diese Weise können Textelemente dies einfach von
body
übernehmen.
:focus
für Form-Elemente
Sehende Tastaturbenutzer_innen sind auf die Fokussierung angewiesen, um unterscheiden zu können wohin Tastaturevents auf der Seite gehen. Gestalte den Fokus für Formular-Elemente klar ersichtlich und konsistenter als die voreingestellte Browserimplementation:
a:focus,
button:focus,
input:focus,
select:focus,
textarea:focus {
box-shadow: none;
outline: #000 dotted 2px;
outline-offset: .05em;
}
Nein, das ist keine Hexerei – du kannst wirklich alle Elemente vertikal zentrieren. Das machst du mit Flexbox…
html,
body {
height: 100%;
margin: 0;
}
body {
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
display: -webkit-flex;
display: flex;
}
…und ebenso mit CSS Grid:
Möchtest du etwas anderes zentrieren? Vertikal, horizontal… alles, jederzeit, überall? CSS-Tricks hat eine schöne Ausarbeitung über all dies.
Hinweis: Passe auf das fehlerhafte Verhalten von Flexbox in IE11 auf.
Lasse Listenpunkte wie eine echte kommaseparierte Liste aussehen:
Benutze die :not()
-Pseudoklasse, um nach dem letzten
Listenpunkt kein Komma anzuzeigen.
Hinweis: Dieser Tipp mag hinsichtlich der Zugänglichkeit für Bildschirmvorleseprogramme nicht ideal sein. Auch Kopieren/Einfügen von browsergeneriertem Inhalt funktioniert nicht. Handle deswegen mit Vorsicht.
nth-child
Benutze ein negatives nth-child
im CSS um Items von 1 bis n
auszuwählen.
li {
display: none;
}
/* wähle die Listenpunkte 1 bis 3 und zeige sie an */
li:nth-child(-n+3) {
display: block;
}
Anderweitig, da du nun ein bisschen über die
Benutzung von :not()
gelernt hast, versuche folgendes:
/* wähle alle Listenpunkte außer die ersten 3 und zeige sie an */
li:not(:nth-child(-n+3)) {
display: block;
}
Es gibt keinen Grund SVG für Symbole nicht zu verwenden:
SVG skaliert für alle verschiedenen Auflösungen sehr gut und wird von allen Browsern zurück bis zu IE9 unterstützt. Gebe deinen .png, .jpg, or .gif-jif-wasauchimmer-Dateien den Laufpass.
Hinweis: Wenn du nur SVG-Symbole in Button-Schaltflächen für sehende Benutzer_innen verwendest und das SVG nicht geladen wird, kannst du die Zugänglichkeit wie folgt erhalten:
Er hat zwar einen seltsamen Namen aber der Universal-Selektor
(*
) mit dem angrenzenden Geschwister-Selektor
(+
) kann starke CSS-Möglichkeiten darbieten:
In diesem Beispiel bekommen alle Elemente im Fluss des Dokuments, die
anderen Elementen folgen, margin-top: 1.5em
.
Für mehr bezüglich des “lobotomisierte Eule”-Selektors lese Heydon Pickerings Eintrag auf A List Apart.
max-height
für reine CSS-Galerien
Implementiere reine CSS Galerien über max-height
in
Verbindung mit overflow: hidden
:
.slider {
max-height: 200px;
overflow-y: hidden;
width: 300px;
}
.slider:hover {
max-height: 600px;
overflow-y: scroll;
}
Das Element dehnt sich beim Überfahren zum Wert von
max-height
aus und die Galerie wird als das Ergebnis des
Overflows dargestellt.
Tabellen können ein ganz schönes Problem sein. Versuche
table-layout: fixed
, um die Tabellenzellen auf die gleiche
Größe zu setzen:
Schmerzfreie Tabellen-Layouts.
Wenn du mit Spaltenabständen arbeitest, kannst du dich von
nth-
, first-
und last-child
-Hacks
verabschieden, indem du die Flexbox-Eigenschaft
space-between
verwendest:
Nun erscheinen Spaltenabstände immer gleichmäßig.
Zeige Verlinkungen an, wenn das <a>
-Element keinen
Textwert beinhaltet, das href
-Attribut jedoch eine Verlinkung
hat:
Das ist äußerst praktisch.
Ergänze eine Darstellung für die von Browsern voreingestellte Verlinkung:
Nun werden Verlinkungen, die über ein CMS eingesetzt wurden – welche
überlicherweise kein class
-Attribut haben – unterscheidbar
sein, ohne die Kaskade im Allgemeinen zu beeinflussen.
Um eine Box mit zugehörigem Größenverhältnis zu erstellen, brauchst du nur eine Padding-top/-bottom-Eigenschaft zu bezeichnen:
.container {
height: 0;
padding-bottom: 20%;
position: relative;
}
.container div {
border: 2px dashed #ddd;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
Das Anwenden eines Wertes von 20% auf die Padding-Eigenschaft erzeugt eine Box mit der gleichen Höhe in Bezug auf 20% ihrer Breite. Ungeachtet der Weite des Ansichtsfensters, wird das Kind-Div sein Seitenverhältnis beibehalten (100% / 20% = 5:1).
Erzeuge mit einem kleinen bisschen CSS ästhetisch ansprechendere defekte Bilder:
img {
display: block;
font-family: sans-serif;
font-weight: 300;
height: auto;
line-height: 2;
position: relative;
text-align: center;
width: 100%;
}
Nun ergänze Regeln für Pseudo-Elemente, die eine Nachricht für die Benutzer_innen darstellen, sowie eine URL-Referenz des defekten Bildes:
img::before {
content: "Entschuldige bitte, das Bild ist leider defekt :(";
display: block;
margin-bottom: 10px;
}
img::after {
content: "(url: " attr(src) ")";
display: block;
font-size: 12px;
}
Lerne mehr über das Gestalten dieses Modells in Ire Aderinokuns ursprünglichen Beitrag.
rem
für globales Ändern der Größe; Benutze
em
für lokale Größenveränderungen
Nachdem du die grundlegende Schriftgröße (html { font-size: 100%; }
) festgelegt hast, setze die Schriftgrößen für Textelemente auf
em
:
Dann setze die Schriftgröße für Module auf rem
:
Nun sollte jedes Modul gegliedert, einfacher zu gestalten, wartbarer und flexibler sein.
Das ist ein großartiger Trick für ein speziell angefertigtes Stylesheet. Vermeide es die Benutzer_innen mit den Geräuschen eines automatisch startenden Videos zu überfordern. Zeige das Video nicht, wenn die Töne nicht auf stumm geschaltet sind:
Erneut nutzen wir die
:not()
-Pseudoklasse zu unserem Vorteil.
:root
für flexible Schrift
Die Größe der Schriftart innerhalb eines responsive Layouts
sollte mit jedem Ansichtsfenster veränderbar sein. Du kannst die
Schriftgröße basierend auf der Höhe und Weite des Fensters berechnen,
indem du :root
verwendest:
Nun kannst du die root em
-Einheit verwenden, die auf den
errechneten Werten von :root
basiert:
font-size
auf Formular-Elemente für eine bessere mobile
Erfahrung
Um mobile Browser (iOS Safari, usw.) am Hereinzoomen in das HTML-Formular
zu hindern sobald ein <select>
-Dropdown betätigt wird,
ergänze font-size
zu der Regel des Selektors:
:dancer:
Pointer
-Events um Mausereignisse zu kontrollieren
Pointer-Events erlauben es dir zu spezifizieren wie die Maus mit dem Element interagiert sobald sie es berührt. Um beispielsweise das standardgemäß eingestellte Pointer-Event – beispielsweise bei einer Button-Schaltfläche – abzuschalten:
So einfach ist das.
display: none
ein
Wie Harry Roberts hervorhob, kann dies dazu beitragen, dass CMS-Benutzer keine zusätzlichen Zeilenumbrüche als Abstand verwenden:
Aktuelle Versionen von Chrome, Firefox, Safari, Opera, Edge und IE11.