Importar hojas de estilo externas

Cuando todo vaya a ser global, será más eficiente tener una hoja de estilos externa que importemos desde JavaScript. Esta técnica también la podemos usar para importar hojas de estilo procedentes de npm, que se ponen en el bloque script, por raro que parezca.

Este curso ha sido marcado como anticuado y no está siendo revisado de forma activa. Es posible que la información pueda estar desactualizada o que los enlaces se hayan roto.

Cuando trabajamos con Svelte, es habitual querer aplicar estilos globales que afecten a toda nuestra aplicación, como definir la tipografía o el fondo del body. Aunque Svelte nos permite usar el pseudoselector :global para crear estilos que no se limiten a un componente, abusar de esta técnica puede generar una sobrecarga innecesaria. Por eso, cuando necesitamos estilos globales extensos o la raíz de nuestra aplicación debe tener estilos que se apliquen en todo el proyecto, lo más recomendable es separar esos estilos en una hoja CSS externa.

Para ello, podemos crear un archivo, por ejemplo global.css, dentro de una carpeta como assets. En este archivo pondremos los estilos globales que queramos, como:

body {
  font-family: Verdana, sans-serif;
  background-color: #a0d468; /* un verde suave para no molestar la vista */
}

Una vez que tenemos esta hoja de estilos, la pregunta es cómo importarla en nuestro proyecto Svelte. La forma correcta es hacerlo dentro de la etiqueta <script> de nuestro componente raíz o del que corresponda, usando un import como si fuera un módulo JavaScript:

<script>
  import './assets/global.css';
</script>

Aunque a primera vista pueda parecer extraño importar un archivo CSS dentro de un bloque de script, los compiladores y transpiladores modernos entienden esta sintaxis y se encargan de procesar correctamente los estilos, separándolos del código JavaScript y agregándolos a la hoja de estilos final que se inyecta en la página. Así, el CSS global se aplica sin problemas y sin necesidad de usar el pseudoselector :global repetidamente.

Esta técnica no solo sirve para nuestras propias hojas de estilo, sino que también es la forma recomendada para integrar frameworks CSS externos. Por ejemplo, si instalamos con NPM alguna biblioteca como normalize.css, que estandariza estilos básicos para todos los navegadores, podemos importarla directamente en nuestro script:

<script>
  import 'normalize.css/normalize.css';
</script>

De esta manera, los estilos de normalize.css se aplicarán globalmente en nuestra aplicación. Lo mismo ocurre con otros frameworks populares como Bootstrap, Bulma, Materialize o incluso versiones precompiladas de Tailwind. Importarlos así nos asegura que sus estilos estén disponibles sin complicaciones ni configuraciones adicionales.

Además, esta forma de importar no se limita solo a CSS. También podemos importar imágenes como variables para usarlas dentro de nuestros componentes. Por ejemplo, si tenemos una imagen llamada svelte.png en la carpeta assets, podemos hacer:

<script>
  import svelteLogo from './assets/svelte.png';
</script>

<img src="{svelteLogo}" alt="Logo de Svelte" />

Aquí, la variable svelteLogo contendrá la ruta optimizada a la imagen, lo que facilita su uso en etiquetas <img> sin preocuparnos por rutas relativas o configuraciones adicionales. Esto es especialmente útil cuando trabajamos con bundlers que optimizan y gestionan los recursos estáticos.

En resumen, separar los estilos globales en archivos CSS externos e importarlos desde el script es una práctica limpia y eficiente en Svelte. Además, esta técnica nos permite integrar frameworks CSS y manejar imágenes de forma sencilla, manteniendo nuestro código organizado y aprovechando las capacidades modernas de los compiladores y bundlers.

Lista de reproducción
  1. 1
    ¿Qué es Svelte?
    9 minutos
  2. 2
    ¿Cómo crear un proyecto de Svelte?
    7 minutos
  3. 3
    Creando nuestro primer componente
    7 minutos
  4. 4
    Datos dinámicos y props
    7 minutos
  5. 5
    Anidando componentes
    7 minutos
  6. 6
    Capturando eventos
    7 minutos
  7. 7
    Eventos y reactividad
    8 minutos
  8. 8
    Atributos condicionales e IF
    9 minutos
  9. 9
    Bucles
    11 minutos
  10. 10
    Bloques await
    7 minutos
  11. 11
    Bind
    8 minutos
  12. 12
    bind:this
    6 minutos
  13. 13
    ¿Para qué nos sirve un evento personalizado?
    6 minutos
  14. 14
    createEventDispatcher
    6 minutos
  15. 15
    Eventos con detalles
    7 minutos
  16. 16
    Reenviando eventos
    6 minutos
  17. 17
    Ejemplo de eventos (primera parte)
    12 minutos
  18. 18
    Ejemplo de eventos (y segunda parte)
    16 minutos
  19. 19
    Modificadores de eventos
    6 minutos
  20. 20
    Fundamentos del CSS con Svelte
    9 minutos
  21. 21
    Clases condicionales
    7 minutos
  22. 22
    Estilos en línea y variables CSS
    8 minutos
  23. 23
    Estilos globales
    6 minutos
  24. 24
    Importar hojas de estilo externas
    5 minutos
  25. 25
    Reactividad experta con el operador $
    8 minutos
  26. 26
    Slots (parte 1 de 2)
    5 minutos
  27. 27
    Slots (parte 2 de 2)
    7 minutos
  28. 28
    Directivas svelte:window, svelte:head, svelte:body
    4 minutos
  29. 29
    Actualizar de Rollbar a Vite 3
    11 minutos
  30. 30
    Exportar a Web Components
    10 minutos
  31. 31
    Integrar TypeScript, SCSS, PostCSS...
    8 minutos
  32. 32
    Hasta aquí (por ahora)
    3 minutos
  33. 33
    Lo que se viene con Svelte 5
    13 minutos