Une el contenido alrededor de rutas personalizadas
Razvan Caliman
Durante mucho tiempo, los diseñadores web se vieron obligados a crear dentro de las limitaciones del rectángulo. La mayor parte del contenido en la web sigue atrapado en cuadros simples porque la mayoría de los emprendimientos creativos en un diseño no rectangular termina en frustración. Esto está a punto de cambiar con la introducción de formas de CSS, disponibles a partir de Chrome 37.
Las formas de CSS permiten a los diseñadores web unir el contenido alrededor de trazados personalizados, como círculos, elipses y polígonos, y así liberarse de las restricciones del rectángulo.
Las formas se pueden definir manualmente o se pueden inferir de las imágenes.
Veamos un ejemplo muy sencillo.
Quizás fuiste tan ingenuo como yo cuando flotaste por primera vez una imagen con partes transparentes, esperando que el contenido se envolviera y llene los espacios, pero te decepcionarás por la forma de envoltorio rectangular que se mantenía alrededor del elemento. Las formas de CSS se pueden usar para resolver este problema.
La declaración de CSS shape-outside: url(image.png) le indica al navegador que extraiga una forma de la imagen.
La propiedad shape-image-threshold define el nivel mínimo de opacidad de los píxeles que se usarán para crear la forma. Su valor debe estar entre 0.0 (completamente transparente) y 1.0 (completamente opaco). Por lo tanto, shape-image-threshold: 0.5 significa que solo se usarán píxeles con una opacidad del 50% o más para crear la forma.
La propiedad float es clave aquí. Si bien la propiedad shape-outside define la forma del área alrededor de la cual se unirá el contenido, sin el número de punto flotante, no verás los efectos de la forma.
Los elementos tienen un área flotante en el lado opuesto de su valor float. Por ejemplo, si un elemento con la imagen de una taza de café se flota hacia la izquierda, el área flotante se creará a la derecha de la taza. Aunque puedes diseñar una imagen con espacios vacíos en ambos lados, el contenido solo envolverá la forma en el lado opuesto designado por la propiedad de número de punto flotante, a la izquierda o a la derecha, nunca a ambos.
En el futuro, se podrá utilizar shape-outside en elementos que no aparezcan flotantes con la introducción de las exclusiones de CSS.
Cómo crear formas manualmente
Además de extraer formas de imágenes, también puedes programarlas de forma manual. Puedes elegir entre algunos valores funcionales para crear formas: circle(), ellipse(), inset() y polygon(). Cada función de forma acepta un conjunto de coordenadas y se sincroniza con un cuadro de referencia que establece el sistema de coordenadas. Más información sobre los cuadros de referencia en un momento.
La función círculo()
La notación completa del valor de una forma de círculo es circle(r at cx cy), en la que r es el radio del círculo, mientras que cx y cy son coordenadas del centro del círculo en el eje X y el eje Y. Las coordenadas del centro del círculo son opcionales. Si las omites, se usará el centro del elemento (la intersección de sus diagonales) como opción predeterminada.
En el ejemplo anterior, el contenido rodeará el exterior de una ruta circular. El argumento único 50% especifica el radio del círculo, que, en este caso específico, equivale a la mitad del ancho o la altura del elemento. Cambiar las dimensiones del elemento influirá en el radio de la forma del círculo. Este es un ejemplo básico de cómo las formas CSS pueden ser responsivas.
Antes de continuar, un apartado rápido: es importante recordar que las formas de CSS solo influyen en la forma del área flotante alrededor de un elemento. Si el elemento tiene un fondo, la forma no lo recortará. Para lograr ese efecto, debes utilizar las propiedades del enmascaramiento de CSS, ya sea clip-path o mask-image. La propiedad clip-path resulta muy útil porque sigue la misma notación que las formas CSS, por lo que puedes volver a usar valores.
Las ilustraciones de este documento usan recortes para resaltar la forma y ayudarte a comprender los efectos.
Volvamos a la forma de círculo.
Cuando se usan porcentajes para el radio del círculo, el valor en realidad se calcula con una fórmula un poco más compleja: qrt(width^2 + altura^2) / sqrt(2). Es útil comprender esto porque te ayudará a imaginar cuál será la forma de círculo resultante si las dimensiones del elemento no son iguales.
Todos los tipos de unidades CSS se pueden utilizar en coordenadas de funciones de forma: px, em, rem, vw, vh, etc. Puedes elegir uno que sea lo suficientemente flexible o rígido para tus necesidades.
Puedes ajustar la posición del círculo estableciendo valores explícitos para las coordenadas de su centro.
.element{
shape-outside: circle(50% at 0 0);
}
Esto posiciona el centro del círculo en el origen del sistema de coordenadas. ¿Qué es el sistema de coordenadas? Aquí es donde presentamos los cuadros de referencia.
Cuadros de referencia para formas CSS
El cuadro de referencia es un cuadro virtual alrededor del elemento, que establece el sistema de coordenadas que se usa para dibujar y posicionar la forma. El origen del sistema de coordenadas se encuentra en la esquina superior izquierda, con el eje X apuntando hacia la derecha y el eje Y hacia abajo.
Recuerda que shape-outside altera la forma del área flotante alrededor de la que se unirá el contenido. El área flotante se extiende hasta los bordes externos del cuadro definido por la propiedad margin. Esto se denomina margin-box y es el cuadro de referencia predeterminado de una forma si no se menciona ninguna explícitamente.
Las siguientes dos declaraciones de CSS tienen resultados idénticos:
.element{
shape-outside: circle(50% at 0 0);
/* identical to: */
shape-outside: circle(50% at 0 0) margin-box;
}
Aún no configuramos un margen en el elemento. En este punto, es seguro suponer que el origen del sistema de coordenadas y el centro del círculo se encuentran en la esquina superior izquierda del área de contenido del elemento. Esto cambia cuando estableces un margen:
.element{
shape-outside: circle(50% at 0 0) margin-box;
margin: 100px;
}
El origen del sistema de coordenadas ahora se encuentra fuera del área de contenido del elemento (100 px de arriba y 100 px a la izquierda), al igual que el centro del círculo. El valor calculado del radio del círculo también aumenta para tener en cuenta la mayor superficie del sistema de coordenadas establecido por la casilla de referencia margin-box.