Aturan CSS `@`
Artikel ini menjelaskan aturan CSS @
.
Anda dapat mempelajari cara penggunaan dan penulisan aturan @
seperti @import
dan @media
.
YouTube Video
HTML untuk Pratinjau
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>
Aturan CSS @
Aturan CSS @
(at-rules) adalah instruksi khusus yang digunakan untuk mengontrol perilaku dan kondisi penerapan stylesheet. Tidak seperti properti CSS biasa, aturan @
menerapkan gaya atau mengimpor sumber daya eksternal secara kondisional. Aturan @
yang umum mencakup @media
, @import
, dan @keyframes
, serta lainnya.
Jenis-jenis Contoh Aturan @
@import
1@import url('styles.css');
@import
digunakan untuk mengimpor file CSS lain ke dalam stylesheet saat ini. Ini memungkinkan penggunaan kembali file CSS eksternal dengan mudah.
Poin-poin:
@import
harus ditulis di awal stylesheet.- Ini sebaiknya dihindari pada proyek besar karena dampaknya terhadap kinerja.
@media
1@media screen and (max-width: 600px) {
2 body {
3 background-color: lightblue;
4 }
5}
@media
menggunakan media queries untuk menerapkan gaya berdasarkan kondisi tertentu (seperti lebar layar, resolusi, dll.). Ini sering digunakan dalam penerapan desain responsif.
Kondisi yang Sering Digunakan
Berikut ini adalah kondisi umum yang sering digunakan dalam media queries.
Kondisi Berdasarkan Lebar
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}
- Lebar minimum (
min-width
) menerapkan gaya ketika lebar sama dengan atau lebih besar dari nilai yang ditentukan. - Lebar maksimum (
max-width
) menerapkan gaya ketika lebar sama dengan atau lebih kecil dari nilai yang ditentukan.
Orientasi Perangkat (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}
- Orientasi perangkat (
orientation
) dapat diatur menjadi portrait atau landscape.
Resolusi (resolution
)
1@media (min-resolution: 2dppx) {
2 body {
3 background-image: url('high-res-image.png');
4 }
5}
- Gaya dapat diterapkan berdasarkan resolusi (
resolution
). - Dalam contoh ini, gambar latar belakang beresolusi tinggi ditentukan untuk layar dengan resolusi tinggi.
Menggabungkan Kondisi
Media queries juga dapat menggabungkan beberapa kondisi.
Kondisi AND (and
)
1@media (min-width: 600px) and (orientation: portrait) {
2 body {
3 background-color: lightgreen;
4 }
5}
- Kondisi AND menerapkan gaya ketika semua kondisi terpenuhi.
- Dalam contoh ini, ketika lebar layar adalah
600px
atau lebih besar dan dalam orientasi portrait, warna latar belakangbody
diatur menjadi hijau muda.
Kondisi OR (,
)
1@media (max-width: 400px), (orientation: landscape) {
2 body {
3 color: gray;
4 }
5}
- Kondisi OR menerapkan gaya ketika salah satu kondisi terpenuhi.
- Dalam contoh ini, ketika lebar layar adalah
400px
atau lebih kecil, atau dalam orientasi landscape, warna teksbody
diatur menjadi abu-abu.
Kondisi NOT (not
)
1@media not all and (min-width: 600px) {
2 body {
3 font-size: 14px;
4 }
5}
- Kondisi NOT menerapkan gaya ketika kondisi tidak terpenuhi.
- Dalam contoh ini, untuk semua perangkat, ketika lebar layar bukan
600px
atau lebih besar, ukuran fontbody
diatur menjadi14px
.
@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
digunakan untuk mendefinisikan font web. Dengan aturan ini, font eksternal dapat diunduh dan diterapkan ke halaman web.
- Font khusus dapat digunakan daripada mengandalkan font standar.
- Perhatian terhadap ukuran file font diperlukan.
@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
digunakan untuk membuat animasi CSS. Gaya dapat ditentukan pada setiap langkah animasi.
- Ini memungkinkan kontrol yang mendetail terhadap animasi.
- Ini digunakan bersamaan dengan properti
animation
.
@supports
1@supports (display: grid) {
2 .container {
3 display: grid;
4 }
5}
@supports
memeriksa apakah fitur CSS tertentu didukung oleh browser dan menerapkan gaya berdasarkan hasilnya.
- Ini membantu menjaga kompatibilitas antara browser lama dan baru.
- Fallback dapat diterapkan melalui pendeteksian fitur.
@page
1@page {
2 size: A4;
3 margin: 2cm;
4}
@page
digunakan untuk mengontrol gaya saat mencetak. Ini berguna untuk mengatur ukuran halaman dan margin.
Poin-poin:
- Ini digunakan untuk mengatur gaya media cetak.
- Anda juga dapat menyesuaikan gaya elemen halaman tertentu seperti header dan footer.
@charset
1@charset "UTF-8";
@charset
menentukan pengkodean karakter dari file CSS. UTF-8 terutama ditentukan.
- Itu harus ditentukan di awal lembar gaya.
- Ini khusus digunakan untuk situs web multibahasa.
@layer
@layer
adalah aturan @
baru yang digunakan untuk mengatur prioritas stylesheet dalam CSS, memungkinkan beberapa aturan CSS untuk dikelompokkan dan dikelola berdasarkan lapisan. Aturan ini sangat berguna dalam stylesheet besar atau proyek yang melibatkan beberapa stylesheet eksternal untuk memudahkan menghindari konflik CSS.
Dalam stylesheet CSS, prioritas biasanya ditentukan oleh 'cascade', tetapi dengan menggunakan @layer
, Anda dapat mengontrol prioritas gaya dengan lebih fleksibel dan eksplisit.
Sintaks Dasar
1@layer <layer-name> {
2 /* Styles within this layer */
3}
- Saat mendefinisikan gaya menggunakan
@layer
, sintaksnya akan seperti ini.
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}
- Sebagai contoh, Anda dapat mendefinisikan gaya dalam lapisan yang berbeda seperti ini:
- Dalam hal ini, lapisan
reset
, lapisanbase
, dan lapisantheme
masing-masing didefinisikan, dan gayah1
terakhir ditentukan oleh konten lapisantheme
, menghasilkan penerapancolor: red;
.
Prioritas beberapa lapisan
Fitur kuat dari @layer
adalah memungkinkan pengelolaan prioritas gaya antar lapisan. Dalam contoh di atas, karena lapisan theme
didefinisikan terakhir, lapisan ini menimpa gaya yang didefinisikan di lapisan lainnya.
Selain itu, @layer
dapat digunakan untuk mengelola prioritas cascade dalam stylesheet eksternal atau file CSS yang dimuat dari pustaka lainnya.
Prioritas global
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}
- Urutan lapisan diprioritaskan dalam cascade CSS, dengan gaya yang didefinisikan terakhir memiliki prioritas. Sebagai contoh, Anda dapat secara eksplisit menentukan urutan lapisan dengan menuliskannya seperti ini.
- Ini memastikan bahwa gaya diterapkan dalam urutan
theme
,base
, danreset
, bahkan jika lapisantheme
didefinisikan terlebih dahulu.
Menggunakan @import
dengan @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);
- Dengan menggabungkan
@import
dan@layer
, dimungkinkan juga untuk mengelola lapisan dalam stylesheet eksternal. - Ini memungkinkan stylesheet eksternal ditempatkan di lapisan yang berbeda, mengelola prioritasnya.
Poin-poin kunci dari @layer
@layer
adalah alat yang kuat dalam manajemen gaya CSS, memberikan metode yang nyaman untuk menghindari konflik gaya dalam proyek besar. Ini sangat menonjol untuk mengelola prioritas gaya secara ringkas saat berhadapan dengan beberapa sumber gaya. Ada baiknya untuk mengingat poin-poin berikut.
- Dengan memisahkan gaya berdasarkan lapisan, Anda dapat mengontrol prioritas cascade.
- Dengan menggunakannya bersama
@import
, Anda dapat menyertakan file CSS eksternal dalam manajemen lapisan. - Mendefinisikan beberapa lapisan dapat mencegah konflik gaya.
Ini meminimalkan tabrakan gaya dan memungkinkan desain yang efisien bahkan dalam proyek yang memerlukan manajemen gaya yang kompleks.
Contoh penggunaan @layer
Saat menggunakan @layer
, Anda dapat mempertimbangkan poin-poin seperti konvensi penamaan layer, urutan impor, dan jumlah layer yang sesuai dengan skala proyek.
Penamaan Layer
Nama layer ditentukan berdasarkan struktur dan tujuan proyek. Contoh umum penamaan layer meliputi hal-hal berikut:.
1@layer base, layout, components, utilities;
base
: Layer yang mendefinisikan gaya dasar seperti reset dan tipografi.layout
: Layer yang mendefinisikan gaya untuk tata letak halaman dan sistem grid.components
: Layer yang mendefinisikan gaya untuk komponen UI yang dapat digunakan kembali seperti tombol dan kartu.utilities
: Layer yang mendefinisikan gaya untuk kelas utilitas (misalnya,margin
,padding
,text-center
).
Urutan Impor yang Jelas
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);
- Saat menangani banyak file CSS, penting untuk menetapkan urutan yang jelas menggunakan
@import
. Urutan ini memastikan prioritas yang dimaksud tetap terjaga.
Konsolidasi dan Penyederhanaan Layer
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}
- Dalam proyek berskala kecil, membatasi jumlah layer dapat mengurangi kompleksitas.
Ringkasan
Aturan CSS @
adalah alat yang kuat yang mendukung penerapan gaya yang fleksibel dan peningkatan kinerja dalam desain web. @media
, @keyframes
, dan @supports
mempermudah styling dengan mempertimbangkan perbedaan perangkat dan kompatibilitas browser. Selain itu, @import
dan @font-face
memungkinkan integrasi sumber daya eksternal yang efisien untuk ekspresi yang lebih kaya.
Memahami dan menggunakan aturan @
ini dengan benar memungkinkan penulisan kode CSS yang lebih efektif.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.