Comment créer une forme comme celle-ci pour l'afficher sur une page Web?
Je ne veux pas utiliser d' images car elles deviendraient floues à l'échelle
J'ai essayé avec 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>
Cela s'est avéré vraiment foutu.
Et puis j'ai essayé avec SVG:
<svg viewBox="0 100 100">
<polygon points="50,0 100,70 50,100 0,70"/>
</svg>
Il a pris la forme, mais la partie inférieure n'était pas incurvée.
Existe-t-il un moyen de créer cette forme afin qu'elle puisse être utilisée dans une page HTML?
html
css
svg
css-shapes
Persijn
la source
la source
[srcset]
ou l'<picture>
élément. Mieux encore, il suffit de<img src="tear.svg" alt="Teardrop"/>
picture
élément? Pas de support pour IE, pas de support pour les premières versions de Chrome, pas de support pour safari. Dois-je continuer?why are you scaling the image?
Eh bien, l'image peut apparaître floue sans que le développeur la redimensionne. Tout ce dont vous avez besoin pour cela est un zoom de navigateur. Dans mon cas, j'ai un écran HighDPI et beaucoup d'images floues. Donc, si vous pouvez éviter les images en utilisant SVG, allez-y.Réponses:
Approche SVG:
Vous pouvez facilement obtenir la double courbe avec un SVG en ligne et l'
<path/>
élément au lieu du<polygon/>
élément qui ne permet pas les formes courbes.L'exemple suivant utilise l'
<path/>
élément avec:Q
)A
)SVG est un excellent outil pour créer ce type de formes avec des courbes doubles. Vous pouvez consulter cet article sur les courbes doubles avec une comparaison SVG / CSS. Certains des avantages de l'utilisation de SVG dans ce cas sont:
La prise en charge du navigateur pour le SVG en ligne remonte à Internet Explorer 9. Voir canIuse pour plus d'informations.
la source
<svg width="100%" height="100%" viewBox="0 0 8 8" /> <path d="M4 1L3 4A1.2 2 0 1 0 5 4"/> </svg>
... cela remplira la zone que vous lui donnez, il peut donc faire des gouttes de pluie "grasses" ou "maigres" ... changer en hauteur / largeur fixe si nécessaired="..."
attribut est que vous n'avez plus la double courbe en haut de la goutte.<img />
dans le document hypertexte.Rayon de bordure de base
Vous pouvez le faire dans CSS relativement facilement en utilisant border-radius 'et les transformations. Votre CSS était juste un peu sorti.
Rayon de bordure avancé
Ce sera très similaire à ci-dessus mais lui donne un peu plus de forme.
la source
Votre principal problème avec votre code CSS était:
Ainsi, en «corrigeant» ces problèmes, vous généreriez:
Veuillez également noter que pour économiser sur la longueur CSS, vous pouvez réécrire vos propriétés border-radius dans:
cela pourrait être amélioré avec des pseudo-éléments comme indiqué dans ce violon
Alternatives
J'ai trouvé cela par Vinay Challuru sur codepen.
Veuillez noter qu'avec la logique ici, j'ai pu créer le SVG pour presque toutes les formes de construction possibles / etc. Par exemple, une sortie rapide était:
Afficher l'extrait de code
Il utilise un SVG et vous permet de modifier la forme de plusieurs façons, ayant la possibilité de modifier sa forme pour le résultat souhaité:
Afficher l'extrait de code
Version CSS
Bien que cela soit loin d'être terminé, vous pouvez également générer cette forme à l'aide de CSS.
Afficher l'extrait de code
Version SVG
Je dois savoir que SVG devrait être au sommet de cette réponse, cependant, j'aime un défi et voici donc une tentative avec SVG.
En modifiant les
path
valeurs, vous seriez en mesure de modifier la forme de votre conception de larme.la source
IMO cette forme nécessite une courbe lisse à beziers pour assurer la continuité de la courbe.
La goutte en question:
Pour la goutte en question,
Remarque : les courbes rouge et bleue sont deux courbes quadratiques différentes.
stroke-linejoin="miter"
, pour la partie supérieure pointue.Comme cette forme n'utilise que des
c
commandes successives , nous pouvons l'omettre.Voici l'extrait final:
TBH cependant , les courbes de réponse acceptées ne sont pas tout à fait continues.
Pour IE 5-8 (VML)
Fonctionne uniquement dans IE 5-8. VML utilise des commandes différentes de SVG . Par exemple. il utilise v pour les beziers cubiques relatifs .
Remarque: Cet extrait ne s'exécutera pas également dans IE 5-8. Vous devez créer un fichier html et l'exécuter directement dans le navigateur.
la source
Ou si la police de vos lecteurs la prend en charge, utilisez les caractères Unicode
GOUTTELETTES: 💧 (
💧
)ou
GOUTTELETE NOIRE: 🌢 (
🌢
)Échelle en conséquence!
la source
J'utiliserais personnellement un SVG pour cela. Vous pouvez créer des SVG dans la plupart des logiciels de graphiques vectoriels. Je recommanderais:
J'en ai créé un ci-dessous qui est un tracé de votre forme dans Illustrator.
la source
Toile HTML
C'est une option découverte jusqu'ici dans ce fil. Les commandes utilisées pour les dessins Canvas sont très similaires à SVG (et web-tiki mérite les crédits pour l'idée de base utilisée dans cette réponse).
La forme en question peut être créée à l'aide des propres commandes de courbe du canevas (Quadratique ou Bézier) ou de l'API Path. La réponse contient des exemples pour les trois méthodes.
La prise en charge du navigateur pour Canvas est assez bonne .
Utilisation de courbes quadratiques
Voici une version avancée avec remplissage dégradé et ombres. J'ai également inclus un
hover
effet sur la forme pour illustrer un inconvénient de Canvas par rapport à SVG. Le canevas est basé sur un raster (pixel) et par conséquent, il semble flou / pixellisé lorsqu'il est mis à l'échelle au-delà d'un certain point. La seule solution à cela serait de repeindre la forme à chaque redimensionnement du navigateur, ce qui est une surcharge.Afficher l'extrait de code
Utilisation des courbes de Bézier
Afficher l'extrait de code
Utilisation de l'API Path
Afficher l'extrait de code
Remarque: Comme mentionné dans ma réponse ici , l'API Path n'est pas encore prise en charge par IE et Safari.
Lectures complémentaires:
la source
J'ai également trouvé cela sur Codepen créé par l'utilisateur Ana Tudor en utilisant CSS et le
box-shadow
style et les équations paramétriques. Très simple, très peu de code. Et de nombreux navigateurs prennent en charge le style CSS3 Box-shadow:la source
Version CSS
Comme il y a pas mal de réponses ici, j'ai pensé pourquoi ne pas y ajouter une autre méthode. Cela utilise à la fois HTML et CSS pour créer la larme.
Cela vous permettra de changer la couleur de la bordure et de l'arrière-plan de la larme et de redimensionner la partie supérieure de celle-ci.
En utilisant un seul,
div
nous pouvons créer un cercle avecborder
etborder-radius
. Ensuite, en utilisant des pseudo-éléments (:before
&:after
), nous créons un triangle CSS plus ici , cela agira comme la pointe de la larme. En utilisant le:before
comme bordure, nous plaçons:after
sur le dessus avec une taille plus petite et la couleur d'arrière-plan souhaitée.Voici une démo de la larme avec une couleur de fond
Afficher l'extrait de code
C'est aussi simple que de mettre une couleur d'arrière-plan sur la couleur
div
et de la changer:after
bottom-border
. Pour modifier la bordure, vous devrez également changerdiv
la couleur de la bordure et la:before
couleur d'arrière - plan.la source
Il est assez facile de le faire avec SVG en utilisant simplement une ressource de conversion d'image telle que http://image.online-convert.com/convert-to-svg , qui a été utilisée pour créer ce qui suit:
la source
300.000000pt
et des métadonnées qui ne sont pas vraiment nécessairesSi vous choisissez d'utiliser SVG, vous devriez lire sur les chemins. Je suggère également un éditeur SVG.
la source
Voici quatre formes de larmes SVG progressivement plus simples:
la source