Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Cómo unir 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. Eso está a punto de cambiar con la introducción de las formas 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, lo que permite liberarse de las restricciones del rectángulo.
Las formas se pueden definir de forma manual o inferir a partir de imágenes.
Veamos un ejemplo muy sencillo.
Tal vez hayas sido tan ingenuo como yo cuando flotaste una imagen con partes transparentes esperando que el contenido se uniera y llenara los espacios, solo para decepcionarte con la forma rectangular que persiste alrededor del elemento. Las formas de CSS se pueden usar para resolver este problema.
La declaración 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 superior 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é flota a la izquierda, el área de flotación se creará a la derecha de la taza. Si bien puedes diseñar una imagen con espacios en ambos lados, el contenido solo se unirá a la forma del lado opuesto designado por la propiedad de flotación, a la izquierda o a la derecha, nunca a ambos.
En el futuro, será posible usar shape-outside en elementos que no estén flotando con la introducción de las exclusiones de CSS.
Cómo crear formas manualmente
Además de extraer formas de las imágenes, también puedes codificarlas 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 vincula con un cuadro de referencia que establece el sistema de coordenadas. En un momento, hablaremos más sobre los cuadros de referencia.
La función circle()
La notación completa para un valor de 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 las coordenadas del centro del círculo en el eje X y el eje Y. Las coordenadas del centro del círculo son opcionales. Si los omites, se usará el centro del elemento (la intersección de sus diagonales) como predeterminado.
En el ejemplo anterior, el contenido se unirá alrededor del exterior de una ruta circular. El único argumento 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 afectará 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, una observación rápida: 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 usar propiedades de máscaras 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 reutilizar valores.
En las ilustraciones de este documento, se usa el recorte para destacar 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 se calcula con una fórmula un poco más compleja: sqrt(width^2 + height^2) / sqrt(2). Es útil comprender esto porque te ayudará a imaginar cómo será la forma del círculo resultante si las dimensiones del elemento no son iguales.
Todos los tipos de unidades de CSS se pueden usar en las coordenadas de la función de forma: px, em, rem, vw, vh, etcétera. Puedes elegir la que sea lo suficientemente flexible o rígida para tus necesidades.
Para ajustar la posición del círculo, establece valores explícitos para las coordenadas de su centro.
.element{shape-outside:circle(50%at00);}
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 de 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 apuntando hacia abajo.
Recuerda que shape-outside altera la forma del área flotante alrededor de la cual se unirá el contenido. El área flotante se extiende hasta los bordes exteriores 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 de forma explícita.
Las siguientes dos declaraciones de CSS tienen resultados idénticos:
.element{shape-outside:circle(50%at00);/* identical to: */shape-outside:circle(50%at00)margin-box;}
Aún no configuramos un margen en el elemento. En este punto, se puede asumir 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:
El origen del sistema de coordenadas ahora se encuentra fuera del área de contenido del elemento (100 px hacia arriba y 100 px hacia la izquierda), al igual que el centro del círculo. El valor calculado del radio del círculo también aumenta para dar cuenta del aumento de la superficie del sistema de coordenadas establecido por el cuadro de referencia margin-box.
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2014-09-16 (UTC)"],[],[]]