כללי CSS `@`
מאמר זה מסביר את כללי CSS @
.
תוכלו ללמוד על השימוש וכיצד לכתוב כללי @
כגון @import
ו-@media
.
YouTube Video
HTML לתצוגה מקדימה
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 @
כללי CSS @
(כללי at) הם הוראות מיוחדות המשמשות לשליטה בהתנהגות ובתנאי היישום של גיליונות סגנון. בניגוד לתכונות CSS רגילות, כללי @
מיישמים סגנונות או מייבאים משאבים חיצוניים בתנאים. כללי @
מייצגים כוללים את @media
, @import
ו-@keyframes
, בין היתר.
סוגים של כללי @
לדוגמה
@import
1@import url('styles.css');
@import
משמש לייבוא קבצי CSS אחרים לתוך גיליון הסגנון הנוכחי. זה מאפשר שימוש חוזר בקלות בקבצי CSS חיצוניים.
נקודות:
@import
חייב להיכתב בתחילת גיליון הסגנון.- יש להימנע ממנו בפרויקטים גדולים עקב השפעתו על הביצועים.
@media
1@media screen and (max-width: 600px) {
2 body {
3 background-color: lightblue;
4 }
5}
@media
משתמש בשאילתות מדיה ליישום סגנונות על סמך תנאים מסוימים (כגון רוחב מסך, רזולוציה וכו'). נעשה בו שימוש תכוף ביישום עיצוב רספונסיבי.
תנאים נפוצים בשימוש
התנאים הבאים הם תנאים נפוצים שמשתמשים בהם לעיתים קרובות ב-Media Queries.
תנאים מבוססי רוחב
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}
- רוחב מינימלי (
min-width
) מיישם סגנונות כאשר הרוחב שווה או גדול מהערך שצוין. - רוחב מקסימלי (
max-width
) מיישם סגנונות כאשר הרוחב שווה או קטן מהערך שצוין.
כיוון מכשיר (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}
- כיוון מכשיר (
orientation
) יכול להיות מוגדר כ-אנכי (portrait) או אופקי (landscape).
רזולוציה (resolution
)
1@media (min-resolution: 2dppx) {
2 body {
3 background-image: url('high-res-image.png');
4 }
5}
- ניתן ליישם סגנונות על בסיס רזולוציה (
resolution
). - בדוגמה זו, תמונת רקע ברזולוציה גבוהה מוגדרת עבור מסכים בעלי רזולוציה גבוהה.
שילוב תנאים
Media Queries יכולים לשלב גם מספר תנאים.
תנאי AND (and
)
1@media (min-width: 600px) and (orientation: portrait) {
2 body {
3 background-color: lightgreen;
4 }
5}
- תנאי AND מיישם סגנונות כאשר כל התנאים מתקיימים.
- בדוגמה זו, כאשר רוחב המסך הוא
600px
או יותר ובכיוון אנכי, צבע הרקע של ה-body
מוגדר לירוק בהיר.
תנאי OR (,
)
1@media (max-width: 400px), (orientation: landscape) {
2 body {
3 color: gray;
4 }
5}
- תנאי OR מיישם סגנונות כאשר כל אחד מהתנאים מתקיים.
- בדוגמה זו, כאשר רוחב המסך הוא
400px
או פחות, או בכיוון אופקי, צבע הטקסט של ה-body
מוגדר לאפור.
תנאי NOT (not
)
1@media not all and (min-width: 600px) {
2 body {
3 font-size: 14px;
4 }
5}
- תנאי NOT מיישם סגנונות כאשר התנאי לא מתקיים.
- בדוגמה זו, עבור כל המכשירים, כאשר רוחב המסך אינו
600px
או יותר, גודל הפונט של ה-body
מוגדר כ-14px
.
@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
משמש להגדרת פונטים לאינטרנט. עם כלל זה, ניתן להוריד ולהחיל פונטים חיצוניים על דף אינטרנט.
- ניתן להשתמש בפונטים מותאמים אישית במקום להסתמך על פונטים סטנדרטיים.
- יש לשים לב לגודל קובץ הפונט.
@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
משמש ליצירת אנימציות ב-CSS. ניתן להגדיר סגנונות בכל שלב של האנימציה.
- הוא מאפשר שליטה מפורטת באנימציות.
- זה משמש יחד עם התכונה
animation
.
@supports
1@supports (display: grid) {
2 .container {
3 display: grid;
4 }
5}
@supports
בודק אם דפדפן תומך בתכונות CSS מסוימות ומיישם סגנונות בהתאם לתוצאה.
- זה מסייע לשמור על תאימות בין דפדפנים ישנים וחדשים.
- ניתן ליישם חלופות באמצעות איתור תכונות.
@page
1@page {
2 size: A4;
3 margin: 2cm;
4}
@page
משמש לשליטה בסגנונות להדפסה. זה שימושי להגדרת גודל עמוד ושוליים.
נקודות:
- זה משמש להגדרת סגנונות עבור מדיה להדפסה.
- תוכל גם להתאים אישית את סגנונות הרכיבים הספציפיים של הדף, כגון כותרות עליונות ותחתונות.
@charset
1@charset "UTF-8";
@charset
קובע את קידוד התווים של קובץ CSS. בדרך כלל מיועד לקידוד UTF-8.
- יש להגדיר זאת בתחילת גיליון הסגנון.
- משמש במיוחד לאתרים רב-לשוניים.
@layer
@layer
הוא חוק חדש ב-CSS שמאפשר לארגן את הקדימויות בין גיליונות סגנון ולנהל חוקים שונים לפי שכבות. חוק זה שימושי במיוחד בגיליונות סגנון גדולים או בפרויקטים הכוללים גיליונות סגנון חיצוניים מרובים כדי להקל על הימנעות מקונפליקטים ב-CSS.
בגיליונות סגנון ב-CSS קדימויות בדרך כלל נקבעות לפי 'cascade', אבל עם @layer
, ניתן לשלוט בקדימויות בצורה גמישה ומפורשת יותר.
תחביר בסיסי
1@layer <layer-name> {
2 /* Styles within this layer */
3}
- בעת הגדרת סגנונות עם
@layer
, התחביר יהיה כזה.
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}
- לדוגמה, ניתן להגדיר סגנונות בשכבות שונות כך:
- במקרה זה, מוגדרות השכבות
reset
,base
ו-theme
בהתאמה, והסגנון הסופי שלh1
נקבע על פי התוכן בשכבתtheme
, ולכן מוחלcolor: red;
.
קדימות של שכבות מרובות
המאפיין החזק של @layer
הוא היכולת לנהל את קדימויות הסגנונות בין שכבות. בדוגמה שלמעלה, מכיוון ש-theme
הוגדרה אחרונה, היא מחליפה סגנונות שהוגדרו בשכבות אחרות.
בנוסף, אפשר להשתמש ב-@layer
לניהול סדר הקדימויות בגיליונות סגנון חיצוניים או בקבצי CSS שמוטענים מספריות אחרות.
קדימות גלובלית
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}
- סדר השכבות הוא בעדיפות בתוך ה-CSS cascade, כאשר סגנונות שמוגדרים מאוחר יותר גוברים. לדוגמה, ניתן להגדיר באופן מפורש את סדר השכבות על ידי כתיבתן כך.
- דבר זה מבטיח שהסגנונות ייושמו בסדר של
theme
,base
ו-reset
, גם אם שכבת ה-theme
הוגדרה תחילה.
שימוש ב-@import
עם @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);
- על ידי שילוב בין
@import
ו-@layer
, ניתן לנהל שכבות בגיליונות עיצוב חיצוניים. - דבר זה מאפשר להציב גיליונות עיצוב חיצוניים בשכבות שונות ולנהל את סדר העדיפויות שלהם.
נקודות מפתח של @layer
@layer
הוא כלי עוצמתי לניהול סגנונות ב-CSS, המציע שיטה נוחה למנוע התנגשויות סגנון בפרויקטים גדולים. הכלי חשוב במיוחד לניהול קדימויות סגנון באופן תמציתי כאשר עובדים עם מקורות סגנון מרובים. כדאי לזכור את הנקודות הבאות.
- על ידי הפרדת סגנונות לפי שכבות, ניתן לשלוט על קדימות היררכיית הסגנונות.
- בשימוש יחד עם
@import
, ניתן לכלול קבצי CSS חיצוניים בניהול השכבות. - הגדרת שכבות מרובות יכולה למנוע התנגשויות סגנון.
דבר זה מפחית התנגשויות סגנון ומאפשר עיצוב יעיל גם בפרויקטים הדורשים ניהול סגנונות מורכב.
דוגמאות לשימוש ב-@layer
כאשר משתמשים ב-@layer
, חשוב לקחת בחשבון נקודות כמו מוסכמות שמות שכבות, סדר ייבוא, ומספר השכבות המתאים להיקף הפרויקט.
מתן שמות לשכבות
שמות השכבות נקבעים בהתאם למבנה ולמטרת הפרויקט. דוגמאות נפוצות למתן שמות לשכבות כוללות את הבאות:.
1@layer base, layout, components, utilities;
base
: שכבה המגדירה סגנונות בסיסיים כמו איפוסים וטיפוגרפיה.layout
: שכבה המגדירה סגנונות עבור עיצוב דפי רשת ומערכות גריד.components
: שכבה המגדירה סגנונות עבור רכיבי ממשק משתמש הניתנים לשימוש חוזר, כגון כפתורים וכרטיסים.utilities
: שכבה המגדירה סגנונות עבור מחלקות שירות (למשל,margin
,padding
,text-center
).
סדר ייבוא ברור
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);
- בעת עבודה עם מספר קבצי CSS, חשוב לקבוע סדר ברור באמצעות
@import
. סדר זה מבטיח שהעדיפות המיועדת תישמר.
איחוד ופישוט שכבות
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}
- בפרויקטים קטנים, הגבלת מספר השכבות יכולה להפחית מורכבות.
סיכום
החוקים של CSS @
הם כלים עוצמתיים התומכים ביישום גמיש של סגנונות ובהגברת הביצועים בעיצוב אתרים. @media
, @keyframes
ו-@supports
מקלים על התאמת סגנונות תוך התחשבות בשוני במכשירים ובתאימות לדפדפנים. בנוסף, @import
ו-@font-face
מאפשרים שילוב יעיל של משאבים חיצוניים להבעת עיצוב עשירה יותר.
הבנה ושימוש נכון בכללי ה-@
הללו מאפשרים קידוד CSS יעיל יותר.
תוכלו לעקוב אחר המאמר שלמעלה באמצעות Visual Studio Code בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.