Clases condicionales

Las clases condicionales permiten utilizar en función de una determinada condición una clase u otra, y es un recurso muy práctico, por ejemplo, para señalar clases cuando un estado es inválido o en general para hacer que el aspecto de un componente dependa en sus propiedades.

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, una de las formas más potentes y limpias de manejar estilos es aplicando clases condicionales. Esto nos permite cambiar la apariencia de nuestros componentes dinámicamente, dependiendo de ciertas condiciones o estados que definamos en nuestro código. Por ejemplo, en un formulario, podemos querer resaltar los campos que no cumplen con una validación para mejorar la experiencia del usuario.

Una manera inicial que podríamos pensar para aplicar estas clases es usar una expresión JavaScript dentro del atributo class. Por ejemplo, podríamos escribir algo así para un campo de texto:

<input class={value.length > 0 ? 'valid' : 'invalid'} bind:value={value} />

Aquí, si el valor tiene algún carácter, se aplicaría la clase valid, y si está vacío, la clase invalid. Luego, en nuestro CSS, definimos estilos para estas clases, como un fondo verde para valid y rojo para invalid. Esto funciona, pero puede volverse un poco confuso y menos legible cuando las condiciones se vuelven más complejas o cuando queremos aplicar varias clases condicionales.

Svelte nos ofrece una sintaxis mucho más sencilla y expresiva para este caso: los modificadores de clase condicional. En lugar de escribir toda la expresión ternaria, podemos usar el atributo class:nombreDeLaClase={condición}. Por ejemplo:

<input
  class:valid={value.length > 0}
  class:invalid={value.length === 0}
  bind:value={value}
/>

Con esto, la clase valid se aplicará solo cuando la longitud del valor sea mayor que cero, y la clase invalid solo cuando esté vacía. Esto hace que el código sea más claro y fácil de mantener.

Además, podemos aprovechar que Svelte busca variables con el mismo nombre que la clase para aplicar la condición. Por ejemplo, si definimos en el script:

<script>
  let value = '';
  $: invalid = value.length === 0;
  $: valid = value.length > 0;
</script>

Entonces, en el markup, podemos simplemente poner:

<input
  class:valid={valid}
  class:invalid={invalid}
  bind:value={value}
/>

Esto mejora la legibilidad y separa la lógica de la presentación.

Un detalle importante que encontramos es que, a veces, Svelte no actualiza automáticamente la interpretación de estas variables cuando el valor cambia, especialmente con el bindeo. Para forzar la actualización, podemos usar eventos como on:keyup para ejecutar una función que actualice las variables relacionadas. Por ejemplo:

<script>
  let value = '';
  let valid = false;
  let invalid = true;

  function actualizarEstado() {
    valid = value.length > 0;
    invalid = value.length === 0;
  }
</script>

<input
  bind:value={value}
  class:valid={valid}
  class:invalid={invalid}
  on:keyup={actualizarEstado}
/>

Así, cada vez que el usuario presione una tecla, se recalcularán las variables y se aplicarán las clases correspondientes.

Más adelante, podemos explorar otras técnicas para forzar la actualización de variables en Svelte, pero con estas herramientas ya podemos manejar estilos condicionales de forma sencilla y efectiva, mejorando la interactividad y la experiencia visual 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