Skip to content

Commit 54bfa71

Browse files
Merge pull request #8 from zweitag/css-best-practices
CSS Best Practices
2 parents db9451c + 828d299 commit 54bfa71

File tree

3 files changed

+202
-202
lines changed

3 files changed

+202
-202
lines changed

README.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ Die Syntax von BEM finden wir jedoch etwas sperrig und haben uns für ein andere
178178

179179
#### assets/stylesheets/generic-components/_headline.css.sass
180180

181-
```sass
181+
``` sass
182182
.headline
183183
+font-serif
184184
&.xl
@@ -187,7 +187,7 @@ Die Syntax von BEM finden wir jedoch etwas sperrig und haben uns für ein andere
187187

188188
#### assets/stylesheets/generic-components/_media-list.css.sass
189189

190-
```sass
190+
``` sass
191191
.media-list
192192
margin-bottom: 20px
193193
@@ -198,8 +198,9 @@ Die Syntax von BEM finden wir jedoch etwas sperrig und haben uns für ein andere
198198
display: block
199199
```
200200

201-
#### assets/stylesheets/specific-components/_product.css.sass
202-
```sass
201+
#### assets/stylesheets/specific-components/_product.css.sass
202+
203+
``` sass
203204
.product
204205
background-color: $color-product-background
205206
@@ -232,10 +233,10 @@ Im Ordner `utilitis` finden sich Mixins, die in Komponenten eingesetzt werden k
232233
* _responsify.css.sass
233234
*
234235

235-
## Selector Best Practices
236+
## Best Practices
236237

237238
* [Customizing Components](customizing-components.md)
238-
* [Selector Intent](http://cssguidelin.es/#selector-intent)
239+
* [CSS Best Practices](css-best-practices.md)
239240
* [Portability](http://cssguidelin.es/#portability)
240241
* [Specificity](http://cssguidelin.es/#specificity)
241242

css-best-practices.md

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
# CSS Best Practices
2+
3+
## Selektorregeln
4+
5+
### Vermeide zu generische Selektoren
6+
7+
Um den Code einfacher erweitern und besser warten zu können, ist ein gezieltes Styling von Elementen immens wichtig. Die Faustregel dazu: Sobald ein Element gestylet werden soll, setze eine Klasse.
8+
9+
**schlecht**
10+
11+
``` sass
12+
header
13+
padding: 10px 20px
14+
15+
h2
16+
margin: 0
17+
18+
ul
19+
list-style-type: circle
20+
```
21+
22+
**gut**
23+
24+
``` sass
25+
.page-header
26+
padding: 10px 20px
27+
28+
.subtitle
29+
margin: 0
30+
31+
.link-list
32+
list-style-type: circle
33+
```
34+
35+
### Vermeide Basiselementselektoren
36+
37+
Basiselementselektoren sind schlecht (siehe Regel darüber) und erhöhen die Spezifität unnötigerweise. Auch hier sollte auf eine Klasse zurückgegriffen werden. Außerdem sollten Elemente wie `<div>` und `<span>` im Markup immer ein Klassenattribut besitzen. Andernfalls wären sie sowieso überflüssig.
38+
39+
**schlecht**
40+
41+
``` sass
42+
.navigation div
43+
.navigation span
44+
.navigation ul
45+
```
46+
47+
**gut**
48+
49+
``` sass
50+
.navigation--box
51+
.navigation--title
52+
.navigation--list
53+
```
54+
55+
### Vermeide eine Überspezifizierung durch Basiselementselektoren
56+
57+
Eine Überspezifizierung durch Basiselementselektoren hat zur Folge, dass der CSS-Code ans Markup gekoppelt wird. Würde man das Element im Markup ändern, z.B. aus einer `h2` eine `h3` machen, müsste man dies auch im Stylesheet tun, was einen erhöhten Wartungsaufwand nach sich zieht. Obendrein wird die Spezifität unnötigerweise erhöht.
58+
59+
**schlecht**
60+
61+
``` sass
62+
ul.link-list
63+
div.example
64+
a.back
65+
```
66+
67+
**gut**
68+
69+
``` sass
70+
.link-list
71+
.example
72+
.back
73+
```
74+
75+
### Vermeide Nachfahrenselektoren
76+
77+
Der Nachfahrenselektor ist der teuerste Selektor in CSS. Gib dem entsprechenden Element besser eine Klasse und style es direkt.
78+
79+
**schlecht**
80+
81+
``` sass
82+
.link-list li a
83+
```
84+
85+
**gut**
86+
87+
``` sass
88+
.link-list--link
89+
```
90+
91+
### Vermeide den selben Selektor fürs Styling (CSS) und fürs Verhalten (JS) zu verwenden
92+
93+
Separation of concerns. Möchte man Javascript auf ein Element anwenden, hat es sich etabliert, hierfür ein `data-*`Attribut zu nutzen. Der Vorteil: Ändert man später nochmal das Klassenattribut, bleibt das Javascript weiterhin in Takt.
94+
95+
**schlecht**
96+
97+
``` sass
98+
.dialog-opener
99+
```
100+
101+
``` js
102+
$('.dialog-opener')
103+
```
104+
105+
**gut**
106+
107+
``` js
108+
$("[data-role='dialog-opener']")
109+
```
110+
111+
## Coding Konventionen
112+
113+
### Benutze die Kurzschreibweise
114+
115+
Wenn man alle Werte einer Eigenschaft auf einmal angibt, ist die Kurzschreibweise schneller zu erfassen und spart obendrein ein paar Bytes ein.
116+
117+
**schlecht**
118+
119+
``` sass
120+
.box
121+
padding-top: 0
122+
padding-right: 10px
123+
padding-bottom: 20px
124+
padding-left: 10px
125+
```
126+
127+
**gut**
128+
129+
``` sass
130+
.box
131+
padding: 0 10px 20px
132+
```
133+
134+
### Gib nur die Werte an, die du auch setzen willst
135+
136+
Wenn man zu viele Werte auf einmal angibt, könnte es sein, dass man versehentlich einen vererbten Wert überschreibt. Außerdem muss man diesen Wert dann u.U. später nochmal überschreiben, weil er sich wiederum selbst weitervererbt hat.
137+
138+
**schlecht**
139+
140+
``` sass
141+
.box
142+
padding: 0 10px 0 0
143+
background: rgba(0, 0, 0, 0.5)
144+
```
145+
146+
**gut**
147+
148+
``` sass
149+
.box
150+
padding-right: 10px
151+
background-color: rgba(0, 0, 0, 0.5)
152+
```
153+
154+
### Vermeide die Einheitsangabe nach dem Wert "0"
155+
156+
Null ist Null. :)
157+
158+
**schlecht**
159+
160+
``` sass
161+
.box
162+
margin: 0px
163+
```
164+
165+
**gut**
166+
167+
``` sass
168+
.box
169+
margin: 0
170+
```
171+
172+
**Ausnahme dort, wo sie nicht weggelassen werden darf**
173+
174+
``` sass
175+
.box
176+
transform: rotate(0deg)
177+
```
178+
179+
### Nutze 100–900 bei der Angabe der Schriftdicke
180+
181+
Die Zahlen 100, 200 … 900 sind typografischer Standard und erlauben es uns, differenzierter mit Abstufungen der Schriftdicke umzugehen als es _normal_ und _bold_ tun.
182+
183+
**schlecht**
184+
185+
``` sass
186+
.box
187+
font-weight: bold
188+
```
189+
190+
**gut**
191+
192+
``` sass
193+
.box
194+
font-weight: 700
195+
```

0 commit comments

Comments
 (0)