Generador de media queries
EstilosTodo se ejecuta en tu navegador: no se sube nada
Eliges una condición y obtienes un bloque `@media` listo para pegar en una hoja de estilos. ⚠️ La frontera entre breakpoints necesita una norma. `max-width: 767.98px` empalma con `min-width: 768px`, no con `max-width: 767px`: omitir ese `0.02` hace que una ventana de 767,5px no coincida con ninguna de las dos reglas, y esa anchura existe en la práctica (zoom del navegador, píxeles fraccionarios). Por eso todo rango generado aquí usa «límite superior − 0,02». Si escribes los dos números al revés, se corrigen solos en vez de producir una consulta que nunca coincidirá. ⚠️ Dos consultas que se malinterpretan mucho: · `prefers-color-scheme: dark` significa «el usuario ha expresado preferencia por el oscuro», no «el usuario está en oscuro». Una página que solo escribe estilos bajo `dark` es blanca para quien no ha dicho nada, mientras su autor cree que «se adapta sola». · `prefers-reduced-motion` solo te dice que el usuario pide menos movimiento. No detiene ninguna animación por ti. Escribir la consulta sin desactivar nada dentro es lo mismo que no escribirla. ⚠️ La vista previa muestra el efecto de las declaraciones de dentro del bloque: una media query es una condición y no se puede aplicar a un elemento. Lo que copias es el texto de la derecha.
Funciones
- Breakpoints de anchura: `min-width`, `max-width` y rangos
- ⚠️ El límite superior de un rango se reduce en 0,02 para empalmar exactamente con el siguiente `min-width`, sin dejar un tramo que no cubra nadie
- ⚠️ Si los dos números van al revés se corrigen solos, sin producir una consulta que nunca coincida
- Preferencias: modo oscuro y claro, menos movimiento, más contraste
- Dispositivos: orientación, si admite hover y si la entrada principal es táctil
- Impresión
- Vista previa en vivo (muestra el efecto de las declaraciones del bloque)
- ⚠️ La entrada del modo oscuro aclara que no significa «ahora en oscuro»; la de menos movimiento, que no detiene las animaciones sola
- Copia el bloque `@media … { }` completo
Cómo se usa
- Elige una condición
- Para las de anchura, fija el breakpoint; para un rango, también el límite superior
- Copia el texto de la derecha y cambia el selector y las declaraciones por los tuyos
Preguntas frecuentes
- ¿Por qué max-width es 767.98px y no 767px?
- Para que los rangos empalmen exactamente. `max-width: 767px` y `min-width: 768px` dejan `767px ~ 768px` cubierto por ninguna de las dos reglas, y entonces los estilos fallan en ciertas anchuras de ventana sin motivo visible. Ese hueco es real: un zoom del 110%, una relación de píxeles no entera o un diseño calculado con `clamp()` producen anchuras de ventana fraccionarias. Restar 0,02 es la práctica establecida (es lo que hace Bootstrap): menor que cualquier entero y mayor que la primera fracción después de 767,98.
- ¿Por qué no se aplica prefers-color-scheme: dark?
- Porque significa «el usuario ha expresado preferencia por el oscuro», no «el usuario está en oscuro». Cuando alguien nunca ha fijado una preferencia de tema, la consulta no coincide, así que una página que solo escribe estilos bajo `dark` se le aparece en blanco con el texto oscuro, es decir, con tus estilos base. Lo correcto es escribir los estilos claros por defecto y sobrescribirlos dentro de `dark`, no tomar el oscuro como predeterminado y meter el claro en una consulta `light`. Ese segundo enfoque deja a quien no ha dicho nada con algo que no está diseñado ni para un modo ni para el otro.
- He puesto prefers-reduced-motion y las animaciones siguen. ¿Por qué?
- Porque la consulta no hace nada por sí sola: es solo una condición que te dice que el usuario pide menos movimiento. Para que surta efecto hay que desactivar cosas dentro: `animation: none;`, `transition: none;` o una duración casi nula. Un bloque `@media (prefers-reduced-motion: reduce) { }` vacío es lo mismo que no escribirlo, pero en el código parece que ya está resuelto: ese es el mal uso más frecuente de esta característica.
- ¿Uso min-width o max-width?
- Prefiere `min-width` (diseño desde el móvil). El motivo no es de estilo, sino de cascada: una regla `min-width` escrita después sobrescribe con naturalidad la anterior, así que añadir un breakpoint es solo añadir al final; las reglas `max-width` hay que insertarlas en el sitio correcto y se enredan a medida que se acumulan. Y escribir primero los estilos base para el teléfono y luego añadir para pantallas grandes te obliga a enfrentarte a lo que no cabe en una pantalla pequeña: es más fácil acertar así que haciendo la versión de escritorio y luego intentando meterla en un móvil.
- ¿Puede una media query saber si el usuario está en un dispositivo táctil?
- De forma fiable, no: solo puedes preguntar lo correcto. `(pointer: coarse)` pregunta si la entrada principal es basta (un dedo) y `(hover: hover)` si se puede pasar el ratón por encima. Pero en dispositivos híbridos (un portátil con pantalla táctil, una tableta con ratón conectado) las dos respuestas pueden ser ciertas a la vez, y el usuario cambia de método de entrada cuando quiere. Así que no las uses para adivinar el dispositivo, sino para mejorar cuando existe la capacidad: pon los estilos de `:hover` dentro de `@media (hover: hover)`, que es el uso exacto, porque en una pantalla táctil el concepto de pasar el ratón por encima no existe.
Herramientas relacionadas
Flexbox
EstilosPulsa botones para cambiar flex-direction, justify-content, align-items y más, mira el diseño al momento y copia el CSS completo con su HTML.
Texto vertical
EstilosAjusta dirección, tamaño, separación y altura para previsualizar el texto vertical y copiar el CSS. La altura decide dónde se parten las columnas.
Vista previa de cursor
EstilosPasa el ratón por el bloque para ver cada palabra clave de cursor. Hay más de treinta y la mitad no se adivina por el nombre.
Generador de degradados CSS
EstilosAjusta ángulo, colores y forma, mira la previa al momento y copia el CSS. Lineal, radial y cónico, con parada intermedia opcional.
Generador de border-radius
EstilosAjusta el radio de las cuatro esquinas, prévisualo al momento y copia el CSS. Con px, rem y porcentaje: en una caja no cuadrada el porcentaje da elipse.
Generador de glassmorphism
EstilosAjusta desenfoque, opacidad, saturación y borde, mira el vidrio esmerilado al momento y copia el CSS, con el prefijo -webkit- para iOS.