Acerca de este problema de CSS
La regla @import te permite incorporar estilos desde otro archivo CSS. Según la especificación CSS, las reglas @import deben preceder a todas las demás at-rules (excepto @charset) y a todas las reglas de estilo. Cuando un navegador encuentra un @import después de otra declaración CSS válida, ignora silenciosamente la importación. Esto significa que los estilos que pretendías cargar simplemente no se aplicarán, lo que puede llevar a diseños rotos o diseños faltantes que son difíciles de depurar.
El validador de W3C detecta este problema de ordenamiento y lo marca porque el @import mal ubicado no tendrá efecto. Aunque los navegadores no mostrarán un error visible, la hoja de estilos importada se descarta completamente, convirtiendo esto en un problema funcional real en lugar de solo una advertencia cosmética de validación.
El orden correcto dentro de un elemento <style> o archivo CSS es:
-
@charset(si es necesario, y solo en archivos CSS externos) -
Reglas
@import -
Todas las demás reglas CSS (
@font-face,@media, reglas de estilo, etc.)
Ejemplos
Incorrecto: @import después de una regla de estilo
<style>
body {
margin: 0;
}
@import url("typography.css");
h1 {
color: navy;
}
</style>
El @import está ubicado después de la regla body, por lo que el navegador lo ignorará completamente. Los estilos de typography.css nunca se cargarán.
Incorrecto: @import después de otra at-rule
<style>
@font-face {
font-family: "MyFont";
src: url("myfont.woff2") format("woff2");
}
@import url("reset.css");
</style>
Aunque @font-face es una at-rule, no es @charset o @import, por lo que colocar @import después de ella es inválido.
Correcto: reglas @import primero
<style>
@import url("reset.css");
@import url("typography.css");
@font-face {
font-family: "MyFont";
src: url("myfont.woff2") format("woff2");
}
body {
margin: 0;
}
h1 {
color: navy;
}
</style>
Todas las reglas @import aparecen antes que cualquier otra declaración, por lo que son válidas y las hojas de estilos importadas se cargarán correctamente.
Correcto: múltiples reglas @import con @charset
En un archivo CSS externo, también puedes tener una declaración @charset. Debe ir primero, seguida de las reglas @import:
@charset "UTF-8";
@import url("base.css");
@import url("components.css");
body {
font-family: sans-serif;
}
Alternativas a @import
Aunque corregir el ordenamiento resuelve el error de validación, vale la pena mencionar que @import en CSS puede causar problemas de rendimiento porque los archivos importados se cargan secuencialmente en lugar de en paralelo. Considera estas alternativas:
-
Múltiples elementos
<link>en tu<head>HTML — estos permiten a los navegadores descargar hojas de estilos en paralelo. -
Herramientas de empaquetado CSS — herramientas de construcción como Webpack, Vite, o PostCSS pueden combinar múltiples archivos CSS en uno al momento de construcción, eliminando la necesidad de
@importen tiempo de ejecución.
Si usas @import, solo asegúrate de que cada instancia aparezca en la parte superior de tu hoja de estilos, antes que cualquier otra regla CSS.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.
Más información: