Saltar enlaces

Utilice shape() para crear formas CSS complejas

La creación de rectángulos, círculos y rectángulos redondeados es la base de CSS. Crear más complejo formas CSS Por ejemplo, los triángulos, hexágonos, estrellas, corazones, etc. son más desafiantes pero siguen siendo una tarea fácil si confiamos en las funciones modernas.

Pero ¿qué pasa con las formas que tienen un poco de aleatoriedad y muchas curvas?

Tres formas rectangulares con bordes dentados y no creados. El primero es azul, luego naranja y luego verde.

Podría haber muchos nombres aquí: ondas aleatorias, bamboleos, manchas, ondas, irregulares, rasgados, etc. Como sea que los llames, todos podemos estar de acuerdo en que su creación no es simple y generalmente pertenecen al mundo SVG, o se crean usando herramientas y se usan como imágenes. gracias nuevo shape() funciones, ahora podemos crearlas usando CSS.

No te voy a decir que son fáciles de crear. De hecho, son un poco complicados ya que requieren muchas matemáticas y cálculos. Así que construí algunos generadores donde puedes obtener fácilmente código para diferentes formas.

Todo lo que tienes que hacer es ajustar tu configuración y obtener tu código al instante. ¡Es así de simple!

Si bien la mayoría de ustedes pueden tener la tentación de agregar Generadores CSS a sus favoritos y dejar este artículo, les recomiendo que sigan leyendo. Tener generadores es genial, pero comprender la lógica detrás de ellos es aún mejor. Es posible que necesites ajustar manualmente el código para crear más variaciones de forma. También veremos algunos ejemplos interesantes, ¡así que quédate hasta el final!

Aviso: Si eres nuevo en shape()recomiendo mucho leer mío cuatro-algunas series En él explico los conceptos básicos. Le ayudará a comprender mejor lo que hacemos aquí.

¿Cómo funciona?

Si bien muchas de las formas que puedes crear usando mi generador parecen diferentes, todas dependen de la misma técnica: muchas curve Orden. El truco principal es asegurarse de que dos adyacentes curve Establece una curvatura suave para que la forma completa parezca una curva continua.

A continuación se muestra un gráfico que se puede dibujar usando el comando Curva. Solo usaré un punto de control:

Una curva normal con un punto de control en el centro exacto. El segundo muestra otra curva con sus puntos de control girados hacia la izquierda, distorsionando la curva.

Ahora, juntemos las dos curvas:

Una curva ondulada con dos puntos de control, uno hacia arriba y otro hacia abajo, formando una onda a lo largo de tres puntos.

El punto final E1 de la primera curva es el punto inicial de la segunda curva S2. Este punto se encuentra dentro del segmento de línea formado por los puntos de control C1 y C2. Este es el estándar para la suavidad general de las curvas. Si no lo hiciéramos, tendríamos una curva “mala” que se ha detenido.

Una curva ondulada con dos puntos de control. El segundo punto se mueve hacia abajo y hacia la derecha, doblando la curva de la segunda onda de una manera no deseada.

Lo único que debemos hacer es generar aleatoriamente diferentes curvas respetando el criterio anterior entre dos curvas consecutivas. Por simplicidad, considero el punto común entre las dos curvas como el punto medio de los puntos de control para reducir la aleatoriedad del proceso.

Crear formas

Comencemos con la forma más simple, un divisor ondulado aleatorio. Hay una curva aleatoria en un lado.

Un rectángulo azul largo con un borde inferior dentado.

Dos variables controlarán la forma: granularidad y tamaño. La granularidad define cuantas curvas tendremos (será un número entero). El tamaño define el espacio en el que se dibuja la curva.

El mismo rectángulo azul en ambas versiones tiene dos bordes inferiores dentados diferentes y está marcado en rojo para mostrar la forma. El primero está marcado con un tamaño de grano 8 y el segundo tiene dentados más profundos y está marcado con un tamaño de grano 18.

El primer paso es crear N puntos y colocarlos uniformemente en la parte inferior del elemento (N es la granularidad).

Un rectángulo blanco con un borde negro y siete puntos de control espaciados uniformemente a lo largo del borde inferior.

Luego compensamos aleatoriamente la posición vertical de los puntos usando la variable de tamaño. El desplazamiento de cada punto es igual a un valor aleatorio en el rango (0 size).

Un rectángulo blanco con un borde negro y siete puntos de control espaciados uniformemente a lo largo del borde inferior en forma ondulada. La

A partir de ahí, tomamos dos puntos adyacentes y definimos su punto medio. Obtenemos más puntos.

Un rectángulo blanco con un borde negro y trece puntos de control espaciados uniformemente a lo largo del borde inferior en forma ondulada. La

¿Estás empezando a hacerte una idea? El primer conjunto de puntos se coloca al azar, mientras que el segundo conjunto de puntos se coloca de manera que se ajuste a los criterios que definimos anteriormente. A partir de ahí dibujamos todas las curvas y obtenemos nuestra forma.

El código CSS se verá así:

