CSS `@` Regels
Dit artikel legt de CSS @
regels uit.
Je leert het gebruik en hoe je @
regels zoals @import
en @media
kunt schrijven.
YouTube Video
HTML voor Voorbeeldweergave
css-at-rule.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>CSS At Rules</title>
7 <link rel="stylesheet" href="css-base.css">
8 <link rel="stylesheet" href="css-at-rule.css">
9</head>
10<body>
11 <!-- Header -->
12 <header>
13 <h1>CSS At(@) Rules</h1>
14 </header>
15
16 <!-- Main content -->
17 <main>
18 <header><h2>CSS At(@) Rules</h2></header>
19 <article>
20 <h3>@import</h3>
21 <section>
22 <header><h4>CSS</h4></header>
23<pre class="sample">
24@import url('styles.css');
25</pre>
26 </section>
27 </article>
28 <article>
29 <h3>@media</h3>
30 <section>
31 <header><h4>CSS</h4></header>
32<pre class="sample">
33@media screen and (max-width: 600px) {
34 body {
35 background-color: lightblue;
36 }
37}
38</pre>
39 </section>
40 </article>
41 <article>
42 <h3>@media Example(Screen Width)</h3>
43 <section>
44 <header><h4>CSS</h4></header>
45<pre class="sample">
46@media (min-width: 600px) {
47 body {
48 background-color: lightblue;
49 }
50}
51@media (max-width: 599px) {
52 body {
53 background-color: lightpink;
54 }
55}
56</pre>
57 </section>
58 </article>
59 <article>
60 <h3>@media Example(Orientation)</h3>
61 <section>
62 <header><h4>CSS</h4></header>
63<pre class="sample">
64@media (orientation: portrait) {
65 body {
66 font-size: 18px;
67 }
68}
69@media (orientation: landscape) {
70 body {
71 font-size: 16px;
72 }
73}
74</pre>
75 </section>
76 </article>
77 <article>
78 <h3>@media Example(Resolution)</h3>
79 <section>
80 <header><h4>CSS</h4></header>
81<pre class="sample">
82@media (min-resolution: 2dppx) {
83 body {
84 background-image: url('high-res-image.png');
85 }
86}
87</pre>
88 </section>
89 </article>
90 <article>
91 <h3>@media Example(AND Condition)</h3>
92 <section>
93 <header><h4>CSS</h4></header>
94<pre class="sample">
95@media (min-width: 600px) and (orientation: portrait) {
96 body {
97 background-color: lightgreen;
98 }
99}
100</pre>
101 </section>
102 </article>
103 <article>
104 <h3>@media Example(OR Condition)</h3>
105 <section>
106 <header><h4>CSS</h4></header>
107<pre class="sample">
108@media (max-width: 400px), (orientation: landscape) {
109 body {
110 color: gray;
111 }
112}
113</pre>
114 </section>
115 </article>
116 <article>
117 <h3>@media Example(NOT Condition)</h3>
118 <section>
119 <header><h4>CSS</h4></header>
120<pre class="sample">
121@media not all and (min-width: 600px) {
122 body {
123 font-size: 14px;
124 }
125}
126</pre>
127 </section>
128 </article>
129 <article>
130 <h3>@font-face</h3>
131 <section>
132 <header><h4>CSS</h4></header>
133<pre class="sample">
134@font-face {
135 font-family: 'CustomFont';
136 src: url('customfont.woff2') format('woff2'),
137 url('customfont.woff') format('woff');
138}
139</pre>
140 </section>
141 </article>
142 <article>
143 <h3>@keyframes</h3>
144 <section>
145 <header><h4>CSS</h4></header>
146<pre class="sample">
147@keyframes slidein {
148 from {
149 transform: translateX(100%);
150 }
151 to {
152 transform: translateX(0%);
153 }
154}
155
156div {
157 animation: slidein 2s ease-in-out;
158}
159</pre>
160 </section>
161 </article>
162 <article>
163 <h3>@supports</h3>
164 <section>
165 <header><h4>CSS</h4></header>
166<pre class="sample">
167@supports (display: grid) {
168 .container {
169 display: grid;
170 }
171}
172</pre>
173 </section>
174 </article>
175 <article>
176 <h3>@page</h3>
177 <section>
178 <header><h4>CSS</h4></header>
179<pre class="sample">
180@page {
181 size: A4;
182 margin: 2cm;
183}
184</pre>
185 </section>
186 </article>
187 <article>
188 <h3>@charset</h3>
189 <section>
190 <header><h4>CSS</h4></header>
191<pre class="sample">
192@charset "UTF-8";
193</pre>
194 </section>
195 </article>
196 <article>
197 <h3>@layer</h3>
198 <section>
199 <header><h4>CSS</h4></header>
200<pre class="sample">
201@layer reset {
202 h1 {
203 margin: 0;
204 }
205}
206@layer base {
207 h1 {
208 font-size: 24px;
209 color: blue;
210 }
211}
212@layer theme {
213 h1 {
214 color: red;
215 }
216}
217</pre>
218 <header><h4>HTML</h4></header>
219<pre>
220<h1>CSS Layer Test</h1>
221<p>
222 This page demonstrates how to apply styles to
223 the <code>&lt;h1&gt;</code> element using CSS layers.
224</p>
225</pre>
226 <header><h4>HTML+CSS</h4></header>
227 <section class="sample-view">
228 <h1>CSS Layer Test</h1>
229 <p>
230 This page demonstrates how to apply styles to
231 the <code><h1></code> element using CSS layers.
232 </p>
233 </section>
234 </section>
235 </article>
236 <article>
237 <h3>@layer with order</h3>
238 <section>
239 <header><h4>CSS</h4></header>
240<pre class="sample">
241@layer theme, base, reset;
242
243@layer reset {
244 h1 {
245 margin: 0;
246 }
247}
248@layer base {
249 h1 {
250 font-size: 24px;
251 color: blue;
252 }
253}
254@layer theme {
255 h1 {
256 color: red;
257 }
258}
259</pre>
260 <header><h4>HTML</h4></header>
261<pre>
262<h1>CSS Layer Test</h1>
263<p>
264 This page demonstrates how to apply styles to
265 the <code>&lt;h1&gt;</code> element using CSS layers.
266</p>
267</pre>
268 <header><h4>HTML+CSS</h4></header>
269 <section class="sample-view">
270 <h1>CSS Layer Test</h1>
271 <p>
272 This page demonstrates how to apply styles to
273 the <code><h1></code> element using CSS layers.
274 </p>
275 </section>
276 </section>
277 </article>
278 <article>
279 <h3>@import & @layer</h3>
280 <section>
281 <header><h4>CSS</h4></header>
282<pre class="sample">
283@import url('css/reset.css') layer(reset);
284@import url('css/base.css') layer(base);
285@import url('css/theme.css') layer(theme);
286</pre>
287 <header><h4>HTML</h4></header>
288<pre>
289<h1>CSS Layer Test</h1>
290<p>
291 This page demonstrates how to apply styles to
292 the <code>&lt;h1&gt;</code> element using CSS layers.
293</p>
294</pre>
295 <header><h4>HTML+CSS</h4></header>
296 <section class="sample-view">
297 <h1>CSS Layer Test</h1>
298 <p>
299 This page demonstrates how to apply styles to
300 the <code><h1></code> element using CSS layers.
301 </p>
302 </section>
303 </section>
304 </article>
305 </main>
306</body>
307</html>
CSS @
Regels
CSS @
regels (at-regels) zijn speciale instructies die worden gebruikt om het gedrag en de toepassingsvoorwaarden van stijlsheets te regelen. In tegenstelling tot normale CSS-eigenschappen passen @
regels conditioneel stijlen toe of importeren externe bronnen. Representatieve @
regels zijn onder andere @media
, @import
en @keyframes
.
Soorten Voorbeeldige @
Regels
@import
1@import url('styles.css');
@import
wordt gebruikt om andere CSS-bestanden in het huidige stijlsheet te importeren. Dit maakt het eenvoudig om externe CSS-bestanden te hergebruiken.
Belangrijke punten:
@import
moet aan het begin van het stijlsheet worden geschreven.- Het moet vermeden worden in grote projecten vanwege de impact op de prestaties.
@media
1@media screen and (max-width: 600px) {
2 body {
3 background-color: lightblue;
4 }
5}
@media
gebruikt media-query's om stijlen toe te passen op basis van specifieke voorwaarden (zoals schermbreedte, resolutie, enzovoort). Het wordt vaak gebruikt bij de implementatie van responsief design.
Veelgebruikte voorwaarden
De volgende zijn veelvoorkomende voorwaarden die vaak worden gebruikt in mediaqueries.
Voorwaarden Gebaseerd op Breedte
1@media (min-width: 600px) {
2 body {
3 background-color: lightblue;
4 }
5}
6@media (max-width: 599px) {
7 body {
8 background-color: lightpink;
9 }
10}
- Minimale breedte (
min-width
) past stijlen toe wanneer de breedte gelijk is aan of groter is dan de opgegeven waarde. - Maximale breedte (
max-width
) past stijlen toe wanneer de breedte gelijk is aan of kleiner is dan de opgegeven waarde.
Apparaat Oriëntatie (orientation
)
1@media (orientation: portrait) {
2 body {
3 font-size: 18px;
4 }
5}
6@media (orientation: landscape) {
7 body {
8 font-size: 16px;
9 }
10}
- Apparaat oriëntatie (
orientation
) kan worden ingesteld op portret of landschap.
Resolutie (resolution
)
1@media (min-resolution: 2dppx) {
2 body {
3 background-image: url('high-res-image.png');
4 }
5}
- Stijlen kunnen worden toegepast op basis van resolutie (
resolution
). - In dit voorbeeld is een achtergrondafbeelding met hoge resolutie gespecificeerd voor schermen met een hoge resolutie.
Voorwaarden Combineren
Mediaqueries kunnen ook meerdere voorwaarden combineren.
EN Voorwaarde (and
)
1@media (min-width: 600px) and (orientation: portrait) {
2 body {
3 background-color: lightgreen;
4 }
5}
- De EN-voorwaarde past stijlen toe wanneer aan alle voorwaarden wordt voldaan.
- In dit voorbeeld, wanneer de schermbreedte
600px
of groter is en in portretoriëntatie, wordt de achtergrondkleur vanbody
ingesteld op lichtgroen.
OF Voorwaarde (,
)
1@media (max-width: 400px), (orientation: landscape) {
2 body {
3 color: gray;
4 }
5}
- De OF-voorwaarde past stijlen toe wanneer aan een van de voorwaarden wordt voldaan.
- In dit voorbeeld, wanneer de schermbreedte
400px
of kleiner is, of in landschaporiëntatie, wordt de tekstkleur vanbody
ingesteld op grijs.
NIET Voorwaarde (not
)
1@media not all and (min-width: 600px) {
2 body {
3 font-size: 14px;
4 }
5}
- De NIET-voorwaarde past stijlen toe wanneer niet aan de voorwaarde wordt voldaan.
- In dit voorbeeld, voor alle apparaten, wanneer de schermbreedte niet
600px
of groter is, wordt de lettergrootte vanbody
ingesteld op14px
.
@font-face
1@font-face {
2 font-family: 'CustomFont';
3 src: url('customfont.woff2') format('woff2'),
4 url('customfont.woff') format('woff');
5}
@font-face
wordt gebruikt om webfonts te definiëren. Met deze regel kunnen externe lettertypen worden gedownload en toegepast op een webpagina.
- Aangepaste lettertypen kunnen worden gebruikt in plaats van standaardlettertypen.
- Let op de bestandsgrootte van de lettertypen.
@keyframes
1@keyframes slidein {
2 from {
3 transform: translateX(100%);
4 }
5 to {
6 transform: translateX(0%);
7 }
8}
9
10div {
11 animation: slidein 2s ease-in-out;
12}
@keyframes
wordt gebruikt om CSS-animaties te maken. Stijlen kunnen worden gespecificeerd bij elke stap van een animatie.
- Het biedt gedetailleerde controle over animaties.
- Het wordt gebruikt in combinatie met de eigenschap
animation
.
@supports
1@supports (display: grid) {
2 .container {
3 display: grid;
4 }
5}
@supports
controleert of bepaalde CSS-functies door de browser worden ondersteund en past stijlen toe op basis van het resultaat.
- Het helpt compatibiliteit tussen oudere en nieuwere browsers te behouden.
- Fallbacks kunnen worden toegepast via functieherkenning.
@page
1@page {
2 size: A4;
3 margin: 2cm;
4}
@page
wordt gebruikt om stijlen voor afdrukken te bepalen. Het is handig voor het instellen van paginaformaten en marges.
Belangrijke punten:
- Het wordt gebruikt om stijlen in te stellen voor afdrukmedia.
- U kunt ook de stijlen aanpassen van specifieke paginacomponenten zoals kopteksten en voetteksten.
@charset
1@charset "UTF-8";
@charset
specificeert de tekencodering van een CSS-bestand. Meestal wordt UTF-8 gespecificeerd.
- Het moet aan het begin van het stijlblad worden vermeld.
- Het wordt vooral gebruikt voor meertalige websites.
@layer
@layer
is een nieuwe @
-regel die wordt gebruikt om de prioriteit van stijlen in CSS te organiseren, waarmee meerdere CSS-regels kunnen worden gegroepeerd en beheerd per laag. Deze regel is vooral handig in grote stijlenbladen of projecten met meerdere externe stijlenbladen om CSS-conflicten eenvoudiger te voorkomen.
In CSS-stijlenbladen wordt de prioriteit meestal bepaald door de 'cascade', maar met @layer
kun je de prioriteit van stijlen flexibeler en explicieter beheren.
Basis Syntax
1@layer <layer-name> {
2 /* Styles within this layer */
3}
- Bij het definiëren van stijlen met
@layer
zou de syntax er ongeveer zo uitzien.
1@layer reset {
2 h1 {
3 margin: 0;
4 }
5}
6@layer base {
7 h1 {
8 font-size: 24px;
9 color: blue;
10 }
11}
12@layer theme {
13 h1 {
14 color: red;
15 }
16}
- Je kunt bijvoorbeeld stijlen in verschillende lagen definiëren zoals dit:
- In dit geval worden respectievelijk de
reset
-laag,base
-laag entheme
-laag gedefinieerd, en de uiteindelijkeh1
-stijl wordt bepaald door de inhoud van detheme
-laag, wat resulteert incolor: red;
die wordt toegepast.
Prioriteit van meerdere lagen
De krachtige functie van @layer
is dat het mogelijk maakt om de prioriteit van stijlen tussen lagen te beheren. In het bovenstaande voorbeeld overschrijft de theme
-laag, omdat deze als laatste is gedefinieerd, stijlen die in andere lagen zijn gedefinieerd.
Bovendien kan @layer
worden gebruikt om de prioriteitscascade te beheren in externe stijlenbladen of CSS-bestanden die uit andere bibliotheken worden geladen.
Globale prioriteit
1@layer theme, base, reset;
2
3@layer reset {
4 h1 {
5 margin: 0;
6 }
7}
8@layer base {
9 h1 {
10 font-size: 24px;
11 color: blue;
12 }
13}
14@layer theme {
15 h1 {
16 color: red;
17 }
18}
- De volgorde van lagen krijgt prioriteit binnen de CSS-cascade, waarbij stijlen die later worden gedefinieerd voorrang krijgen. Je kunt bijvoorbeeld expliciet de volgorde van lagen specificeren door ze op deze manier te schrijven.
- Dit zorgt ervoor dat stijlen worden toegepast in de volgorde van
thema
,basis
enreset
, zelfs als dethema
-laag als eerste werd gedefinieerd.
Het gebruik van @import
met @layer
1@import url('css/reset.css') layer(reset);
2@import url('css/base.css') layer(base);
3@import url('css/theme.css') layer(theme);
- Door
@import
en@layer
te combineren, is het ook mogelijk om lagen in externe stylesheets te beheren. - Dit maakt het mogelijk om externe stylesheets in verschillende lagen te plaatsen en hun prioriteit te beheren.
Belangrijke punten van @layer
@layer
is een krachtig hulpmiddel in CSS-stijlbeheer en biedt een handige methode om stijlconflicten in grote projecten te voorkomen. Het is met name opmerkelijk voor het beknopt beheren van stijlprioriteit bij het omgaan met meerdere stijlbronnen. Het is goed om de volgende punten in gedachten te houden.
- Door stijlen per laag te scheiden, kun je de cascade-prioriteit beheren.
- Door het samen met
@import
te gebruiken, kun je externe CSS-bestanden opnemen in het laagbeheer. - Het definiëren van meerdere lagen kan stijlconflicten voorkomen.
Dit minimaliseert stijlconflicten en maakt efficiënt ontwerp mogelijk, zelfs in projecten die complex stijlbeheer vereisen.
Voorbeelden van het gebruik van @layer
Bij het gebruik van @layer
kun je punten overwegen zoals naamgevingsconventies voor lagen, de importvolgorde en het aantal lagen dat passend is bij de schaal van het project.
Naamgeving van lagen
Lagnaamgeving wordt bepaald op basis van de structuur en het doel van het project. Veelvoorkomende voorbeelden van lagenaamgeving zijn onder andere:.
1@layer base, layout, components, utilities;
base
: Een laag die basisstijlen zoals resets en typografie definieert.layout
: Een laag die de stijlen voor paginalay-outs en gridsystemen definieert.components
: Een laag die de stijlen definieert voor herbruikbare UI-componenten zoals knoppen en kaarten.utilities
: Een laag die stijlen definieert voor hulpprogrammaklassen (bijv.margin
,padding
,text-center
).
Duidelijke importvolgorde
1@import url('base.css') layer(base);
2@import url('layout.css') layer(layout);
3@import url('components.css') layer(components);
4@import url('utilities.css') layer(utilities);
- Bij het werken met meerdere CSS-bestanden is het belangrijk om een duidelijke volgorde te bepalen met
@import
. Deze volgorde zorgt ervoor dat de beoogde prioriteit behouden blijft.
Consolidatie en vereenvoudiging van lagen
1@layer common {
2 body {
3 margin: 0;
4 padding: 0;
5 box-sizing: border-box;
6 }
7
8 .container {
9 max-width: 1200px;
10 margin: 0 auto;
11 }
12}
- Bij kleinschalige projecten kan het beperken van het aantal lagen de complexiteit verminderen.
Samenvatting
CSS @
-regels zijn krachtige hulpmiddelen die flexibele stijltoepassing en prestatieverbetering in webdesign ondersteunen. @media
, @keyframes
en @supports
maken het gemakkelijk om te stijlen met inachtneming van apparaatverschillen en browsercompatibiliteit. Daarnaast maken @import
en @font-face
efficiënte opname van externe bronnen mogelijk voor een rijkere expressie.
Het begrijpen en correct gebruiken van deze @
-regels maakt effectievere CSS-codering mogelijk.
Je kunt het bovenstaande artikel volgen met Visual Studio Code op ons YouTube-kanaal. Bekijk ook het YouTube-kanaal.