Estilos y CSS
Astro fue diseñado para que estilar y escribir CSS sea pan comido. Escribe tu propio CSS directamente dentro de un componente de Astro o importa tu biblioteca de CSS favorita como Tailwind. También es compatible con lenguajes de estilo avanzados como Sass y Less.
Estilando en Astro
Sección titulada Estilando en AstroEstilar un componente de Astro es tan fácil como agregar una etiqueta <style>
a tu componente o plantilla de página. Cuando colocas una etiqueta <style>
dentro de un componente de Astro, Astro detectará el CSS e incluirá tus estilos automáticamente.
Estilos locales
Sección titulada Estilos localesLas reglas de CSS en Astro <style>
tienen un alcance local de forma predeterminada. Los estilos con alcance local se compilan para que sólo se apliquen al HTML escrito dentro de ese mismo componente. El CSS escrito dentro de un componente de Astro se encapsula automáticamente dentro del mismo.
Este CSS:
Se compila en esto:
Los estilos locales no se filtran y no afectarán al resto de tu sitio web. En Astro, está bien usar selectores de baja especificidad como h1 {}
o p {}
porque se compilarán con alcance local en el resultado final.
Los estilos locales tampoco se aplicarán a otros componentes de Astro contenidos dentro del maquetado. Si necesitas estilar un componente hijo, considera envolver ese componente en un <div>
(u otro elemento) que luego puedas estilar.
La especificidad de los estilos locales se conserva, lo que les permite convivir junto con otros archivos o librerías de CSS y, al mismo tiempo, conservar el encapsulamiento que impide que los estilos se filtren fuera del componente.
Estilos globales
Sección titulada Estilos globalesSi bien recomendamos estilos locales para la mayoría de los componentes, eventualmente puedes encontrar una razón válida para escribir CSS global. Puedes desactivar el CSS con alcance local predeterminado con el atributo <style is:global>
.
También puedes mezclar reglas de CSS globales y locales en la misma etiqueta <style>
usando el selector :global()
. Esto se convierte en un patrón poderoso para aplicar estilos CSS a los elementos hijos de tu componente.
Esta es una excelente manera de estilar cosas como artículos de blog o documentos con contenido basado en CMS donde el contenido vive fuera de Astro. Pero ten cuidado: los problemas relacionados a componentes cuyo estilo depende del componente padre pueden volverse difíciles de solucionar.
Los estilos locales deben usarse con la mayor frecuencia posible. Los estilos globales deben usarse solo cuando sea necesario.
Combinando clases con class:list
Sección titulada Combinando clases con class:listSi necesitas combinar clases sobre un elemento dinámicamente, puedes usar el atributo class:list
en archivos .astro
.
class:list
.
Variables de CSS
Sección titulada Variables de CSS
Agregado en:
astro@0.21.0
La etiqueta <style>
de Astro puede hacer referencia a cualquier variable CSS disponible en la página. También puedes pasar variables CSS directamente desde el frontmatter de tu componente usando la directiva define:vars
.
define:vars
.
Pasando una class
a un componente hijo
Sección titulada Pasando una class a un componente hijoEn Astro, los atributos HTML tales como class
no se pasan automáticamente a los componentes hijos.
En cambio, debes aceptar una prop class
en el componente hijo y aplicársela al elemento raíz. Al desestructurar las props debes renombrarlo, porque class
es una palabra clave (o reservada) en JavaScript.
Usando la estrategia por defecto de estilo con ámbito, también debes pasar el atributo data-astro-cid-*
. Puedes hacer esto pasando el ...rest
de las props al componente. Si has cambiado scopedStyleStrategy
a 'class'
o 'where'
, la prop ...rest
no es necesaria.
Debido a que el atributo data-astro-cid-*
incluye al hijo en el alcance de su padre, es posible que los estilos se propaguen del padre al hijo. Para evitar que esto tenga efectos secundarios no deseados, asegúrate de usar nombres de clase únicos en el componente hijo.
Estilos en línea
Sección titulada Estilos en líneaPuedes estilar elementos HTML en línea utilizando el atributo style
. Esto puede ser un string CSS o un objeto de propiedades CSS.
Estilos externos
Sección titulada Estilos externosHay dos formas de resolver hojas de estilo globales externas: la primera es usando una importación ESM para archivos ubicados dentro de src/
, y la segunda es usando la URL absoluta para archivos ubicados en la carpeta public/
, o alojados fuera de tu proyecto.
public/
o src/
.
Importando una hoja de estilo local
Sección titulada Importando una hoja de estilo localEs posible que debas actualizar el archivo astro.config
al importar CSS desde paquetes npm. Consulta la sección “importando hojas de estilo desde un paquete npm” a continuación.
Puedes importar hojas de estilo en el script de tu componente de Astro utilizando la sintaxis de importación ESM. Las importaciones de CSS funcionan como cualquier otra importación ESM en un componente de Astro, deben referenciarse usando la ruta relativa al componente y deben estar escritas en la parte superior del script de su componente, con cualquier otra importación.
Usar import
con CSS a través de ESM es compatible con cualquier archivo JavaScript, incluidos los componentes JSX como React y Preact. Esto puede ser útil para escribir estilos granulares por componente para tus componentes de React.
Importando una hoja de estilos desde un paquete npm
Sección titulada Importando una hoja de estilos desde un paquete npmEs posible que también necesites cargar hojas de estilos desde un paquete npm externo. Esto es especialmente común para utilidades como Open Props. Si tu paquete recomienda usar una extensión de archivo (es decir, package-name/styles.css
en lugar de package-name/styles
), esto debería funcionar como cualquier hoja de estilo local:
Si tu paquete no sugiere usar una extensión de archivo (es decir, package-name/styles
), ¡primero deberás actualizar tu configuración de Astro!
Digamos que estás importando un archivo CSS desde package-name
llamado normalize
(con la extensión de archivo omitida). Para asegurarnos de que podamos prerenderizar tu página correctamente, agrega package-name
al array vite.ssr.noExternal
:
Esta es una configuración específica de Vite que no se relaciona con (ni requiere) Astro SSR.
Ahora, puedes importar package-name/normalize
. Esto será incluido y optimizado por Astro como cualquier otra hoja de estilos local.
Carga una hoja de estilos a través de etiquetas de “link”
Sección titulada Carga una hoja de estilos a través de etiquetas de “link”También puedes usar la etiqueta <link>
para cargar una hoja de estilos en la página. Esta deberá ser una ruta URL absoluta a un archivo CSS ubicado en la carpeta /public
, o una URL a un sitio web externo. Los valores href relativos en <link>
no son compatibles.
Debido a que este método utiliza la carpeta public/
, se salta el procesamiento, empaquetado y las optimizaciones de CSS que proporciona Astro. Si necesitas estas transformaciones, utiliza el método anterior importando una hoja de estilo local.
Orden de Cascada
Sección titulada Orden de CascadaEn ocasiones, los componentes de Astro deberán evaluar múltiples fuentes de CSS. Por ejemplo, tu componente podría importar una hoja de estilos CSS, incluir su propia etiqueta <style>
, y ser renderizado dentro de un layout que importa CSS.
Cuando se aplican reglas conflictivas de CSS a un mismo elemento, los navegadores usan primero la especificidad y después el orden de aparición para determinar qué valor mostrar.
Si una regla es más específica que otra, no importa dónde aparezca la regla de CSS, su valor tendrá prioridad:
Si dos reglas tienen la misma especificidad, entonces el orden de aparición es evaluado, y el último valor de la regla tomará prioridad:
Las reglas de CSS de Astro son evaluadas en este orden de aparición:
- etiquetas
<link>
dentro de la etiqueta head (prioridad más baja) - estilos importados
- estilos locales (prioridad más alta)
Estilos locales
Sección titulada Estilos localesUsar estilos locales no incrementa la especificidad de tu CSS, pero siempre vendrán al final en el orden de aparición. Por lo tanto, tomarán prioridad sobre otros estilos de la misma especificidad. Por ejemplo, si importas una hoja de estilos que conflictúe con un estilo local, el valor del estilo local será aplicado:
Si haces el estilo importado más específico, éste tendrá una mayor importancia que el estilo local:
Orden de importación
Sección titulada Orden de importaciónCuando importas múltiples hojas de estilo en un componente de Astro, las reglas de CSS son evaluadas en el orden en que son importadas. Una mayor especificidad siempre determinará qué estilos mostrar, no importa cuándo es evaluado el CSS. Pero, cuando haya estilos conflictivos que tengan la misma especificidad, el último estilo importado gana:
Mientras que las etiquetas <style>
son locales y solo aplican al componente donde se las declara, puede “filtrarse” CSS importado a otros componentes. Al importar un componente se aplica cualquier CSS que este importe, incluso si el componente nunca es usado:
Un patrón común en Astro es importar CSS global dentro de un componente Plantilla. Asegúrate de importar el componente Plantilla antes que otros imports de este modo sus estilos tendrán la importancia más baja.
Etiquetas link
Sección titulada Etiquetas linkLas hojas de estilo cargadas mediante etiquetas link son evaluadas en orden, antes que cualquier otro estilo en un archivo de Astro. Por lo tanto, esos estilos tendrán menor importancia que las hojas de estilo importadas y los estilos locales:
Integraciones CSS
Sección titulada Integraciones CSS¡Astro viene con soporte para agregar bibliotecas, herramientas y frameworks de CSS populares a tu proyecto como Tailwind y más!
Tailwind
Sección titulada TailwindPara usar Tailwind en tu proyecto, instala la integración oficial de Astro Tailwind utilizando el comando astro add
para tu gestor de paquetes:
Preprocesadores CSS
Sección titulada Preprocesadores CSSAstro es compatible con preprocesadores de CSS como Sass, Stylus y Less usando Vite.
Sass y SCSS
Sección titulada Sass y SCSSUsa <style lang="scss">
o <style lang="sass">
en los archivos .astro
.
Stylus
Sección titulada StylusUsa <style lang="styl">
o <style lang="stylus">
en los archivos .astro
.
Usa <style lang="less">
en los archivos .astro
.
LightningCSS
Sección titulada LightningCSSActualiza tu configuración de vite
en astro.config.mjs
:
En componentes de framework
Sección titulada En componentes de framework¡También puedes usar todos los preprocesadoress de CSS anteriores dentro de los frameworks de JS! Asegúrate de seguir los patrones que recomienda cada framework:
- React / Preact:
import Styles from './styles.module.scss';
- Vue:
<style lang="scss">
- Svelte:
<style lang="scss">
PostCSS
Sección titulada PostCSSAstro viene con PostCSS incluido como parte de Vite. Para configurar PostCSS para tu proyecto, crea un archivo postcss.config.cjs
en la raíz del proyecto. Puedes importar complementos usando require()
después de instalarlos (por ejemplo, npm install autoprefixer
).
Frameworks y librerías
Sección titulada Frameworks y librerías📘 React / Preact
Sección titulada 📘 React / PreactLos archivos .jsx
son compatibles con los módulos CSS y CSS globales. Para habilitar el primero, usa la extensión .module.css
(o .module.scss
/.module.sass
si usas Sass).
Vue en Astro es compatible con los mismos métodos que vue-loader
:
📕 Svelte
Sección titulada 📕 SvelteSvelte en Astro también funciona exactamente como se espera: Svelte Styling Docs.
Estilando Markdown
Sección titulada Estilando MarkdownCualquier método de estilo en Astro está disponible para un componente de diseño de Markdown, pero métodos diferentes tendrán efectos de estilo diferentes en tu página.
Puedes aplicar estilos globales a tu contenido de Markdown agregando hojas de estilo importadas a la plantilla que envuelve el contenido de tu página. También es posible estilizar tu Markdown con etiquetas <style is:global>
en el componente de diseño. Ten en cuenta que cualquier estilo agregado está sujeto al orden de cascada de Astro, por lo que debes revisar cuidadosamente tu página renderizada para asegurarte de que los estilos se apliquen como se pretende.
También puedes agregar integraciones de CSS, incluyendo Tailwind. Si usas Tailwind, el plugin de tipografía puede ser útil para estilar Markdown.
Producción
Sección titulada ProducciónControl de paquetes
Sección titulada Control de paquetesCuando Astro genera tu sitio para desplegarlo en producción, minifica y combina tu CSS en fragmentos. Cada página de tu sitio es un fragmento separado, y además, el CSS que se comparte entre varias páginas se separa en fragmentos adicionales para su reutilización.
Sin embargo, cuando varias páginas comparten estilos, algunos fragmentos compartidos pueden volverse muy pequeños. Si se enviaran todos por separado, se generarían muchas solicitudes de hojas de estilo y afectarían el rendimiento del sitio. Por lo tanto, de forma predeterminada, Astro solo vinculará aquellos en tu HTML que tengan un tamaño superior a 4 KB como etiquetas <link rel="stylesheet">
, mientras que incluirá en línea los más pequeños en etiquetas <style type="text/css">
. Este enfoque proporciona un equilibrio entre el número de solicitudes adicionales y el volumen de CSS que se puede almacenar en caché entre las páginas.
Puedes configurar el tamaño en el que las hojas de estilo se vincularán externamente (en bytes) utilizando la opción de compilación assetsInlineLimit
en Vite. Ten en cuenta que esta opción también afecta la inclusión en línea de scripts e imágenes.
Si prefieres que todos los estilos del proyecto sigan siendo externos, puedes configurar la opción de compilación inlineStylesheets
.
También puedes establecer esta opción en 'always'
, lo cual incrustará todas las hojas de estilo.
Avanzado
Sección titulada Avanzado¡Ten cuidado al omitir el empaquetado de CSS incorporado de Astro! Los estilos no se incluirán automáticamente en la compilación final y es tu responsabilidad asegurarte de que el archivo al que se hace referencia sea incluido correctamente en la página final.
Importaciones ?raw
de CSS
Sección titulada Importaciones ?raw de CSSPara casos avanzados, el CSS se puede leer directamente desde el disco sin que Astro lo empaquete ni lo optimice. Esto puede ser útil cuando necesitas un control completo sobre algún fragmento de CSS y necesitas omitir el procesamiento automático de CSS de Astro.
Esto no es recomendable para la mayoría de los usuarios.
Consulta la documentación de Vite para obtener más detalles.
Importaciones ?url
de CSS
Sección titulada Importaciones ?url de CSSPara casos de uso avanzado, puedes importar una URL de referencia directa a un archivo CSS dentro de la carpeta src/
de tu proyecto. Esto puede ser útil cuando necesitas un control completo sobre cómo se carga del CSS en la página. Sin embargo, esto evitará la optimización del CSS con el resto de la página.
Esto no es recomendable para la mayoría de los usuarios. En su lugar, coloque los archivos CSS dentro de public/
para obtener una ruta URL.
Importar un archivo CSS pequeño con ?url
puede devolver el contenido codificado en base64 como una URL de datos en la compilación final. Puedes escribir tu código para que sea compatible con datos codificados (data:text/css;base64,...
) o configurar la opción vite.build.assetsInlineLimit
en 0
para deshabilitar esta característica.
Consulta la documentación de Vite para obtener más detalles.
Learn