CSS `@` Kuralları
Bu makale, CSS @
kurallarını açıklamaktadır.
@import
ve @media
gibi @
kurallarının nasıl yazıldığını ve kullanımını öğrenebilirsiniz.
YouTube Video
Önizleme için 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 @
Kuralları
CSS @
kuralları (at-rules), stillerin davranışını ve uygulama koşullarını kontrol etmek için kullanılan özel talimatlardır. Normal CSS özelliklerinden farklı olarak, @
kuralları koşullu olarak stilleri uygular veya harici kaynakları içe aktarır. Temsilci @
kurallarına @media
, @import
ve @keyframes
gibi kurallar dahildir.
Örnek @
Kurallarının Türleri
@import
1@import url('styles.css');
@import
, diğer CSS dosyalarını mevcut stil dosyasına dahil etmek için kullanılır. Bu, harici CSS dosyalarının kolayca yeniden kullanılmasını sağlar.
Dikkat Edilmesi Gereken Noktalar:
@import
, stil dosyasının başında yazılmalıdır.- Performansı etkilediği için büyük projelerde kullanılmaktan kaçınılmalıdır.
@media
1@media screen and (max-width: 600px) {
2 body {
3 background-color: lightblue;
4 }
5}
@media
, belirli koşullara (örneğin: ekran genişliği, çözünürlük vb.) bağlı olarak stilleri uygulamak için medya sorgularını kullanır. Duyarlı tasarımların uygulamasında sıkça kullanılır.
Sık Kullanılan Koşullar
Aşağıdakiler, medya sorgularında sıkça kullanılan yaygın koşullardır.
Genişliğe Dayalı Koşullar
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 genişlik (
min-width
), genişlik belirtilen değere eşit veya daha büyük olduğunda stilleri uygular. - Maksimum genişlik (
max-width
), genişlik belirtilen değere eşit veya daha küçük olduğunda stilleri uygular.
Cihaz Yönlendirmesi (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}
- Cihaz yönlendirmesi (
orientation
), dikey (portrait) veya yatay (landscape) olarak ayarlanabilir.
Çözünürlük (resolution
)
1@media (min-resolution: 2dppx) {
2 body {
3 background-image: url('high-res-image.png');
4 }
5}
- Stiller, çözünürlük (
resolution
) temelinde uygulanabilir. - Bu örnekte, yüksek çözünürlüklü ekranlar için yüksek çözünürlüklü bir arka plan resmi belirtilmiştir.
Koşulları Birleştirme
Medya sorguları ayrıca birden fazla koşulu birleştirebilir.
VE Koşulu (and
)
1@media (min-width: 600px) and (orientation: portrait) {
2 body {
3 background-color: lightgreen;
4 }
5}
- VE koşulu, tüm koşullar karşılandığında stilleri uygular.
- Bu örnekte, ekran genişliği
600px
veya daha büyük olduğunda ve dikey yönlendirmede,body
arka plan rengi açık yeşil olarak ayarlanır.
VEYA Koşulu (,
)
1@media (max-width: 400px), (orientation: landscape) {
2 body {
3 color: gray;
4 }
5}
- VEYA koşulu, herhangi bir koşul karşılandığında stilleri uygular.
- Bu örnekte, ekran genişliği
400px
veya daha küçük olduğunda ya da yatay yönlendirmede,body
metin rengi gri olarak ayarlanır.
Değil Koşulu (not
)
1@media not all and (min-width: 600px) {
2 body {
3 font-size: 14px;
4 }
5}
- DEĞİL koşulu, koşul karşılanmadığında stilleri uygular.
- Bu örnekte, tüm cihazlar için, ekran genişliği
600px
veya daha büyük olmadığında,body
yazı tipi boyutu14px
olarak ayarlanır.
@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
, web yazı tiplerini tanımlamak için kullanılır. Bu kural ile harici yazı tipleri indirilebilir ve bir web sayfasında uygulanabilir.
- Standart yazı tiplerine bağlı kalınmadan özel yazı tipleri kullanılabilir.
- Yazı tipi dosyasının boyutuna dikkat edilmesi gerekir.
@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 animasyonları oluşturmak için kullanılır. Bir animasyonun her adımında stiller belirlenebilir.
- Animasyonlar üzerinde ayrıntılı kontrol sağlar.
animation
özelliği ile birlikte kullanılır.
@supports
1@supports (display: grid) {
2 .container {
3 display: grid;
4 }
5}
@supports
, bazı CSS özelliklerinin tarayıcı tarafından desteklenip desteklenmediğini kontrol eder ve sonuca göre stiller uygular.
- Eski ve yeni tarayıcılar arasında uyumluluğu korumaya yardımcı olur.
- Özellik algılama yoluyla alternatif özellikler uygulanabilir.
@page
1@page {
2 size: A4;
3 margin: 2cm;
4}
@page
, yazdırma için stilleri kontrol etmek için kullanılır. Sayfa boyutunu ve kenar boşluklarını ayarlamak için faydalıdır.
Dikkat Edilmesi Gereken Noktalar:
- Baskı medyası için stiller ayarlamak amacıyla kullanılır.
- Ayrıca başlıklar ve altbilgiler gibi belirli sayfa öğelerinin stillerini özelleştirebilirsiniz.
@charset
1@charset "UTF-8";
@charset
, bir CSS dosyasının karakter kodlamasını belirtir. Genellikle UTF-8 belirtilir.
- Stil sayfasının başında belirtilmelidir.
- Özellikle çok dilli web siteleri için kullanılır.
@layer
@layer
, CSS'de stil sayfalarının önceliğini düzenlemek için kullanılan yeni bir @
kuralıdır ve birden fazla CSS kuralının katmanlar halinde gruplanmasını ve yönetilmesini sağlar. Bu kural, büyük stil sayfalarında veya birden fazla harici stil sayfası içeren projelerde CSS çakışmalarını önlemeyi kolaylaştırmak için özellikle faydalıdır.
CSS stil sayfalarında öncelik genellikle 'cascade' ile belirlenir, ancak @layer
kullanılarak stil önceliği daha esnek ve açık bir şekilde kontrol edilebilir.
Temel Sözdizimi
1@layer <layer-name> {
2 /* Styles within this layer */
3}
@layer
kullanarak stilleri tanımladığınızda, sözdizimi aşağıdaki gibi olur.
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}
- Örneğin, şu şekilde farklı katmanlarda stiller tanımlayabilirsiniz:
- Bu durumda
reset
,base
vetheme
katmanları sırasıyla tanımlanır ve nihaih1
stili,theme
katmanının içeriği tarafından belirlenir, bu nedenlecolor: red;
uygulanır.
Birden fazla katmanın önceliği
@layer
'in güçlü bir özelliği, katmanlar arasındaki stil önceliğini yönetmeyi sağlamasıdır. Yukarıdaki örnekte, theme
katmanı son tanımlandığı için diğer katmanlarda tanımlanan stilleri geçersiz kılar.
Ek olarak, @layer
, harici stil sayfalarındaki veya diğer kütüphanelerden yüklenen CSS dosyalarındaki öncelik sıralamasını yönetmek için kullanılabilir.
Küresel öncelik
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 katmanlarının sırası önceliklidir, sonradan tanımlanan stiller öncelik kazanır. Örneğin, katmanların sırasını aşağıdaki gibi açıkça belirtebilirsiniz.
- Bu, stillerin
theme
,base
vereset
sırasıyla uygulanmasını sağlar, hattatheme
katmanı önce tanımlanmış olsa bile.
@import
ve @layer
kullanımı
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
ile@layer
i birleştirerek dış stil dosyalarındaki katmanları yönetmek de mümkündür.- Bu, dış stil dosyalarının farklı katmanlara yerleştirilerek önceliklerinin yönetilmesini sağlar.
@layer
ile ilgili temel noktalar
@layer
, büyük projelerde stil çakışmalarını önlemek için kullanışlı bir yöntem sunan güçlü bir CSS stil yönetim aracıdır. Birden fazla stil kaynağıyla çalışırken stil önceliğini açık bir şekilde yönetmek için özellikle dikkat çekicidir. Aşağıdaki noktaları akılda tutmak iyi olacaktır.
- Stilleri katmanlara ayırarak kademeli önceliği kontrol edebilirsiniz.
@import
ile birlikte kullanarak dış CSS dosyalarını katman yönetimine dahil edebilirsiniz.- Birden fazla katman tanımlamak, stil çakışmalarını önleyebilir.
Bu, stil çakışmalarını en aza indirir ve karmaşık stil yönetimi gerektiren projelerde bile verimli tasarım yapmayı sağlar.
@layer
kullanımına örnekler
@layer
kullanırken, katman adlandırma kuralları, import sırası ve projenin ölçeğine uygun katman sayısı gibi noktaları dikkate alabilirsiniz.
Katman Adlandırma
Katman isimleri, projenin yapısına ve amacına göre belirlenir. Katman adlandırma için yaygın örnekler şunlardır:.
1@layer base, layout, components, utilities;
base
: Reset ve tipografi gibi temel stilleri tanımlayan bir katman.layout
: Sayfa düzeni ve grid sistemleri için stilleri tanımlayan bir katman.components
: Butonlar ve kartlar gibi yeniden kullanılabilir UI bileşenleri için stilleri tanımlayan bir katman.utilities
: Özel yardımcı sınıflar için (margin
,padding
,text-center
gibi) stilleri tanımlayan bir katman.
Net Import Sırası
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);
- Birden çok CSS dosyası ile çalışırken
@import
kullanarak net bir sıra belirlemek önemlidir. Bu sıra, istenilen önceliğin korunmasını sağlar.
Katmanları Birleştirme ve Basitleştirme
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}
- Küçük ölçekli projelerde, katman sayısını sınırlamak karmaşıklığı azaltabilir.
Özet
CSS @
kuralları, web tasarımında esnek stil uygulanmasını ve performans artışını destekleyen güçlü araçlardır. @media
, @keyframes
ve @supports
, cihaz farklılıkları ve tarayıcı uyumluluğunu göz önünde bulundurarak stil uygulamayı kolaylaştırır. Ayrıca, @import
ve @font-face
, daha zengin ifadeler için dış kaynakların etkili bir şekilde dahil edilmesini sağlar.
Bu @
kurallarını anlayarak ve doğru bir şekilde kullanarak daha etkili CSS kodlaması yapılabilir.
Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.