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:
| Estado | Prefijo | Función |
|---|---|---|
| Estado hover | hover: | Controla el cambio de estilo del elemento al pasar el ratón por encima. |
| Estado focus | focus: | Controla el cambio de estilo del elemento cuando obtiene el foco. |
| Estado activo | active: | Controla el cambio de estilo del elemento cuando se hace clic en él. |
| Estado visitado | visited: | Controla los cambios de estilo de los enlaces visitados. |
| Estado focus-within | focus-within: | Controla el cambio de estilo del elemento padre cuando su hijo obtiene el foco. |
| Combinación de estados | Sin 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
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
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
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
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
<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 lista
Item 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
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
<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: - Ejemplo
dark:
Ejemplo
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
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
<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
<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
<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> |