Reglas CSS `@`
Este artículo explica las reglas @
de CSS.
Puedes aprender sobre el uso y cómo escribir reglas @
como @import
y @media
.
YouTube Video
HTML para vista previa
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>
Reglas CSS @
Las reglas @
de CSS (at-rules) son instrucciones especiales usadas para controlar el comportamiento y las condiciones de aplicación de las hojas de estilo. A diferencia de las propiedades normales de CSS, las reglas @
aplican estilos o importan recursos externos de manera condicional. Las reglas @
representativas incluyen @media
, @import
y @keyframes
, entre otras.
Tipos de Reglas @
Ejemplares
@import
1@import url('styles.css');
@import
se usa para importar otros archivos CSS en la hoja de estilo actual. Esto permite la reutilización sencilla de archivos CSS externos.
Puntos:
@import
debe escribirse al principio de la hoja de estilo.- Debe evitarse en proyectos grandes debido a su impacto en el rendimiento.
@media
1@media screen and (max-width: 600px) {
2 body {
3 background-color: lightblue;
4 }
5}
@media
utiliza consultas de medios para aplicar estilos basados en condiciones específicas (como el ancho de pantalla, resolución, etc.). Se usa frecuentemente en la implementación de diseño adaptable.
Condiciones Comúnmente Utilizadas
Las siguientes son condiciones comunes que se usan frecuentemente en consultas de medios.
Condiciones basadas en el ancho
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}
- Ancho mínimo (
min-width
) aplica estilos cuando el ancho es igual o mayor al valor especificado. - Ancho máximo (
max-width
) aplica estilos cuando el ancho es igual o menor al valor especificado.
Orientación del dispositivo (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}
- La orientación del dispositivo (
orientation
) puede configurarse como vertical (portrait) o horizontal (landscape).
Resolución (resolution
)
1@media (min-resolution: 2dppx) {
2 body {
3 background-image: url('high-res-image.png');
4 }
5}
- Se pueden aplicar estilos basados en la resolución (
resolution
). - En este ejemplo, se especifica una imagen de fondo de alta resolución para pantallas de alta resolución.
Combinando condiciones
Las consultas de medios también pueden combinar múltiples condiciones.
Condición AND (and
)
1@media (min-width: 600px) and (orientation: portrait) {
2 body {
3 background-color: lightgreen;
4 }
5}
- La condición AND aplica estilos cuando se cumplen todas las condiciones.
- En este ejemplo, cuando el ancho de la pantalla es
600px
o mayor y está en orientación vertical, el color de fondo delbody
se establece en verde claro.
Condición OR (,
)
1@media (max-width: 400px), (orientation: landscape) {
2 body {
3 color: gray;
4 }
5}
- La condición OR aplica estilos cuando se cumple cualquier condición.
- En este ejemplo, cuando el ancho de la pantalla es de
400px
o menos, o está en orientación horizontal, el color del texto delbody
se establece en gris.
Condición NOT (not
)
1@media not all and (min-width: 600px) {
2 body {
3 font-size: 14px;
4 }
5}
- La condición NOT aplica estilos cuando no se cumple la condición.
- En este ejemplo, para todos los dispositivos, cuando el ancho de la pantalla no es
600px
o mayor, el tamaño de fuente delbody
se establece en14px
.
@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
se usa para definir fuentes web. Con esta regla, se pueden descargar y aplicar fuentes externas en una página web.
- Se pueden usar fuentes personalizadas en lugar de depender de fuentes estándar.
- Es necesario prestar atención al tamaño del archivo de la fuente.
@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
se usa para crear animaciones en CSS. Los estilos pueden especificarse en cada paso de una animación.
- Permite un control detallado de las animaciones.
- Se utiliza junto con la propiedad
animation
.
@supports
1@supports (display: grid) {
2 .container {
3 display: grid;
4 }
5}
@supports
verifica si ciertas características de CSS son compatibles con el navegador y aplica estilos según el resultado.
- Ayuda a mantener la compatibilidad entre navegadores antiguos y nuevos.
- Se pueden aplicar alternativas mediante la detección de características.
@page
1@page {
2 size: A4;
3 margin: 2cm;
4}
@page
se usa para controlar los estilos de impresión. Es útil para configurar el tamaño de la página y los márgenes.
Puntos:
- Se utiliza para establecer estilos para medios impresos.
- También puedes personalizar los estilos de elementos específicos de la página como encabezados y pies de página.
@charset
1@charset "UTF-8";
@charset
especifica la codificación de caracteres de un archivo CSS. Principalmente se especifica UTF-8.
- Debe especificarse al principio de la hoja de estilos.
- Se utiliza particularmente para sitios web multilingües.
@layer
@layer
es una nueva regla @
utilizada para organizar la precedencia de hojas de estilo en CSS, permitiendo que múltiples reglas CSS sean agrupadas y gestionadas por capas. Esta regla es particularmente útil en hojas de estilo extensas o proyectos que involucran múltiples hojas de estilo externas para facilitar la prevención de conflictos CSS.
En las hojas de estilo CSS, la precedencia generalmente se determina por la 'cascada', pero al usar @layer
, puedes controlar la precedencia de los estilos de manera más flexible y explícita.
Sintaxis Básica
1@layer <layer-name> {
2 /* Styles within this layer */
3}
- Al definir estilos usando
@layer
, la sintaxis sería como esta.
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}
- Por ejemplo, puedes definir estilos en diferentes capas de la siguiente manera:
- En este caso, se definen las capas
reset
,base
ytheme
, respectivamente, y el estilo final deh1
está determinado por el contenido de la capatheme
, lo que da como resultado que se apliquecolor: red;
.
Prioridad de múltiples capas
La poderosa característica de @layer
es que permite gestionar la prioridad de los estilos entre capas. En el ejemplo anterior, debido a que la capa theme
se define al final, sobrescribe los estilos definidos en otras capas.
Además, @layer
se puede usar para gestionar la cascada de prioridad en hojas de estilo externas o archivos CSS cargados desde otras bibliotecas.
Prioridad 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}
- El orden de las capas se prioriza dentro de la cascada de CSS, donde los estilos definidos más tarde tienen precedencia. Por ejemplo, puedes especificar explícitamente el orden de las capas escribiéndolas de esta manera.
- Esto asegura que los estilos se apliquen en el orden de
theme
,base
yreset
, incluso si la capatheme
fue definida primero.
Uso de @import
con @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);
- Combinando
@import
y@layer
, también es posible gestionar las capas en hojas de estilo externas. - Esto permite que las hojas de estilo externas se ubiquen en diferentes capas, gestionando su prioridad.
Puntos clave de @layer
@layer
es una herramienta poderosa para la gestión de estilos CSS, proporcionando un método conveniente para evitar conflictos de estilo en proyectos grandes. Es particularmente notable para gestionar la precedencia de estilos de manera concisa cuando se trabaja con múltiples fuentes de estilos. Sería bueno tener en cuenta los siguientes puntos.
- Al separar los estilos por capas, puedes controlar la precedencia de la cascada.
- Usándolo junto a
@import
, puedes incluir archivos CSS externos en la gestión de capas. - Definir múltiples capas puede prevenir conflictos de estilo.
Esto minimiza las colisiones de estilo y permite un diseño eficiente incluso en proyectos que requieren una gestión de estilos compleja.
Ejemplos de uso de @layer
Cuando uses @layer
, puedes considerar aspectos como las convenciones de nomenclatura de capas, el orden de importación y la cantidad de capas adecuada a la escala del proyecto.
Nomenclatura de Capas
Los nombres de las capas se determinan en función de la estructura y el propósito del proyecto. Ejemplos comunes de nomenclatura de capas incluyen los siguientes:.
1@layer base, layout, components, utilities;
base
: Una capa que define estilos básicos como reinicios y tipografía.layout
: Una capa que define los estilos para el diseño de páginas y sistemas de cuadrícula.components
: Una capa que define los estilos para componentes de UI reutilizables como botones y tarjetas.utilities
: Una capa que define estilos para clases utilitarias (por ejemplo,margin
,padding
,text-center
).
Orden de Importación Claro
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);
- Cuando manejes múltiples archivos CSS, es importante establecer un orden claro usando
@import
. Este orden asegura que se mantenga la prioridad deseada.
Consolidación y Simplificación de Capas
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}
- En proyectos de pequeña escala, limitar el número de capas puede reducir la complejidad.
Resumen
Las reglas @
de CSS son herramientas poderosas que apoyan la aplicación flexible de estilos y mejoran el rendimiento en el diseño web. @media
, @keyframes
y @supports
facilitan el diseño teniendo en cuenta las diferencias entre dispositivos y la compatibilidad con navegadores. Además, @import
y @font-face
permiten la incorporación eficiente de recursos externos para una expresión más enriquecida.
Comprender y utilizar correctamente estas reglas @
permite una programación CSS más efectiva.
Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.