2013-12-28 05:15:25 +04:00
|
|
|
---
|
|
|
|
language: css
|
|
|
|
contributors:
|
|
|
|
- ["Mohammad Valipour", "https://github.com/mvalipour"]
|
|
|
|
translators:
|
|
|
|
- ["Kyr", "http://github.com/kyrami"]
|
|
|
|
lang: de-de
|
2014-01-30 11:30:28 +04:00
|
|
|
filename: learncss-de.css
|
2013-12-28 05:15:25 +04:00
|
|
|
---
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
In den frühen Tagen des Internets gab es keine visuellen Elemente, alles war nur reiner Text. Aber mit der Weiterentwicklung von Browsern wurden auch vollständig visuelle Webseiten zu einem Standard.
|
|
|
|
Durch Verwendung von CSS lässt sich eine strikte Trennung zwischen HTML-Code und Designelementen erreichen.
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
Kurzgefasst, CSS ermöglicht es, verschiedene HTML-Elemente innerhalb eines Dokuments auszuwählen und ihnen visuelle Eigenschaften zu geben.
|
2013-12-28 05:15:25 +04:00
|
|
|
|
|
|
|
CSS hat wie jede andere Sprache viele Versionen. Hier fokussieren wir uns auf CSS2.0, welche nicht die neueste, aber die am weitesten verbreitete und unterstützte Version ist.
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
**HINWEIS:** Weil die Ausgabe von CSS visuelle Eigenschaften sind, wirst du wahrscheinlich eine CSS-Sandbox wie [dabblet](http://dabblet.com/) benutzen müssen, um die Sprache richtig zu lernen.
|
2013-12-28 05:15:25 +04:00
|
|
|
In diesem Artikel wird am meisten auf generelle Hinweise und die Syntax geachtet.
|
|
|
|
|
|
|
|
|
|
|
|
```css
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Kommentare werden in Sternchen-Schrägstrichkombinationen gepackt (genauso wie hier!) */
|
2013-12-28 05:15:25 +04:00
|
|
|
|
|
|
|
/* ####################
|
|
|
|
## SELEKTOREN
|
|
|
|
####################*/
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Eigentlich ist das grundlegende CSS-Statement sehr simpel */
|
2013-12-28 05:15:25 +04:00
|
|
|
selektor { eigenschaft: wert; /* mehr eigenschaften...*/ }
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Der Selektor wird dazu benutzt, ein Element auf der Seite auszuwählen.
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
Man kann aber auch alle Elemente auf einer Seite auswählen! */
|
2013-12-28 05:15:25 +04:00
|
|
|
* { color:red; } /* farbe:rot */
|
|
|
|
|
|
|
|
/*
|
2014-09-21 12:57:16 +04:00
|
|
|
Angenommen wir haben folgendes Element auf einer Seite:
|
2013-12-28 05:15:25 +04:00
|
|
|
|
|
|
|
<div class='eine-klasse klasse2' id='eineId' attr='wert' />
|
|
|
|
*/
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* kann man es so über seine Klasse auswählen */
|
2013-12-28 05:15:25 +04:00
|
|
|
.eine-klasse { }
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* oder über beide Klassen! */
|
2013-12-28 05:15:25 +04:00
|
|
|
.eine-klasse.klasse2 { }
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* oder über den Namen des Tags */
|
2013-12-28 05:15:25 +04:00
|
|
|
div { }
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* oder über seine Id */
|
2013-12-28 05:15:25 +04:00
|
|
|
#eineId { }
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* oder darüber, dass es ein Attribut hat! */
|
2013-12-28 05:15:25 +04:00
|
|
|
[attr] { font-size:smaller; }
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* oder auch darüber, dass das Attribut einen bestimmten Wert hat */
|
2013-12-28 05:15:25 +04:00
|
|
|
[attr='wert'] { font-size:smaller; }
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* beginnt mit dem übergebenen Wert */
|
|
|
|
[attr^='we'] { font-size:smaller; }
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* endet damit */
|
2013-12-28 05:15:25 +04:00
|
|
|
[attr$='rt'] { font-size:smaller; }
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* oder beinhaltet einen Teil davon */
|
2013-12-28 05:15:25 +04:00
|
|
|
[attr~='er'] { font-size:smaller; }
|
|
|
|
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Noch wichtiger ist aber die Möglichkeit, all das miteinander kombinieren
|
|
|
|
zu können - man sollte hierbei nur mit der Leerzeichensetzung vorsichtig sein,
|
|
|
|
ein Leerzeichen macht es zu zwei verschiedenen Selektoren */
|
|
|
|
|
2013-12-28 05:15:25 +04:00
|
|
|
div.eine-klasse[attr$='rt'] { } /* so ist es richtig */
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Man kann auch ein Element über seine Elternelemente auswählen */
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* > wählt ein direktes Kind aus */
|
2014-01-02 20:30:48 +04:00
|
|
|
div.ein-elternteil > .klassen-name {}
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Mit einem Leerzeichen getrennt kann man alle Elternelemente ansprechen */
|
|
|
|
/* Das folgende heißt also, dass jedes Element mit der Klasse 'klassen-name'
|
|
|
|
und dem Elternteil IN JEDER TIEFE ausgewählt wird */
|
2014-01-02 20:30:48 +04:00
|
|
|
div.ein-elternteil .klassen-name {}
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Achtung: das selbe ohne das Leerzeichen hat eine andere Bedeutung,
|
2014-01-02 20:30:48 +04:00
|
|
|
kannst du mir sagen, was? */
|
|
|
|
div.ein-elternteil.klassen-name {}
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Man kann ein Element auch nach seinem direkten Nachbarelement
|
2014-01-02 20:30:48 +04:00
|
|
|
auswählen */
|
|
|
|
.ich-bin-vorher + .dieses-element { }
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Oder über jedes Geschwisterelement davor */
|
2014-01-02 20:30:48 +04:00
|
|
|
.ich-kann-jeder-davor-sein ~ .dieses-element {}
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Mit Pseudoklassen lassen sich Elemente anhand ihres momentanen Zustands
|
|
|
|
auf der Seite auswählen (anstatt über die Seitenstruktur) */
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Zum Beispiel, wenn über ein Element mit dem Mauszeiger gefahren wird */
|
2013-12-28 05:15:25 +04:00
|
|
|
:hover {}
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Oder einen bereits besuchten Link*/
|
2013-12-28 05:15:25 +04:00
|
|
|
:visited {}
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Oder einen noch nicht besuchten Link*/
|
2013-12-28 05:15:25 +04:00
|
|
|
:link {}
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
/* Oder ein Eingabeelement, das zurzeit im Fokus steht */
|
2013-12-28 05:15:25 +04:00
|
|
|
:focus {}
|
|
|
|
|
|
|
|
|
|
|
|
/* ####################
|
2014-01-02 20:30:48 +04:00
|
|
|
## EIGENSCHAFTEN
|
2013-12-28 05:15:25 +04:00
|
|
|
####################*/
|
|
|
|
|
|
|
|
selector {
|
2014-09-21 12:57:16 +04:00
|
|
|
|
|
|
|
/* Einheiten */
|
|
|
|
width: 50%; /* in Prozent */
|
|
|
|
font-size: 2em; /* mal der derzeitigen Schriftgröße */
|
|
|
|
width: 200px; /* in Pixeln */
|
|
|
|
font-size: 20pt; /* in Punkten */
|
|
|
|
width: 5cm; /* in Zentimetern */
|
|
|
|
width: 50mm; /* in Millimetern */
|
|
|
|
width: 5in; /* in Zoll */
|
|
|
|
|
|
|
|
/* Farben */
|
|
|
|
background-color: #F6E /* in kurzem Hex */
|
|
|
|
background-color: #F262E2 /* in langem Hex */
|
|
|
|
background-color: tomato /* kann auch eine benannte Farbe sein */
|
|
|
|
background-color: rgb(255, 255, 255) /* in RGB */
|
|
|
|
background-color: rgb(10%, 20%, 50%) /* in RGB Prozent */
|
|
|
|
background-color: rgba(255, 0, 0, 0.3); /* in semi-transparentem RGB */
|
|
|
|
|
|
|
|
/* Bilder */
|
2014-01-02 20:38:25 +04:00
|
|
|
background-image: url(/pfad-zum-bild/image.jpg);
|
2014-09-21 12:57:16 +04:00
|
|
|
|
|
|
|
/* Schriften */
|
2013-12-28 05:15:25 +04:00
|
|
|
font-family: Arial;
|
2014-09-21 12:57:16 +04:00
|
|
|
font-family: "Courier New"; /* wenn der Name ein Leerzeichen beinhält, kommt er in
|
|
|
|
Anführungszeichen */
|
|
|
|
font-family: "Courier New", Trebuchet, Arial; /* wird die erste Schriftart
|
|
|
|
nicht gefunden, wird die zweite benutzt, usw. */
|
2013-12-28 05:15:25 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
```
|
|
|
|
|
2014-01-02 20:30:48 +04:00
|
|
|
## Benutzung
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2015-10-14 09:46:52 +03:00
|
|
|
Speichere das CSS, das du benutzen willst, mit der Endung '.css'.
|
2013-12-28 05:15:25 +04:00
|
|
|
|
|
|
|
```xml
|
2015-10-14 09:46:52 +03:00
|
|
|
<!-- du musst die CSS-Datei im <head>-bereich der Seite einbinden -->
|
2013-12-28 05:15:25 +04:00
|
|
|
<link rel='stylesheet' type='text/css' href='filepath/filename.css' />
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
<!-- Einbindung funktioniert auch inline, wobei diese Methode nicht
|
2014-01-02 20:30:48 +04:00
|
|
|
empfohlen ist -->
|
2013-12-28 05:15:25 +04:00
|
|
|
<style>
|
|
|
|
selector { property:value; }
|
|
|
|
</style>
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
<!-- Oder direkt auf einem Element (sollte aber vermieden werden) -->
|
2013-12-28 05:15:25 +04:00
|
|
|
<div style='property:value;'>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
```
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
## Spezifität
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
Ein Element kann natürlich auch von mehr als einer Regel in einem Stylesheet
|
|
|
|
angesprochen werdenm und kann eine Eigenschaft auch öfters als einmal zugewiesen
|
|
|
|
bekommen. In diesen Fällen gibt es Regeln, die die Spezifität von Selektoren regeln.
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
Wir haben dieses CSS:
|
2013-12-28 05:15:25 +04:00
|
|
|
|
|
|
|
```css
|
|
|
|
/*A*/
|
2014-01-02 20:30:48 +04:00
|
|
|
p.klasse1[attr='wert']
|
2013-12-28 05:15:25 +04:00
|
|
|
|
|
|
|
/*B*/
|
2014-01-02 20:30:48 +04:00
|
|
|
p.klasse1 {}
|
2013-12-28 05:15:25 +04:00
|
|
|
|
|
|
|
/*C*/
|
2014-01-02 20:30:48 +04:00
|
|
|
p.klasse2 {}
|
2013-12-28 05:15:25 +04:00
|
|
|
|
|
|
|
/*D*/
|
|
|
|
p {}
|
|
|
|
|
|
|
|
/*E*/
|
2014-01-02 20:30:48 +04:00
|
|
|
p { property: wert !important; }
|
2013-12-28 05:15:25 +04:00
|
|
|
|
|
|
|
```
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
und das folgende Markup:
|
2013-12-28 05:15:25 +04:00
|
|
|
|
|
|
|
```xml
|
|
|
|
<p style='/*F*/ property:value;' class='class1 class2' attr='value'>
|
|
|
|
</p>
|
|
|
|
```
|
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
Die Spezifität der Stile ist wie folgt:
|
|
|
|
(die Spezifität gilt nur für **einzelne Eigenschaften**, nicht für ganze Blöcke)
|
|
|
|
|
2015-10-14 09:46:52 +03:00
|
|
|
* `E` hat die größte Spezifität wegen des Schlüsselworts `!important`.
|
2014-09-21 12:57:16 +04:00
|
|
|
man sollte diese Form aber vermeiden.
|
2015-10-14 09:46:52 +03:00
|
|
|
* `F` ist als nächstes dran, da es direkt an dem Element definiert ist.
|
2014-09-21 12:57:16 +04:00
|
|
|
* Dann folgt `A`, da es "spezifischer" als alle anderen ist.
|
|
|
|
spezifischer = mehr Zuweisungen: 1 Tagname `p` +
|
|
|
|
Klassenname `klasse1` + 1 Attribut `attr='value'`
|
|
|
|
* `C` kommt als nächstes, obwohl es genau so ist wie `B`,
|
|
|
|
es erscheint aber später im Stylesheet.
|
|
|
|
* dann kommt `B`
|
2014-01-02 20:30:48 +04:00
|
|
|
* und als letztes `D`.
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
## Kompatibilität
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
Die meisten Features von CSS sind in allen Browsern verfügbar. Man sollte
|
|
|
|
jedoch immer darauf achten die benutzten Features auf Verfügbarkeit in den
|
|
|
|
vom Projekt unterstützten Browser zu überprüfen.
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-09-21 12:57:16 +04:00
|
|
|
[QuirksMode CSS](http://www.quirksmode.org/css/) oder [Can I Use](http://caniuse.com/) sind zwei der besten Quellen dafür.
|
2013-12-28 05:15:25 +04:00
|
|
|
|
2014-01-02 20:30:48 +04:00
|
|
|
## Weiterlesen
|
2013-12-28 05:15:25 +04:00
|
|
|
|
|
|
|
* [Understanding Style Precedence in CSS: Specificity, Inheritance, and the Cascade](http://www.vanseodesign.com/css/css-specificity-inheritance-cascaade/)
|
|
|
|
* [QuirksMode CSS](http://www.quirksmode.org/css/)
|
|
|
|
* [Z-Index - The stacking context](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Understanding_z_index/The_stacking_context)
|
|
|
|
|