Mga Patakaran ng CSS `@`
Ang artikulong ito ay nagpapaliwanag tungkol sa mga panuntunang CSS @
.
Maaari kang matuto tungkol sa paggamit at kung paano isulat ang mga panuntunang @
tulad ng @import
at @media
.
YouTube Video
HTML para sa Preview
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>
Mga Patakaran ng CSS @
Ang mga panuntunang CSS @
(at-rules) ay mga espesyal na utos na ginagamit upang kontrolin ang kilos at kondisyon ng aplikasyon ng mga stylesheet. Hindi tulad ng mga normal na ari-arian ng CSS, ang mga panuntunang @
ay nagpapadala ng mga estilo depende sa kondisyon o nag-aangkat ng mga panlabas na mapagkukunan. Ang mga kinatawang panuntunang @
ay kinabibilangan ng @media
, @import
, at @keyframes
, at iba pa.
Mga Uri ng Halimbawang mga Patakaran ng @
@import
1@import url('styles.css');
Ang @import
ay ginagamit upang mag-angkat ng iba pang mga CSS file papunta sa kasalukuyang stylesheet. Ito ay nagbibigay-daan para sa madaling paggamit muli ng mga panlabas na CSS file.
Mga Punto:
- Ang
@import
ay kailangang nakasulat sa simula ng stylesheet. - Dapat itong iwasan sa malalaking proyekto dahil sa epekto nito sa pagganap.
@media
1@media screen and (max-width: 600px) {
2 body {
3 background-color: lightblue;
4 }
5}
- Ang
@media
ay gumagamit ng media queries upang maglagay ng mga estilo batay sa mga partikular na kondisyon (tulad ng lapad ng screen, resolusyon, at iba pa). Madalas itong ginagamit sa pagpapatupad ng responsive na disenyo.
Kadalasang Ginagamit na mga Kondisyon
Ang sumusunod ay mga karaniwang kundisyon na madalas gamitin sa media queries.
Mga Kundisyon Batay sa Lapad
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}
- Minimum width (
min-width
) nag-aaplay ng estilo kapag ang lapad ay katumbas o mas malaki sa itinakdang halaga. - Maximum width (
max-width
) nag-aaplay ng estilo kapag ang lapad ay katumbas o mas maliit sa itinakdang halaga.
Oryentasyon ng Device (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}
- Oryentasyon ng device (
orientation
) maaaring itakda sa portrait o landscape.
Resulusyon (resolution
)
1@media (min-resolution: 2dppx) {
2 body {
3 background-image: url('high-res-image.png');
4 }
5}
- Ang mga estilo ay maaaring i-apply batay sa resulusyon (
resolution
). - Sa halimbawang ito, isang mataas na resolusyon na background image ang tinukoy para sa mga display na may mataas na resolusyon.
Pagsasama ng Mga Kundisyon
Ang media queries ay maaari ring pagsamahin ang maraming kundisyon.
AND Kundisyon (and
)
1@media (min-width: 600px) and (orientation: portrait) {
2 body {
3 background-color: lightgreen;
4 }
5}
- Ang AND kundisyon ay nag-aaplay ng estilo kapag lahat ng kundisyon ay natugunan.
- Sa halimbawang ito, kapag ang lapad ng screen ay
600px
o mas malaki at nasa portrait na oryentasyon, ang kulay ng background ngbody
ay itinatakda sa light green.
OR Kundisyon (,
)
1@media (max-width: 400px), (orientation: landscape) {
2 body {
3 color: gray;
4 }
5}
- Ang OR kundisyon ay nag-aaplay ng estilo kapag ang kahit alinmang kundisyon ay natugunan.
- Sa halimbawang ito, kapag ang lapad ng screen ay
400px
o mas maliit, o nasa landscape na oryentasyon, ang kulay ng teksto ngbody
ay itinatakda sa gray.
NOT Kundisyon (not
)
1@media not all and (min-width: 600px) {
2 body {
3 font-size: 14px;
4 }
5}
- Ang NOT kundisyon ay nag-aaplay ng estilo kapag ang kundisyon ay hindi natugunan.
- Sa halimbawang ito, para sa lahat ng device, kapag ang lapad ng screen ay hindi
600px
o mas malaki, ang laki ng font ngbody
ay itinatakda sa14px
.
@font-face
1@font-face {
2 font-family: 'CustomFont';
3 src: url('customfont.woff2') format('woff2'),
4 url('customfont.woff') format('woff');
5}
Ang @font-face
ay ginagamit upang magtakda ng mga web font. Sa panuntunang ito, ang mga panlabas na font ay maaaring i-download at ilapat sa isang webpage.
- Ang mga custom na font ay maaaring gamitin bilang alternatibo sa mga karaniwang font.
- Kinakailangan ang atensyon sa laki ng font file.
@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}
Ang @keyframes
ay ginagamit upang gumawa ng mga animasyon sa CSS. Ang mga istilo ay maaaring tukuyin sa bawat hakbang ng isang animasyon.
- Nagbibigay-daan ito para sa detalyadong kontrol ng mga animasyon.
- Ito ay ginagamit kasabay ng ari-arian na
animation
.
@supports
1@supports (display: grid) {
2 .container {
3 display: grid;
4 }
5}
Ang @supports
ay sinusuri kung ang ilang mga tampok ng CSS ay sinusuportahan ng browser at inilalagay ang mga istilo batay sa resulta.
- Nakakatulong ito upang mapanatili ang pagkakatugma sa pagitan ng mga lumang at bagong browser.
- Maaaring ilapat ang mga fallback sa pamamagitan ng pagtukoy ng mga tampok.
@page
1@page {
2 size: A4;
3 margin: 2cm;
4}
Ginagamit ang @page
upang kontrolin ang mga estilo para sa pagpi-print. Kapaki-pakinabang ito para sa pagtatakda ng laki ng pahina at mga margin.
Mga Punto:
- Ginagamit ito para sa pagtatakda ng mga estilo para sa print media.
- Maaari mo ring isaayos ang mga estilo ng mga partikular na elemento ng pahina tulad ng mga header at footer.
@charset
1@charset "UTF-8";
Itinatakda ng @charset
ang encoding ng karakter ng isang file na CSS. Karaniwang tinutukoy ang UTF-8.
- Dapat itong ilagay sa simula ng style sheet.
- Lalo na itong ginagamit para sa mga multilingual na website.
@layer
Ang @layer
ay isang bagong panuntunan sa @
na ginagamit upang isaayos ang priyoridad ng mga stylesheet sa CSS, na nagbibigay-daan sa pagpapangkat at pamamahala ng maraming panuntunan ng CSS sa pamamagitan ng mga layer. Ang panuntunang ito ay lubos na kapaki-pakinabang sa malalaking mga stylesheet o mga proyekto na may kaugnayan sa maraming panlabas na mga stylesheet upang mapadali ang pag-iwas sa mga pag-aaway sa CSS.
Sa mga stylesheet ng CSS, karaniwang itinatakda ang priyoridad ng 'cascade', ngunit sa paggamit ng @layer
, maaari mong kontrolin ang priyoridad ng estilo nang mas nababagay at malinaw.
Pangunahing Syntax
1@layer <layer-name> {
2 /* Styles within this layer */
3}
- Kapag tinutukoy ang mga estilo gamit ang
@layer
, ang syntax ay magiging ganito.
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}
- Halimbawa, maaari mong tukuyin ang mga istilo sa iba't ibang layer tulad nito:
- Sa kasong ito, ang
reset
layer,base
layer, attheme
layer ay tinukoy ayon sa pagkakasunod-sunod, at ang panghuling istilo ngh1
ay itinatakda ng nilalaman ngtheme
layer, na nagreresulta sacolor: red;
na naipapatupad.
Prayoridad ng maraming mga layer
Ang makapangyarihang tampok ng @layer
ay nagbibigay-daan itong pamahalaan ang priyoridad ng mga estilo sa pagitan ng mga layer. Sa halimbawa sa itaas, dahil ang theme
layer ay tinukoy sa huli, ito ay nag-o-overwrite ng mga istilong tinukoy sa iba pang mga layer.
Bukod dito, maaaring gamitin ang @layer
upang pamahalaan ang priority cascade sa mga panlabas na stylesheet o mga file ng CSS na na-load mula sa ibang mga library.
Pandaigdig na prayoridad
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}
- Ang pagkakasunod-sunod ng mga layer ay inuuna sa loob ng CSS cascade, kung saan ang mga istilo na tinukoy sa mas huling bahagi ay may priyoridad. Halimbawa, maaari mong tahasang itakda ang pagkakasunod-sunod ng mga layer sa pamamagitan ng pagsusulat ng ganito.
- Tinitiyak nito na ang mga estilo ay ilalapat sa pagkakasunud-sunod ng
theme
,base
, atreset
, kahit na ang layer natheme
ay unang itinakda.
Paggamit ng @import
kasama ng @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);
- Sa pamamagitan ng pagsasama ng
@import
at@layer
, posible ring pamahalaan ang mga layer sa mga panlabas na stylesheet. - Hinahayaan nitong ang mga panlabas na stylesheet ay mailagay sa iba't ibang mga layer, pamamahalaan ang kanilang priyoridad.
Mga pangunahing puntos ng @layer
Ang @layer
ay isang makapangyarihang kasangkapan sa pamamahala ng istilo ng CSS, na nagbibigay ng maginhawang paraan upang maiwasan ang mga pag-aaway ng estilo sa malalaking proyekto. Lalo itong kapansin-pansin para sa maikling pamamahala ng priyoridad ng istilo kapag may kaugnayan sa maraming pinagmumulan ng istilo. Magandang tandaan ang mga sumusunod na punto.
- Sa pamamagitan ng paghihiwalay ng mga istilo sa pamamagitan ng mga layer, maaari mong kontrolin ang priyoridad ng cascade.
- Sa paggamit nito kasama ang
@import
, maaari mong isama ang mga panlabas na file ng CSS sa pamamahala ng layer. - Ang pagde-define ng maraming layer ay maaaring makaiwas sa mga banggaan ng estilo.
Pinapaliit nito ang mga banggaan ng estilo at nagbibigay-daan sa epektibong disenyo kahit sa mga proyekto na nangangailangan ng masalimuot na pamamahala ng estilo.
Mga halimbawa ng paggamit ng @layer
Kapag gumagamit ng @layer
, maaari mong isaalang-alang ang mga bagay tulad ng mga convention sa pagbibigay ng pangalan sa layer, pagkakasunod-sunod ng import, at ang dami ng mga layer na naaangkop sa saklaw ng proyekto.
Pagpapangalan ng Layer
Ang mga pangalan ng layer ay natutukoy batay sa istruktura at layunin ng proyekto. Ang mga karaniwang halimbawa ng pagpapangalan ng layer ay kasama ang mga sumusunod:.
1@layer base, layout, components, utilities;
base
: Isang layer na tumutukoy sa mga pangunahing estilo tulad ng resets at typography.layout
: Isang layer na tumutukoy sa mga estilo para sa layout ng pahina at mga sistema ng grid.components
: Isang layer na tumutukoy sa mga estilo para sa reusable na mga UI component tulad ng mga button at card.utilities
: Isang layer na tumutukoy sa mga estilo para sa mga utility class (halimbawa:margin
,padding
,text-center
).
Malinaw na Pagkakasunod-sunod ng Import
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);
- Kapag humahawak ng maraming CSS file, mahalagang magtakda ng malinaw na pagkakasunod-sunod gamit ang
@import
. Sinisiguro ng pagkakasunod-sunod na ito na mapanatili ang layuning prayoridad.
Pagsasama-sama at Pagpapasimple ng 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}
- Sa mga proyektong maliit ang saklaw, ang paglilimita ng bilang ng mga layer ay maaaring magpabawas ng pagiging kumplikado.
Buod
Ang mga @
na patakaran sa CSS ay malalakas na kasangkapan na sumusuporta sa mapagkakayang aplikasyon ng estilo at sa pagpapabuti ng performance sa disenyo ng web. Ang @media
, @keyframes
, at @supports
ay nagpapadali sa pag-aangkop ng estilo habang isinasaalang-alang ang pagkakaiba ng mga device at compatibility ng browser. Bukod pa rito, ang @import
at @font-face
ay nagbibigay-daan sa epektibong pag-integrate ng mga panlabas na mapagkukunan para sa mas makulay na pagpapahayag.
Ang pag-unawa at wastong paggamit ng mga @
na patakaran na ito ay nagdudulot ng mas epektibong pagsulat ng CSS.
Maaari mong sundan ang artikulo sa itaas gamit ang Visual Studio Code sa aming YouTube channel. Paki-check din ang aming YouTube channel.