Conceptos Principales, Media, Responsive e Impresión

¿Qué son las media queries?

Las media queries en CSS son un recurso esencial para crear diseños web adaptables y receptivos. Estas consultas permiten aplicar estilos específicos basados en las características del dispositivo o el entorno de visualización. Con media queries, los diseñadores pueden ajustar el diseño, el tamaño de fuente, los márgenes y otros atributos de diseño según factores como el ancho de la pantalla, la orientación del dispositivo o incluso la densidad de píxeles. Esto garantiza que un sitio web se vea y funcione de manera óptima en diversos dispositivos, desde teléfonos móviles hasta monitores de alta resolución, mejorando la experiencia del usuario en todos los contextos.

Responsive breakpoints (Puntos de interrupción responsivos)

Para crear diseños responsivos es necesario definir estilos limitados por puntos de interrupción, en Tailwind esto se hace utilizando modificadores como md (mediano) y lg (grande).

El siguiente ejemplo desplegará un grid que va aumentando el número de columnas conforme el dispositivo es mas ancho.

<div
    class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5"
>
    <div class="bg-pink-100">1</div>
    <div class="bg-pink-200">2</div>
    <div class="bg-pink-300">3</div>
    <div class="bg-pink-400">4</div>
    <div class="bg-purple-100">5</div>
    <div class="bg-purple-200">6</div>
    <div class="bg-purple-300">7</div>
    <div class="bg-purple-400">8</div>
</div>

Ejemplo

Esquema de colores (prefers-colors-scheme)

El media query prefers-color-scheme indica si el usuario prefiere un modo claro u oscuro, y esto es usualmente configurado a nivel del sistema operativo.

Utiliza las utilidades sin modificadores para personalizar el modo claro, y el modificador dark paa personalizar el modo oscuro.

<div class="rounded-lg bg-white p-5 shadow-lg dark:bg-slate-500">
    <div class="mb-8">
        <button class="rounded bg-blue-400 px-11 py-2 font-bold text-white">
            Play
        </button>
    </div>

    <h2 class="mb-2 font-bold dark:text-slate-100">
        Lorem ipsum dolor sit amet
    </h2>

    <p class="mb-8 dark:text-slate-200">
        Consectetur adipisicing elit. Id fuga sunt ab perferendis eligendi
        officiis, vero, quaerat molestiae perspiciatis quisquam placeat
        praesentium ducimus iste minima distinctio nemo debitis explicabo
        assumenda.
    </p>

    <input
        type="checkbox"
        onclick="void(document.body.classList.toggle('dark'))"
        id="dark-mode"
        class="mr-2"
    />
    <span class="dark:text-slate-200">Dark Mode</span>
</div>

Ejemplo

En este ejemplo hemos podido personalizar un card con los colores para el modo claro y oscuro. Esta tarea es sumamente sencilla en Tailwind y se realiza utilizando el modificador dark.

Movimiento reducido (prefers-reduced-motion)

El media query prefers-reduced-motion envía la instrucción que se minimicen los movimientos y animaciones a los mas esenciales.

Utiliza el modificador motion-reduce para agregar estilos que sean aplicados durante motion reduce (movimiento reducido).

<button class="flex items-center bg-blue-600 py-3 rounded-lg">
    <svg
        version="1.1"
        id="L9"
        xmlns="http://www.w3.org/2000/svg"
        xmlns:xlink="http://www.w3.org/1999/xlink"
        x="0px"
        y="0px"
        viewBox="0 0 100 100"
        enable-background="new 0 0 0 0"
        xml:space="preserve"
        class="h-[50px] pl-5 motion-reduce:hidden"
    >
        <path
            fill="#fff"
            d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"
        >
            <animateTransform
                attributeName="transform"
                attributeType="XML"
                type="rotate"
                dur="1s"
                from="0 50 50"
                to="360 50 50"
                repeatCount="indefinite"
            ></animateTransform>
        </path>
    </svg>

    <span class="text-white font-bold text-xl text-left pl-2 pr-8"
        >Cargando</span
    >
</button>

Ejemplo

Tailwind también incluye un modificador llamado motion-safe, que agrega los estilos cuando el usuario ha deshabilitado la opción prefers-reduced-motion.

¿Cómo habilitar el modo reduced motion en Chrome?

Para probar el modo movimiento reducido, abre Chrome y presiona Ctrl+Shift+P en PC o Cmd+Shift+P y escribe prefers-reduced-motion, ahí puedes habilitar o deshabilitar la opción.

Prefers contrast (prefers-contrast)

El media query prefers-contrast indica que el usuario ha solicitado mas o menos contraste.

Utiliza el modificador contrast-more para agregar de manera condicional los estilos cuando el usuario solicite el modo de alto contraste.

Tailwind también incorpora el modificador contrast-less que es utilizado cuando el usuario no tiene activado el modo contraste en ON.

<div class="p-5 bg-white rounded-lg shadow-md">
    <form>
        <label class="block text-xl font-bold mb-1">Teléfono:</label>
        <input
            type="text"
            class="border outline-none border-slate-500 mb-2 w-1/2 px-3 py-2"
        />
        <p class="text-slate-200 contrast-more:text-slate-600">
            Esta es la información de ayuda acerca del campo
        </p>
    </form>
</div>

Ejemplo

Orientación del viewport

Los modificadores portrait (vertical) y landscape (horizontal) permiten agregar estilos en base a la orientación del dispositivo.

En el siguiente ejemplo vamos a mostrar un texto u otro dependiendo de la orientación del dispositivo.

<div class="p-10 bg-white">
    <div class="portrait:hidden">Este contenido se ve en el modo vertical.</div>

    <div class="landscape:hidden">
        Este contenido se ve en el modo horizontal.
    </div>
</div>

Ejemplo

Estilos para impresión

El modificador print permite agregar estilos que son únicamente utilizados cuando se envía a impresión el contenido mostrado en pantalla.

<h1>Este es un título</h1>
<p class="print:hidden">Este es un parrado mostrado solo en pantalla</p>
<p class="hidden print:block">Este es un parrado mostrado solo en impresión</p>

Support

El modificador supports-[...] permite aplicar estilos cuando alguna funcionalidad especial es soportada por el navegador.