Manejo de estados de Tailwind CSS

Tailwind CSS ofrece potentes clases de estado (modificadores de estado) para controlar los cambios de estilo de los elementos en diferentes estados de interacción.

Tailwind CSS proporciona una variedad de clases de estado (como `hover:`, `focus:`, `active:`, etc.) para ayudar a los desarrolladores a manejar rápidamente los efectos de interacción. Combinando estas clases de estado, puedes lograr fácilmente cambios de estilo en estados como hover, focus, clic, etc., mejorando la experiencia del usuario.

Prefijos de las clases de estado:

EstadoPrefijoFunción
Estado hoverhover:Controla el cambio de estilo del elemento al pasar el ratón por encima.
Estado focusfocus:Controla el cambio de estilo del elemento cuando obtiene el foco.
Estado activoactive:Controla el cambio de estilo del elemento cuando se hace clic en él.
Estado visitadovisited:Controla los cambios de estilo de los enlaces visitados.
Estado focus-withinfocus-within:Controla el cambio de estilo del elemento padre cuando su hijo obtiene el foco.
Combinación de estadosSin prefijo específico, yhover:, focus:1. Hoveractive:

1. Hover

) se refiere a cuando el usuario coloca el cursor sobre un elemento, el estilo del elemento cambia. Usandohoverel prefijo, puedes lograr fácilmente este efecto.hover:Sintaxis

Por ejemplo,:

hover:{class}

cambiará el color de fondo del elemento al pasar el ratón por encima ahover:bg-sky-700Usos comunessky-700。

Ejemplo:

Ejemplo

<button class="px-4 py-2 bg-blue-500 text-white hover:bg-sky-700">
Pruébalo »
</button>

Cuando el ratón está encima, el color de fondo del botón cambia de

ablue-500Más ejemplossky-700。

: Al pasar el ratón, el color del texto cambia a blanco.:

  • hover:text-white: Al pasar el ratón, se añade subrayado al texto.
  • hover:underline: Al pasar el ratón, se añade un borde de 2px y se establece en gris.
  • hover:border-2 hover:border-gray-5002. Focus

2. Focus

) se refiere a cuando el usuario interactúa con un elemento de formulario (como un campo de entrada), el elemento obtiene el foco. Usandofocusel prefijo, puedes controlar el estilo del elemento cuando está enfocado.focus:Sintaxis

Por ejemplo,:

focus:{class}

mostrará un anillo azul cuando el elemento obtenga el foco.focus:ring-2 focus:ring-blue-600Ejemplo

Ejemplo

<input class="border p-2 focus:outline-none focus:ring-2 focus:ring-blue-600" type="text" placeholder=Pruébalo »>

Cuando el usuario hace clic o selecciona el campo de entrada, este muestra un anillo azul de resaltado.

Más ejemplos

: Al enfocar, el color del texto cambia a negro.:

  • focus:text-black: Al enfocar, el color del borde del campo de entrada cambia a azul.
  • focus:border-blue-500: Al enfocar, se muestra un anillo verde, con resaltado y se establece la opacidad.
  • focus:ring-4 focus:ring-opacity-50 focus:ring-green-5003. Activo (Active)

3. Activo (Active)

) se refiere a cuando el elemento es presionado por el usuario, el estilo del elemento cambia. Usandoactiveel prefijo puede controlar el estilo al hacer clic.active:Sintaxis

Por ejemplo,:

active:{class}

cambiará el color de fondo a verde cuando el elemento se presione.active:bg-green-700Usos comunes

Ejemplo:

Ejemplo

<button class="px-4 py-2 bg-blue-500 text-white active:bg-green-700">
Pruébalo »
</button>

Cuando se presiona el botón, el color de fondo se vuelve verde.

Más ejemplosgreen-700。

: Al hacer clic, el color del texto cambia a gris.:

  • active:text-gray-600: Al hacer clic, se añade un efecto de anillo verde de resaltado al elemento.
  • active:ring-2 active:ring-opacity-50 active:ring-green-5004. Estados combinados

4. Estados combinados

Sintaxis

Por ejemplo,:

{state}:{class}

cambiará el color de fondo en modo oscuro, en el punto de interrupción medio y al pasar el ratón.dark:md:hover:bg-fuchsia-600Ejemplo

Ejemplo

<button class="px-4 py-2 bg-blue-500 text-white hover:bg-sky-700 focus:outline-none dark:hover:bg-fuchsia-600">
Pruébalo »
</button>

