Estilos en línea y variables CSS

Con los estilos en línea se puede meter pequeños cambios a estilo usando directamente la etiqueta style. Svelte soporta el atributo style estandar de HTML, pero también alguna sorpresilla más.

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 el desarrollo de aplicaciones con Svelte, manejar los estilos de forma dinámica es fundamental para crear interfaces atractivas y adaptables. Una de las formas más directas de aplicar estilos es mediante el atributo style en HTML, que permite definir estilos en línea para un elemento específico. Por ejemplo, podemos asignar un color directamente con style="color: red". Sin embargo, aunque esta técnica puede ser útil para depurar rápidamente durante el desarrollo, no es recomendable abusar de ella, ya que los estilos en línea tienden a dispersarse por la aplicación, dificultando su mantenimiento y pudiendo generar conflictos debido a su alta prioridad frente a las hojas de estilo externas.

Svelte nos ofrece formas más elegantes y controladas para trabajar con estilos en línea de manera dinámica. En lugar de construir manualmente cadenas de texto para el atributo style, podemos aprovechar la interpolación de cadenas de JavaScript usando las tildes invertidas. Por ejemplo, si tenemos una variable que determina el color, podemos escribir algo así:

<p style={`color: ${color}`}>Texto dinámico</p>

De esta manera, el valor del color se evalúa y actualiza automáticamente cuando la variable cambia, manteniendo el estilo sincronizado con el estado de la aplicación.

Pero Svelte va más allá y nos permite asignar propiedades CSS específicas directamente con un formato muy intuitivo: usando style:nombrePropiedad. Por ejemplo, para asignar el color, podemos escribir:

<p style:color={color}>Texto dinámico</p>

Aquí, Svelte se encarga de transformar esta sintaxis en el atributo style correspondiente, aplicando el valor de la variable color sin necesidad de construir cadenas manualmente. Esto facilita la legibilidad y el mantenimiento del código.

Además, podemos combinar múltiples propiedades CSS usando esta misma técnica. Por ejemplo, si queremos asignar tanto el color del texto como el color de fondo, podemos definir un objeto con los colores de fondo y luego aplicarlos así:

<script>
  let color = 'red';
  let backgrounds = {
    red: '#ffdddd',
    blue: '#ddddff',
    green: '#ddffdd'
  };
</script>

<p style:color={color} style:background-color={backgrounds[color]}>
  Texto con estilos dinámicos
</p>

Svelte concatenará automáticamente estas propiedades en el atributo style, aplicando los estilos correspondientes según el estado actual de las variables.

Para evitar el uso excesivo de estilos en línea y mejorar la mantenibilidad, una solución moderna y muy potente es el uso de variables CSS. Estas variables permiten definir valores que pueden ser reutilizados y modificados desde distintos niveles de la aplicación, incluso desde componentes padres. En Svelte, podemos definir variables CSS dentro de las hojas de estilo y luego asignarles valores dinámicos desde el atributo style del elemento, lo que resulta en una forma limpia y flexible de manejar estilos.

Por ejemplo, en la hoja de estilos podemos definir:

p {
  background-color: var(--bgcolor);
  color: var(--fgcolor);
}

Luego, en el componente Svelte, podemos asignar valores a estas variables CSS usando el atributo style con la sintaxis de variables CSS:

<script>
  let bg = '#ffcc00';
  let fg = '#333333';
</script>

<p style="--bgcolor: {bg}; --fgcolor: {fg};">
  Texto con variables CSS dinámicas
</p>

De esta forma, el color de fondo y el color del texto se controlan mediante variables CSS que reciben valores dinámicos desde el componente, manteniendo el CSS separado y organizado, y facilitando la reutilización y personalización.

Cabe mencionar que, según la documentación de Svelte, debería ser posible declarar variables CSS directamente como atributos que comienzan con dos guiones, sin necesidad de usar el prefijo style. Por ejemplo:

<p --bgcolor={bg} --fgcolor={fg}>
  Texto con variables CSS
</p>

Sin embargo, en la práctica y en la versión actual que hemos probado, esta forma genera errores, por lo que es recomendable seguir usando el atributo style para declarar variables CSS hasta que esta característica esté plenamente soportada.

En definitiva, Svelte nos brinda varias herramientas para manejar estilos dinámicos de forma eficiente. Podemos usar interpolación de cadenas para estilos en línea, la sintaxis style:nombrePropiedad para asignar propiedades CSS específicas sin construir cadenas manualmente, y variables CSS para mantener el código limpio y flexible, facilitando la personalización y el mantenimiento de nuestras aplicaciones.

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