¿Cómo creo una forma como esta para mostrar en una página web?
No quiero usar imágenes, ya que se volverían borrosas al escalar
Intenté con CSS :
.tear {
display: inline-block;
transform: rotate(-30deg);
border: 5px solid green;
width: 50px;
height: 100px;
border-top-left-radius: 50%;
border-bottom-left-radius: 50%;
border-bottom-right-radius: 50%;
}
<div class="tear">
</div>
Eso resultó realmente jodido.
Y luego probé con SVG:
<svg viewBox="0 100 100">
<polygon points="50,0 100,70 50,100 0,70"/>
</svg>
Obtuvo la forma, pero la parte inferior no era curva.
¿Hay alguna forma de crear esta forma para que pueda usarse en una página HTML?
html
css
svg
css-shapes
Persijn
fuente
fuente
[srcset]
o el<picture>
elemento. Mejor aún, solo enlace a una imagen svg:<img src="tear.svg" alt="Teardrop"/>
picture
elemento? Sin soporte para IE, sin soporte para versiones anteriores de Chrome, sin soporte para safari. ¿Debo continuar?why are you scaling the image?
Bueno, la imagen puede aparecer borrosa sin que el desarrollador la escale. Todo lo que necesita para eso es un zoom del navegador. En mi caso, tengo una pantalla HighDPI y muchas imágenes borrosas. Entonces, sí, si puedes evitar imágenes usando SVG, hazlo.Respuestas:
Enfoque SVG:
Puede lograr la doble curva fácilmente con un SVG en línea y el
<path/>
elemento en lugar del<polygon/>
elemento que no permite formas curvas.El siguiente ejemplo usa el
<path/>
elemento con:Q
)A
)SVG es una gran herramienta para hacer este tipo de formas con curvas dobles. Puede consultar esta publicación sobre curvas dobles con una comparación SVG / CSS. Algunas de las ventajas de usar SVG en este caso son:
La compatibilidad del navegador para SVG en línea se remonta a Internet Explorer 9. Consulte canIuse para obtener más información.
fuente
<svg width="100%" height="100%" viewBox="0 0 8 8" /> <path d="M4 1L3 4A1.2 2 0 1 0 5 4"/> </svg>
... esto llenará el área que le da, por lo que puede hacer gotas de lluvia "gruesas" o "delgadas" ... cambie a altura / ancho fijo si es necesariod="..."
atributo es que ya no tiene la doble curva en la parte superior de la caída.<img />
en el documento de hipertexto.Radio de borde básico
Puede hacer esto dentro de CSS con relativa facilidad usando border-radius 'y transforma. Tu CSS estaba solo un poco fuera.
Radio de borde avanzado
Esto será muy similar al anterior pero le da un poco más de forma.
fuente
Su principal problema con su código CSS fue:
Entonces, al 'solucionar' estos problemas, generaría:
Tenga en cuenta también que para ahorrar en la longitud de CSS, puede volver a escribir sus propiedades de radio de borde en:
esto podría mejorarse con pseudo elementos como se muestra en este violín
Alternativas
Encontré esto por Vinay Challuru en codepen.
Tenga en cuenta que con la lógica aquí, pude crear el SVG para casi cualquier forma de construcción posible, etc. Por ejemplo, una salida rápida fue:
Mostrar fragmento de código
Está utilizando un SVG y le permite alterar la forma de múltiples maneras, teniendo la capacidad de alterar su forma para obtener el resultado deseado:
Mostrar fragmento de código
Versión CSS
Aunque esto está lejos de estar completo, también puede generar esta forma usando CSS.
Mostrar fragmento de código
Versión SVG
Debería saber que SVG debería estar en la parte superior de esta respuesta, sin embargo, me gusta un desafío y aquí hay un intento con SVG.
Al alterar los
path
valores, podrá alterar la forma de su diseño de lágrima.fuente
En mi opinión, esta forma requiere curvas suaves para garantizar la continuidad de la curva.
La caída en cuestión:
Para la caída en cuestión,
Nota : Las curvas rojas y azules son dos curvas cuadráticas diferentes.
stroke-linejoin="miter"
, para la parte superior puntiaguda.Como esta forma solo usa
c
comandos sucesivos , podemos omitirla.Aquí está el fragmento final:
TBH , sin embargo , las curvas de respuesta aceptadas no son bastante continuas.
Para IE 5-8 (VML)
Solo funciona en IE 5-8. VML usa comandos diferentes que SVG . P.ej. usa v para beziers cúbicos relativos .
Nota: este fragmento tampoco se ejecutará en IE 5-8. Debe crear un archivo html y ejecutarlo directamente en el navegador.
fuente
O si la fuente de sus espectadores lo admite, use los caracteres Unicode
GOTA: 💧 (
💧
)o
GOTA NEGRA: 🌢 (
🌢
)Escala en consecuencia!
fuente
Yo personalmente usaría un SVG para esto. Puede crear SVG en la mayoría de los software de gráficos vectoriales. Yo lo recomiendo:
He hecho uno a continuación que es un seguimiento de su forma en Illustrator.
fuente
Lienzo HTML
Esta es una opción descubierta en este hilo hasta ahora. Los comandos utilizados para los dibujos de Canvas son muy similares a SVG (y web-tiki merece los créditos por la idea base utilizada en esta respuesta).
La forma en cuestión se puede crear utilizando los comandos de curva propios del lienzo (Cuadrático o Bézier) o la API de ruta. La respuesta contiene ejemplos para los tres métodos.
El soporte del navegador para Canvas es bastante bueno .
Usando curvas cuadráticas
A continuación se muestra una versión avanzada con relleno degradado y sombras. También he incluido un
hover
efecto en la forma para ilustrar un inconveniente de Canvas en comparación con SVG. El lienzo está basado en ráster (píxel) y, por lo tanto, se vería borroso / pixelado cuando se escala más allá de cierto punto. La única solución para eso sería volver a pintar la forma en cada cambio de tamaño del navegador, que es una sobrecarga.Mostrar fragmento de código
Usando curvas de Bezier
Mostrar fragmento de código
Usando la API de ruta
Mostrar fragmento de código
Nota: Como se mencionó en mi respuesta aquí , IE y Safari aún no admiten la API de ruta.
Otras lecturas:
fuente
También encontré esto en Codepen hecho por el usuario Ana Tudor usando CSS y el
box-shadow
estilo y las ecuaciones paramétricas. Muy simple, muy poco código. Y muchos navegadores admiten el estilo CSS3 Box-shadow:fuente
Versión CSS
Como hay algunas pocas respuestas aquí, pensé por qué no agregarlo con otro método. Esto está utilizando HTML y CSS para crear la lágrima.
Esto le permitirá cambiar el color del borde y el fondo de la lágrima y también cambiar el tamaño de la parte superior.
Usando un solo
div
podemos crear un círculo conborder
yborder-radius
. Luego, usando pseudo elementos (:before
&:after
) creamos un triángulo CSS más aquí , esto actuará como la punta de la lágrima. Usando:before
como borde colocamos:after
en la parte superior con un tamaño más pequeño y el color de fondo deseado.Aquí hay una demostración de la lágrima con un color de fondo.
Mostrar fragmento de código
Es tan simple como poner un color de fondo
div
y cambiar el:after
bottom-border
color al mismo. Para cambiar el borde, también deberá cambiar eldiv
color del borde y el:before
color de fondo.fuente
Es bastante fácil hacer esto con SVG simplemente usando un recurso de conversión de imágenes como http://image.online-convert.com/convert-to-svg , que se utilizó para crear lo siguiente:
fuente
300.000000pt
y metadatos que realmente no son necesariosSi elige usar SVG, debe leer en las rutas. También sugeriría un editor SVG.
fuente
Aquí hay cuatro formas de lágrima SVG progresivamente más simples:
fuente