En modo normal, el color de fondo del botón cambia al pasar el ratón a

, mientras que en modo oscuro, el color de fondo cambia asky-700Más ejemplosfuchsia-600。

: En dispositivos de pantalla pequeña, cuando el elemento obtiene el foco, se añade un anillo de resaltado de 2px.:

  • sm:focus:ring-2: En dispositivos de pantalla grande, al hacer clic en el botón, el color de fondo cambia a rojo.
  • lg:active:bg-red-5005. Pseudo-clases (Pseudo-classes)

5. Pseudo-clases (Pseudo-classes)

Modificadores de pseudo-clases comunes

: Se aplica al primer elemento hijo.:

  • first-child: Se aplica al último elemento hijo.
  • last-child: Se aplica a los elementos hijos en posición impar.
  • odd-child: Se aplica a los elementos hijos en posición par.
  • even-childEjemplo

Ejemplo

<ul class="space-y-4">
  <li class="first:font-bold last:font-light">Item 1</li>
  <li class="odd:bg-gray-100">Item 2</li>
  <li class="even:bg-gray-200">Item 3</li>
</ul>

El primer elemento de la lista
  • se pondrá en negrita, y el último elemento de la listaItem 1tendrá un tipo de letra más ligero.Item 3Los elementos impares y pares se distinguirán con diferentes colores de fondo.
  • 6. Estados de formulario (Form States)

6. Estados de formulario (Form States)

), inválido (required) y deshabilitado (invalid) estados.disabledClases comunes

: Indica que el campo de entrada es obligatorio.:

  • required: Se utiliza para entradas de formulario inválidas.
  • invalid: Elementos de formulario deshabilitados.
  • disabledEjemplo

Ejemplo

<input class="border p-2 required:border-red-500 invalid:border-yellow-500 disabled:bg-gray-300" type="text" placeholder=Pruébalo »>

Si el campo de entrada es inválido, se mostrará un borde amarillo.
  • Si el campo de entrada está deshabilitado, el color de fondo se volverá gris.
  • 7. Estilos basados en el estado del padre (Group Modifier)

7. Estilos basados en el estado del padre (Group Modifier)

modificador, puedes ajustar el estilo de los elementos hijos cuando el estado del padre cambia.group-hoverygroup-focusSintaxis

Por ejemplo,:

group-{state}:{class}

aplicará el color de fondo gris al elemento hijo cuando el padre esté en hover.group-hover:bg-gray-300Ejemplo

Ejemplo

<div class="group">
  <button class="px-4 py-2 bg-blue-500 text-white group-hover:bg-gray-300">
Pruébalo »
  </button>
</div>

Cuando el contenedor padre está en hover, el color de fondo del botón se vuelve gris.

8. Diseño responsivo y modo oscuro

8. Diseño responsivo y modo oscuro

Sintaxis

Prefijo responsivo::

  • Prefijo de modo oscuro:sm:, md:, lg:, xl:, 2xl:
  • Ejemplodark:

Ejemplo

<button class="px-4 py-2 bg-blue-500 text-white dark:bg-gray-800 sm:hover:bg-blue-700 md:focus:ring-2 md:focus:ring-blue-500">
Pruébalo »
</button>

En pantallas pequeñas, el color de fondo al pasar el ratón se convierte en

, en pantallas medianas, al enfocar se añade un anillo azul de resaltado, y en modo oscuro el color de fondo se vuelve gris.blue-7009. Configuración de variantes (Variants)

9. Configuración de variantes (Variants)

Entailwind.config.jssección, configurar qué variantes de estado se habilitan. De esta manera, puedes habilitar o deshabilitar los cambios de estilo en estados específicos según las necesidades del proyecto.variantsEjemplo

Ejemplo

module.exports = {
  theme: {
    extend: {},
  },
  variants: {
    extend: {
      backgroundColor: ['active', 'group-hover'],
      textColor: ['focus-visible', 'disabled'],
    },
  },
}

se añadebackgroundColorestado, mientras queactiveygroup-hoverse añadetextColorestado.focus-visibleydisabled10. Primero, último, impar y par

10. Primero, último, impar y par

el modificador para establecer el estilo del elemento:firstylastEjemplo

Ejemplo

<ul class="space-y-2">
  <li class="first:text-red-500">First item</li>
  <li>Second item</li>
  <li class="last:font-bold">Last item</li>