.shape {
  clip-path: shape(from Px1 Py1,
    curve to Px2 Py2 with Cx1 Cy1,
    curve to Px3 Py3 with Cx2 Cy2,
    /* ... */
    curve to Pxi Pyi with Cx(i-1) Cy(i-1)
    /* ... */
  )
}

este Ci son nuestros puntos colocados aleatoriamente (puntos de control) y Pi es el punto medio.

A partir de ahí, aplicamos la misma lógica a los diferentes lados para obtener diferentes variaciones (abajo, arriba, abajo arriba, todos los lados, etc.).

Cuadrícula de dos por dos del mismo rectángulo azul con diferentes configuraciones de bordes ondulados. El primero está en la parte inferior, el segundo está en la parte superior, el tercero está en la parte superior e inferior y el cuarto está sobre toda la forma.

Para lugarla lógica es ligeramente diferente. En lugar de considerar rectángulos y líneas rectas, utilizamos círculos.

Dos círculos blancos con bordes negros, que contienen un círculo más pequeño con un borde discontinuo. El primer círculo tiene ocho puntos de control negros espaciados uniformemente alrededor del círculo exterior. Hay 15 puntos de control alrededor del segundo punto de control, uno de los cuales es azul y está ubicado entre los círculos exterior e interior, formando una forma ondulada.

Colocamos puntos uniformemente alrededor de un círculo (un círculo formado por elementos si tiene border-radius: 50%). Luego los desplazamos aleatoriamente más cerca del centro. Finalmente, sumamos el punto medio y dibujamos la forma.

Una gran forma de gota verde.

Aún podemos ir un paso más allá y combinar la primera técnica con la técnica del círculo, considerando un rectángulo con las esquinas redondeadas.

Un rectángulo azul redondeado junto a otra versión de sí mismo con muchos bordes irregulares a su alrededor.

Este fue el más complicado de implementar porque tuve que abordar cada rincón, cada lado y trabajar con diferentes granularidades. Aún así, los resultados fueron muy satisfactorios porque nos permitió crear muchas cosas. Hermoso marco!

¡Muéstrame una demostración genial!

Basta de teoría, veamos algunos ejemplos interesantes y cómo usar simplemente generadores para crear formas y animaciones de apariencia compleja.

¡Comenzamos con un diseño clásico con muchos divisores ondulados!

Tenemos cuatro formas en esta demostración, todas las cuales son simplemente copiar y pegar generador divisor de ondas. La parte superior de la página usa la configuración inferior, el pie de página usa la configuración superior y otros elementos usan la configuración superior+inferior.

Imaginemos esto y agreguemos algo de animación.

Cada elemento tiene el siguiente código:

@media screen and (prefers-reduced-motion: no-preference) {
  .element {
    --s1: shape( ... );
    --s2: shape( ... );
    animation: dance linear 1.6s infinite alternate;
  }

  @keyframes dance {
    0% {clip-path: var(--s1)}
    to {clip-path: var(--s2)}
  }
}

Desde el generador usted fija la granularidad y el tamaño y luego produce dos formas diferentes para cada variable (--s1 y --s2). El número de curvas es el mismo, lo que significa que el navegador puede interpolar entre las dos formas, ¡así obtenemos una bonita animación!

Entonces, ¿qué tal si introducimos la animación basada en desplazamiento para implementar la animación basada en desplazamiento? Todo lo que tienes que hacer es agregar animation-timeline: scroll() Todo está hecho.

Este es el mismo efecto que los encabezados adhesivos.

Para ello, debes considerar el tamaño. Usted corrige la granularidad y la identificación de la forma, luego considera el tamaño igual a 0 Para forma inicial (rectángulo) y tamaño diferente al 0 Para los ondulados. Luego deja que el navegador se anime entre los dos.

¿Ves todas las posibilidades que tenemos? Puedes usar formas como decoraciones estáticas, o puedes crear hermosas animaciones entre dos (o más) usando la misma granularidad y ajustando otras configuraciones (tamaño e ID de forma).

¿Qué presentación genial puedes crear usando estos consejos? Compártelo en la sección de comentarios.

Te daré algunos ejemplos más que puedes usar como inspiración.

Efecto de rebote y desplazamiento con forma de burbuja:

uno botón suave Con efectos de desplazamiento y clic:

uno Animación del marco oscilante:

uno Efecto de visualización líquida:

y un grupo Hermoso cargador CSS Puedes encontrarlo en mi sitio web.

en conclusión

¿Ves todo el potencial de tu nuevo producto? shape() ¿Función? Ahora tenemos la oportunidad de crear formas de apariencia compleja sin usar SVG ni imágenes. Aparte de eso, podemos obtener bonitas transiciones/animaciones fácilmente.

No olvides marcar mis favoritos. generador de CSS sitio web donde puede obtener el código de las formas que estudiamos y más. yo tambien lo tengo formas CSS Actualizaré el sitio pronto para aprovechar las nuevas shape() ¡Para la mayoría de las formas y optimizó una gran cantidad de código antiguo!

¿Y tú? ¿Te imaginas la forma compleja que podemos crear usando shape()? ¡Quizás puedas darme una idea para mi próximo generador!

Home
Account
Cart
Search
¡Hola! ¡Pregúntame lo que quieras!
Explore
Drag