En esta demostración, configurarás el ancho con clamp()
de la siguiente manera: width: clamp(<min>, <actual>, <max>)
.
De esta manera, se establecen un tamaño mínimo y máximo absolutos y un tamaño real. Con valores, puede verse de la siguiente manera:
.parent {
width: clamp(23ch, 60%, 46ch);
}
El tamaño mínimo es de 23ch
o 23 caracteres, y el máximo es de 46ch
(46 caracteres). Las unidades de ancho de caracteres se basan en el tamaño de la fuente del elemento (específicamente, el ancho del glifo 0
). El tamaño "real" es del 50%, que representa el 50% del ancho principal de este elemento.
Lo que hace la función clamp()
aquí es permitir que este elemento conserve un 50% de ancho hasta que un 50% sea mayor que 46ch
(en viewports más amplios) o inferior a 23ch
(en viewports más pequeños). En el video, mira cómo el ancho de esta tarjeta aumenta hasta su punto máximo restringido y disminuye a su mínimo restringido a medida que el elemento principal se estira y se contrae. Luego, se mantiene centrado en el elemento superior mediante propiedades adicionales para centrarlo. Esto permite diseños más legibles, ya que el texto no será demasiado ancho (sobre 46ch
) ni demasiado apretado y angosto (menos de 23ch
).
Puedes usar esta técnica para implementar una tipografía responsiva. Por ejemplo: font-size: clamp(1.5rem, 20vw, 3rem)
. En este caso, el tamaño de la fuente de un título siempre se mantendría restringido entre 1.5rem
y 3rem
, pero aumentaría y se reduciría según el valor real 20vw
para adaptarse al ancho del viewport.
Esta es una excelente técnica para garantizar la legibilidad con un valor de tamaño mínimo y máximo, pero recuerda que no es compatible con todos los navegadores actualizados, por lo que debes asegurarte de contar con resguardos y realizar pruebas.
HTML
<div class="parent">
<div class="card">
<h1>Title Here</h1>
<div class="visual"></div>
<p>Descriptive Text. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Sed est error repellat veritatis.</p>
</div>
</div>
CSS
.parent {
display: grid;
place-items: center;
}
.card {
width: clamp(23ch, 60%, 46ch);
display: flex;
flex-direction: column;
padding: 1rem;
}
.visual {
height: 125px;
width: 100%;
}