CSS `@` Regler
Denne artikel forklarer CSS @
regler.
Du kan lære om brugen og hvordan man skriver @
regler som @import
og @media
.
YouTube Video
HTML til forhåndsvisning
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 @
Regler
CSS @
regler (at-regler) er særlige instruktioner, der bruges til at kontrollere adfærden og anvendelsesbetingelserne for stylesheets. I modsætning til normale CSS-egenskaber anvender @
regler betingede styles eller importerer eksterne ressourcer. Repræsentative @
regler inkluderer @media
, @import
og @keyframes
blandt andre.
Typer af Eksemplariske @
Regler
@import
1@import url('styles.css');
@import
bruges til at importere andre CSS-filer ind i det aktuelle stylesheet. Dette gør det nemt at genbruge eksterne CSS-filer.
Punkter:
@import
skal skrives i begyndelsen af stylesheetet.- Det bør undgås i store projekter på grund af dets indvirkning på ydeevnen.
@media
1@media screen and (max-width: 600px) {
2 body {
3 background-color: lightblue;
4 }
5}
@media
bruger medieforespørgsler til at anvende styles baseret på specifikke betingelser (som skærmbredde, opløsning osv.). Det bruges ofte til implementering af responsivt design.
Ofte anvendte betingelser
Følgende er almindelige betingelser, der ofte bruges i medieforespørgsler.
Betingelser Baseret på Bredde
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}
- Minimumsbredde (
min-width
) anvender stilarter, når bredden er lig med eller større end den angivne værdi. - Maksimumsbredde (
max-width
) anvender stilarter, når bredden er lig med eller mindre end den angivne værdi.
Enhedens Orientering (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}
- Enhedens orientering (
orientation
) kan indstilles til portræt eller landskab.
Opløsning (resolution
)
1@media (min-resolution: 2dppx) {
2 body {
3 background-image: url('high-res-image.png');
4 }
5}
- Stilarter kan anvendes baseret på opløsning (
resolution
). - I dette eksempel specificeres et baggrundsbillede i høj opløsning til skærme med høj opløsning.
Kombinere Betingelser
Medieforespørgsler kan også kombinere flere betingelser.
OG-Betingelse (and
)
1@media (min-width: 600px) and (orientation: portrait) {
2 body {
3 background-color: lightgreen;
4 }
5}
- OG-betingelsen anvender stilarter, når alle betingelser er opfyldt.
- I dette eksempel, når skærmbredden er
600px
eller større og i portrætorientering, fastsættesbody
baggrundsfarven til lysegrøn.
ELLER-Betingelse (,
)
1@media (max-width: 400px), (orientation: landscape) {
2 body {
3 color: gray;
4 }
5}
- ELLER-betingelsen anvender stilarter, når en hvilken som helst betingelse er opfyldt.
- I dette eksempel, når skærmbredden er
400px
eller mindre, eller i landskabsorientering, fastsættesbody
tekstfarven til grå.
IKKE-Betingelse (not
)
1@media not all and (min-width: 600px) {
2 body {
3 font-size: 14px;
4 }
5}
- IKKE-betingelsen anvender stilarter, når betingelsen ikke er opfyldt.
- I dette eksempel, for alle enheder, når skærmbredden ikke er
600px
eller større, fastsættesbody
skrifttypestørrelsen til14px
.
@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
bruges til at definere webfonte. Med denne regel kan eksterne fonte downloades og anvendes på en webside.
- Tilpassede fonte kan bruges i stedet for at stole på standardfonte.
- Opmærksomhed på fontfilsstørrelse er nødvendig.
@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
bruges til at skabe CSS-animationer. Styles kan specificeres i hvert trin af en animation.
- Det giver detaljeret kontrol over animationer.
- Det bruges i forbindelse med
animation
-egenskaben.
@supports
1@supports (display: grid) {
2 .container {
3 display: grid;
4 }
5}
@supports
kontrollerer, om visse CSS-funktioner understøttes af browseren, og anvender typografi baseret på resultatet.
- Det hjælper med at opretholde kompatibilitet mellem ældre og nyere browsere.
- Fallbacks kan anvendes ved hjælp af funktionsdetektering.
@page
1@page {
2 size: A4;
3 margin: 2cm;
4}
@page
bruges til at kontrollere typografien til udskrift. Det er nyttigt til at angive sidestørrelse og marginer.
Punkter:
- Det bruges til at angive stilarter til printmedier.
- Du kan også tilpasse stilarterne for specifikke sideelementer såsom overskrifter og sidefødder.
@charset
1@charset "UTF-8";
@charset
angiver tegnkodningen for en CSS-fil. UTF-8 angives for det meste.
- Det skal angives i begyndelsen af stylesheetet.
- Det bruges især til flersprogede websites.
@layer
@layer
er en ny @
-regel, der bruges til at organisere prioritetsrækkefølgen af stylesheets i CSS, hvilket gør det muligt at gruppere og håndtere flere CSS-regler i lag. Denne regel er særligt nyttig i store stylesheets eller projekter med flere eksterne stylesheets for at gøre det nemmere at undgå CSS-konflikter.
I CSS-stylesheets bestemmes prioritetsrækkefølgen normalt af 'cascaden', men ved brug af @layer
kan du styre stilprioriteter mere fleksibelt og eksplicit.
Grundlæggende syntaks
1@layer <layer-name> {
2 /* Styles within this layer */
3}
- Når du definerer stilarter ved hjælp af
@layer
, vil syntaksen se sådan ud.
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}
- For eksempel kan du definere stilarter i forskellige lag som dette:
- I dette tilfælde er
reset
-laget,base
-laget ogtheme
-laget defineret henholdsvis, og den endeligeh1
-stil bestemmes af indholdet itheme
-laget, hvilket resulterer i, atcolor: red;
anvendes.
Prioritet af flere lag
Den kraftfulde funktion ved @layer
er, at den gør det muligt at styre stilets prioritet mellem lag. I eksemplet ovenfor overskriver theme
-laget, da det er defineret sidst, stilarter, der er defineret i andre lag.
Desuden kan @layer
bruges til at håndtere prioritetskaskaden i eksterne stylesheets eller CSS-filer, der er indlæst fra andre biblioteker.
Global prioritet
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}
- Rækkefølgen af lag prioriteres inden for CSS-cascaden, hvor stilarter, der er defineret senere, har forrang. For eksempel kan du eksplicit angive rækkefølgen af lag ved at skrive dem sådan.
- Dette sikrer, at stilarter anvendes i rækkefølgen
theme
,base
ogreset
, selv hvistheme
-laget blev defineret først.
Brug af @import
med @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);
- Ved at kombinere
@import
og@layer
er det også muligt at administrere lag i eksterne stylesheets. - Dette gør det muligt at placere eksterne stylesheets i forskellige lag og administrere deres prioritet.
Vigtige punkter ved @layer
@layer
er et stærkt værktøj i CSS-stylingsadministration og tilbyder en praktisk metode til at undgå konflikter i store projekter. Det er særligt bemærkelsesværdigt til kortfattet styring af stylingrækkefølge ved flere kildestyles. Det vil være godt at huske følgende punkter.
- Ved at adskille styles i lag kan du kontrollere lagens cascade-prioritet.
- Ved at bruge det sammen med
@import
kan du inkludere eksterne CSS-filer i lagstyring. - Ved at definere flere lag kan stilkonflikter undgås.
Dette minimerer kolliderende stilarter og muliggør effektivt design, selv for projekter med kompleks stylingsstyring.
Eksempler på brug af @layer
Når du bruger @layer
, kan du overveje punkter som navngivningskonventioner for lag, importrækkefølge og antallet af lag, der passer til projektets omfang.
Navngivning af lag
Lagnavne bestemmes ud fra projektets struktur og formål. Almindelige eksempler på navngivning af lag inkluderer følgende:.
1@layer base, layout, components, utilities;
base
: Et lag, der definerer grundlæggende stilarter som resets og typografi.layout
: Et lag, der definerer stilarterne for sidelayout og gitterstrukturer.components
: Et lag, der definerer stilarterne for genanvendelige UI-komponenter som knapper og kort.utilities
: Et lag, der definerer stilarter til hjælpeklasser (f.eks.margin
,padding
,text-center
).
Klar importrækkefølge
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);
- Når du arbejder med flere CSS-filer, er det vigtigt at angive en klar rækkefølge ved at bruge
@import
. Denne rækkefølge sikrer, at den tilsigtede prioritet opretholdes.
Sammenlægning og forenkling af lag
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}
- I mindre projekter kan det at begrænse antallet af lag reducere kompleksiteten.
Sammendrag
CSS @
-regler er stærke værktøjer, der understøtter fleksibel styling og forbedret ydeevne i webdesign. @media
, @keyframes
og @supports
gør det nemt at style med hensyn til enhedsforskelle og browserkompatibilitet. Desuden muliggør @import
og @font-face
effektiv integration af eksterne ressourcer for en rigere oplevelse.
Forståelse af og korrekt brug af disse @
-regler muliggør mere effektiv CSS-kodning.
Du kan følge med i ovenstående artikel ved hjælp af Visual Studio Code på vores YouTube-kanal. Husk også at tjekke YouTube-kanalen.