Como crio uma forma como essa para ser exibida em uma página da web?
Eu não quero usar imagens, pois elas ficam embaçadas no dimensionamento
Eu tentei com 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>
Isso acabou realmente ferrado.
E então eu tentei com SVG:
<svg viewBox="0 100 100">
<polygon points="50,0 100,70 50,100 0,70"/>
</svg>
Ele ficou com a forma, mas a parte inferior não estava curvada.
Existe uma maneira de criar essa forma para que possa ser usada em uma página HTML?
html
css
svg
css-shapes
Persijn
fonte
fonte
[srcset]
ou o<picture>
elemento Melhor ainda, apenas um link para uma imagem SVG:<img src="tear.svg" alt="Teardrop"/>
picture
elemento? Sem suporte para o IE, sem suporte para versões anteriores do Chrome, sem suporte para safari. Devo continuar?why are you scaling the image?
Bem, a imagem pode parecer embaçada sem que o desenvolvedor a dimensione. Tudo o que você precisa é de um navegador com zoom. No meu caso, tenho uma tela HighDPI e muitas imagens tremidas. Então, sim, se você pode evitar imagens usando SVG, faça isso.Respostas:
Abordagem SVG:
Você pode obter a curva dupla facilmente com um SVG embutido e o
<path/>
elemento em vez do<polygon/>
elemento que não permite formas curvas.O exemplo a seguir usa o
<path/>
elemento com:Q
)A
)O SVG é uma ótima ferramenta para criar esse tipo de formas com curvas duplas. Você pode verificar este post sobre curvas duplas com uma comparação SVG / CSS. Algumas das vantagens de usar SVG neste caso são:
O suporte do navegador ao SVG embutido volta ao Internet Explorer 9. Consulte canIuse para obter mais informações.
fonte
<svg width="100%" height="100%" viewBox="0 0 8 8" /> <path d="M4 1L3 4A1.2 2 0 1 0 5 4"/> </svg>
... isso vai preencher a área que você dá, por isso pode fazer "gordura" ou "magro" Pingos de chuva ... mudança de altura fixa / largura, se necessáriod="..."
atributo é que você não tem mais a curva dupla no topo da gota.<img />
no documento de hipertexto.Raio básico da borda
Você pode fazer isso no CSS de maneira relativamente fácil usando o raio da borda e as transformações. Seu CSS ficou um pouco fora do ar.
Raio de borda avançado
Isso será muito semelhante ao anterior, mas dará um pouco mais de forma.
fonte
Seu principal problema com o seu código CSS foi:
Portanto, 'corrigindo' esses problemas, você geraria:
Observe também que, para economizar no tamanho do CSS, você pode reescrever suas propriedades de raio de borda para:
isso poderia ser aprimorado com pseudo elementos, como mostrado neste violino
Alternativas
Encontrei isso por Vinay Challuru no codepen.
Observe que, com a lógica aqui, eu consegui criar o SVG para praticamente qualquer forma possível de construção / etc. Por exemplo, uma saída rápida foi:
Mostrar snippet de código
Ele está usando um SVG e permite alterar a forma de várias maneiras, podendo alterar sua forma para o resultado desejado:
Mostrar snippet de código
Versão CSS
Embora isso esteja longe de estar completo, você também poderá gerar essa forma usando CSS.
Mostrar snippet de código
Versão SVG
Eu deveria saber que o SVG deve estar no topo desta resposta, no entanto, eu gosto de um desafio e, portanto, aqui está uma tentativa com o SVG.
Alterando os
path
valores, você poderá alterar a forma do seu design de lágrima.fonte
Na IMO, esse formato requer beziers de curva a curva suaves para garantir a continuidade da curva.
A gota em questão:
Para a queda em questão,
Nota : As curvas vermelha e azul são duas curvas quadráticas diferentes.
stroke-linejoin="miter"
, para a parte superior pontiaguda.Como essa forma usa apenas
c
comandos sucessivos , podemos omiti-la.Aqui está o trecho final:
TBH , porém , as curvas de resposta aceitas não são muito contínuas.
Para IE 5-8 (VML)
Funciona apenas no IE 5-8. O VML usa comandos diferentes do SVG . Por exemplo. usa v para beziers cúbicos relativos .
Nota: este trecho também não será executado no IE 5-8. Você precisa criar um arquivo html e executá-lo diretamente no navegador.
fonte
Ou, se a fonte de seus espectadores suportar, use os caracteres Unicode
GOTA: 💧 (
💧
)ou
GOTA PRETA: 🌢 (
🌢
)Escale de acordo!
fonte
Eu pessoalmente usaria um SVG para isso. Você pode criar SVGs na maioria dos softwares de gráficos vetoriais. Eu recomendo:
Fiz um abaixo que é um rastreio de sua forma no Illustrator.
fonte
Tela HTML
Esta é uma opção descoberta neste segmento até o momento. Os comandos usados para os desenhos do Canvas são muito semelhantes ao SVG (e o web-tiki merece os créditos pela idéia base usada nesta resposta).
A forma em questão pode ser criada usando os comandos de curva da própria tela (Quadratic ou Bezier) ou a API do caminho. A resposta contém exemplos para todos os três métodos.
O suporte do navegador para o Canvas é bastante bom .
Usando curvas quadráticas
Abaixo está uma versão avançada com preenchimento de gradiente e sombras. Também incluí um
hover
efeito na forma para ilustrar uma desvantagem do Canvas quando comparado ao SVG. A tela é baseada em varredura (pixel) e, portanto, pareceria borrada / pixelizada quando dimensionada além de um determinado ponto. A única solução para isso seria repintar a forma em cada redimensionamento de navegador, o que é uma sobrecarga.Mostrar snippet de código
Usando curvas de Bezier
Mostrar snippet de código
Usando Path API
Mostrar snippet de código
Nota: Como mencionado na minha resposta aqui , a API do Path ainda não é suportada pelo IE e pelo Safari.
Leitura adicional:
fonte
Eu também encontrei isso no Codepen feito pela usuário Ana Tudor usando CSS e as
box-shadow
equações de estilo e paramétricas. Muito simples, muito pouco código. E muitos navegadores suportam o estilo CSS3 Box-shadow:fonte
Versão CSS
Como há poucas respostas aqui, pensei em por que não adicionar um outro método. Isso está usando HTML e CSS para criar a lágrima.
Isso permitirá que você altere a cor da borda e do plano de fundo da lágrima e também redimensione a parte superior.
Usando um único
div
, podemos criar um círculo comborder
eborder-radius
. Então, usando pseudo-elementos (:before
&:after
), criamos um triângulo CSS mais aqui , que atuará como a ponta da lágrima. Utilizando o:before
como borda, colocamos:after
no topo um tamanho menor e a cor de fundo desejada.Aqui está uma demonstração da lágrima com uma cor de fundo
Mostrar snippet de código
É tão simples quanto colocar uma cor de fundo na
div
e alterar:after
bottom-border
a mesma. Para alterar a borda, você precisará alterar também adiv
cor da borda e a:before
cor do plano de fundo.fonte
É muito fácil fazer isso com o SVG usando apenas um recurso de conversão de imagem como http://image.online-convert.com/convert-to-svg , que foi usado para criar o seguinte:
fonte
300.000000pt
e metadados que não é realmente necessárioSe você optar por usar o SVG, leia os caminhos. Eu também sugeriria um editor SVG.
fonte
Aqui estão quatro formas de lágrima SVG progressivamente mais simples:
fonte