Estilos globales

Cómo aprovechar los estilos globales para que unos componentes puedan crear estilos que no tengan modificadores locales y así ser funcionales en toda la aplicación, un recurso que podemos usar para definir el look and feel global de la aplicación, como pueda ser tipografía y colores principales.

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.

En Svelte, los estilos que definimos dentro de un componente están encapsulados por defecto, lo que significa que cada selector CSS se modifica internamente para evitar conflictos entre componentes que puedan compartir nombres de clases o etiquetas. Esto es muy útil para mantener el aislamiento y la coherencia visual en aplicaciones complejas. Sin embargo, hay situaciones en las que necesitamos aplicar estilos que afecten a toda la aplicación, y para eso existen los estilos globales.

Cuando queremos que un estilo afecte a toda la aplicación, como por ejemplo definir la tipografía base o el color de fondo general, no basta con escribir un selector normal como body dentro del componente, porque ese estilo no tendrá efecto fuera del ámbito del componente. Para lograr que un selector sea global, Svelte nos permite usar el modificador :global(). Por ejemplo, si queremos cambiar la fuente y el tamaño de letra del body, escribiremos:

:global(body) {
  font-family: Arial, sans-serif;
  font-size: 24px;
}

Esto genera CSS sin ningún sufijo ni aislamiento, por lo que el estilo se aplica a toda la aplicación. Es importante tener en cuenta que al usar :global(), el estilo se vuelve verdaderamente global, y cualquier componente que importe ese CSS verá afectado ese estilo. Por eso, debemos usarlo con precaución y preferiblemente limitar los estilos globales a componentes raíz o a aquellos que definan la base visual de la aplicación.

Un ejemplo claro de los riesgos de abusar de los estilos globales es cuando aplicamos un estilo global a un selector común como label. Si escribimos:

:global(label) {
  color: red;
}

entonces todas las etiquetas label en toda la aplicación se mostrarán en rojo, no solo las que estén dentro del componente donde definimos ese estilo. Esto puede generar efectos no deseados y conflictos visuales, por lo que es mejor evitar estilos globales en componentes pequeños o muy específicos.

Otro caso donde el uso de estilos globales es casi obligatorio es con el selector universal *. Por ejemplo, para aplicar un box-sizing: border-box a todos los elementos, que es una práctica recomendada para evitar problemas de tamaño en los componentes, debemos escribir:

:global(*) {
  box-sizing: border-box;
}

Esto asegura que todos los elementos de la aplicación calculen sus dimensiones incluyendo el padding y el borde, evitando que el tamaño total se descontrole cuando añadimos espacios internos.

En resumen, el modificador :global() en Svelte es una herramienta poderosa para definir estilos que deben afectar a toda la aplicación, pero hay que usarlo con cuidado para no perder el aislamiento que nos ofrece el scoped CSS. Lo ideal es reservar los estilos globales para definiciones base como tipografía, colores generales o reglas universales como el box-sizing, y mantener el resto de estilos encapsulados dentro de cada componente para evitar conflictos y mantener un diseño coherente y mantenible.

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