</ul>

¡Pruébalo! »

Efecto:

  • El color del texto del primer elemento de la lista se vuelve rojo text-red-500.
  • La fuente del último elemento de la lista se vuelve negrita font-bold.

oddModificador: odd se utiliza para seleccionar todos los elementos secundarios en posiciones impares dentro del contenedor principal (índice basado en 1).

Ejemplo

<ul class="space-y-2">
  <li class="odd:bg-gray-100">Item 1</li>
  <li>Item 2</li>
  <li class="odd:bg-gray-100">Item 3</li>
  <li>Item 4</li>
</ul>

Pruébalo »

Efecto:El color de fondo de los elementos 1 y 3 de la lista se vuelve gris claro bg-gray-100.

evenModificador: even se utiliza para seleccionar todos los elementos secundarios en posiciones pares dentro del contenedor principal (índice basado en 1).

Ejemplo

<ul class="space-y-2">
  <li>Item 1</li>
  <li class="even:bg-gray-200">Item 2</li>
  <li>Item 3</li>
  <li class="even:bg-gray-200">Item 4</li>
</ul>

Pruébalo »

Efecto:El color de fondo de los elementos 2 y 4 de la lista se vuelve un gris más oscuro bg-gray-200.

Referencia de modificadores

Modifier Pseudoclases CSS correspondientes/
Pseudo-elementos o reglas
Descripción Código de ejemplo
hover :hover Se aplica al pasar el cursor <button class="hover:bg-blue-500">Hover me</button>
focus :focus Se aplica cuando el elemento recibe el foco <input class="focus:ring-2 focus:ring-blue-600" />
focus-within :focus-within Se aplica cuando cualquier elemento secundario dentro del contenedor principal recibe el foco <div class="focus-within:border-blue-500"><input /></div>
focus-visible :focus-visible Foco activado por navegación con teclado o tecnología de asistencia <input class="focus-visible:ring-2 focus-visible:ring-blue-600" />
active :active Se aplica cuando el elemento se presiona o está activo <button class="active:bg-green-700">Click me</button>
visited :visited Enlace visitado <a class="visited:text-purple-600" href="../index.html">Visited link</a>
target :target Se aplica cuando se activa el enlace de destino <div id="section" class="target:bg-yellow-500"></div>
first :first-child Primer elemento secundario <ul><li class="first:text-red-500">First</li><li>Other</li></ul>
last :last-child Último elemento secundario <ul><li>Other</li><li class="last:font-bold">Last</li></ul>
odd :nth-child(odd) Elementos secundarios impares (contando desde 1) <ul><li class="odd:bg-gray-100">Odd</li><li>Even</li></ul>
even :nth-child(even) Elementos secundarios pares <ul><li>Odd</li><li class="even:bg-gray-200">Even</li></ul>
empty :empty Elementos con contenido vacío <div class="empty:bg-gray-50"></div>
disabled :disabled Elementos de formulario deshabilitados <button class="disabled:opacity-50" disabled>Disabled</button>
enabled :enabled Elementos de formulario habilitados <input class="enabled:border-blue-500" />
checked :checked Casillas de verificación o botones de opción seleccionados <input type="checkbox" class="checked:bg-blue-500" checked />
required :required El elemento de formulario es obligatorio <input class="required:border-red-500" required />
before ::before Pseudo-elemento insertado antes del elemento <div class="before:content-['*'] before:text-red-500"></div>
after ::after Pseudo-elemento insertado después del elemento <div class="after:content-['!'] after:text-green-500"></div>
sm @media (min-width: 640px) Pantallas pequeñas (desde 640px) <div class="sm:bg-blue-100">Resize to small screen</div>
dark @media (prefers-color-scheme: dark) Modo oscuro <div class="dark:bg-black dark:text-white">Dark mode content</div>
rtl [dir="rtl"] Dirección de texto de derecha a izquierda <div dir="rtl" class="rtl:text-right">Right to Left</div>
aria-checked [aria-checked="true"] Aplicar estilos a elementos con atributos ARIA <div aria-checked="true" class="aria-checked:bg-green-500">Checked</div>
motion-safe @media (prefers-reduced-motion: no-preference) Preferencia de animación: se aplica cuando no hay preferencia <div class="motion-safe:transition-transform motion-safe:duration-500"></div>
Otras extensiones