Wie erstelle ich eine solche Form, um sie auf einer Webseite anzuzeigen?
Ich möchte keine Bilder verwenden, da diese beim Skalieren verschwommen werden
Ich habe es mit CSS versucht :
.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>
Das stellte sich als richtig beschissen heraus.
Und dann habe ich es mit SVG versucht:
<svg viewBox="0 100 100">
<polygon points="50,0 100,70 50,100 0,70"/>
</svg>
Es hat die Form bekommen, aber der untere Teil war nicht gekrümmt.
Gibt es eine Möglichkeit, diese Form zu erstellen, damit sie in einer HTML-Seite verwendet werden kann?
html
css
svg
css-shapes
Persijn
quelle
quelle
[srcset]
oder das<picture>
Element verwenden. Besser noch, verlinken Sie einfach auf ein SVG-Bild:<img src="tear.svg" alt="Teardrop"/>
picture
Element wirklich ? Keine Unterstützung für IE, keine Unterstützung für frühere Versionen von Chrome, keine Unterstützung für Safari. Soll ich weitermachen?why are you scaling the image?
Nun, das Bild kann verschwommen erscheinen, ohne dass der Entwickler es skaliert. Dazu benötigen Sie lediglich einen vergrößerten Browser. In meinem Fall habe ich einen HighDPI-Bildschirm und viele verschwommene Bilder. Also, ja, wenn Sie Bilder mit SVG vermeiden können, machen Sie es.Antworten:
SVG-Ansatz:
Sie können die Doppelkurve problemlos mit einem Inline-SVG und dem
<path/>
Element anstelle des<polygon/>
Elements erzielen, das keine gekrümmten Formen zulässt.Im folgenden Beispiel wird das
<path/>
Element mit verwendet:Q
)A
)SVG ist ein großartiges Werkzeug, um diese Art von Formen mit doppelten Kurven zu erstellen. Sie können diesen Beitrag über Doppelkurven mit einem SVG / CSS-Vergleich überprüfen . Einige der Vorteile der Verwendung von SVG in diesem Fall sind:
Die Browserunterstützung für Inline-SVG geht auf Internet Explorer 9 zurück. Weitere Informationen finden Sie unter canIuse .
quelle
<svg width="100%" height="100%" viewBox="0 0 8 8" /> <path d="M4 1L3 4A1.2 2 0 1 0 5 4"/> </svg>
... dies wird den Bereich füllen, den Sie ihm geben, so dass "fette" oder "dünne" Regentropfen entstehen können ... bei Bedarf auf feste Höhe / Breite wechselnd="..."
Attribut besteht darin, dass Sie die Doppelkurve nicht mehr oben im Drop haben.<img />
im Hypertext-Dokument.Grundlegender Randradius
Sie können dies in CSS relativ einfach mit Rahmenradius und Transformationen tun. Ihr CSS war nur ein bisschen raus.
Erweiterter Randradius
Dies wird sehr ähnlich zu oben sein, gibt ihm aber etwas mehr Form.
quelle
Ihr Hauptproblem mit Ihrem CSS-Code war:
Wenn Sie diese Probleme beheben, erhalten Sie Folgendes:
Um CSS-Länge zu sparen, können Sie Ihre Rahmenradius-Eigenschaften wie folgt umschreiben:
Dies könnte mit Pseudoelementen verbessert werden, wie in dieser Geige gezeigt
Alternativen
Ich habe das von Vinay Challuru gefunden auf Codepen.
Bitte beachten Sie, dass ich mit der Logik hier das SVG für nahezu jede mögliche Build-Form / etc. Erstellen konnte . Eine schnelle Ausgabe war zum Beispiel:
Code-Snippet anzeigen
Es verwendet ein SVG und ermöglicht es Ihnen, die Form auf verschiedene Arten zu ändern, wobei Sie die Form auf das gewünschte Ergebnis ändern können:
Code-Snippet anzeigen
CSS-Version
Obwohl dies noch lange nicht vollständig ist, können Sie diese Form möglicherweise auch mit CSS generieren.
Code-Snippet anzeigen
SVG-Version
Ich sollte wissen, dass SVG an der Spitze dieser Antwort stehen sollte, aber ich mag eine Herausforderung und hier ist ein Versuch mit SVG.
Wenn Sie die
path
Werte ändern, können Sie die Form Ihres Teardrop-Designs ändern.quelle
IMO erfordert diese Form glatte Kurven- Bezier, um die Kontinuität der Kurve zu gewährleisten.
Der fragliche Tropfen:
Für den fraglichen Tropfen
Hinweis : Rote und blaue Kurven sind zwei verschiedene quadratische Kurven.
stroke-linejoin="miter"
für den spitzen oberen Teil.Da diese Form nur aufeinanderfolgende
c
Befehle verwendet, können wir sie weglassen.Hier ist der letzte Ausschnitt:
TBH Die Kurven der akzeptierten Antwort sind jedoch nicht ganz kontinuierlich.
Für IE 5-8 (VML)
Funktioniert nur in IE 5-8. VML verwendet andere Befehle als SVG . Z.B. es verwendet v für relative kubische Bezier .
Hinweis: Dieses Snippet wird auch in IE 5-8 nicht ausgeführt. Sie müssen eine HTML-Datei erstellen und direkt im Browser ausführen.
quelle
Wenn die Schriftart Ihrer Zuschauer dies unterstützt, verwenden Sie die Unicode-Zeichen
TROPFEN: 💧 (
💧
)oder
SCHWARZER TROPFEN: 🌢 (
🌢
)Skalieren Sie entsprechend!
quelle
Ich persönlich würde dafür eine SVG verwenden. Sie können SVGs in den meisten Vektorgrafiken erstellen. Ich würde empfehlen:
Ich habe unten eine erstellt, die Ihre Form in Illustrator nachzeichnet.
quelle
HTML-Canvas
Dies ist eine Option, die in diesem Thread bisher nicht behandelt wurde. Die für Canvas-Zeichnungen verwendeten Befehle sind SVG sehr ähnlich (und Web-Tiki verdient die Credits für die in dieser Antwort verwendete Grundidee).
Die betreffende Form kann entweder mit Canvas-eigenen Kurvenbefehlen (Quadratic oder Bezier) oder mit der Pfad-API erstellt werden. Die Antwort enthält Beispiele für alle drei Methoden.
Die Browserunterstützung für Canvas ist recht gut .
Quadratische Kurven verwenden
Unten finden Sie eine erweiterte Version mit Verlaufsfüllung und Schatten. Ich habe auch einen
hover
Effekt auf die Form eingefügt, um einen Nachteil von Canvas im Vergleich zu SVG zu veranschaulichen. Canvas basiert auf Raster (Pixel) und sieht daher unscharf / pixelig aus, wenn es über einen bestimmten Punkt hinaus skaliert wird. Die einzige Lösung hierfür wäre, die Form bei jeder Größenänderung des Browsers neu zu zeichnen, was ein Overhead ist.Code-Snippet anzeigen
Bezierkurven verwenden
Code-Snippet anzeigen
Verwenden der Pfad-API
Code-Snippet anzeigen
Hinweis: Wie in meiner Antwort hier erwähnt , wird die Pfad-API von IE und Safari noch nicht unterstützt.
Weiterführende Literatur:
quelle
Ich fand dies auch auf Codepen, das von der Benutzerin Ana Tudor unter Verwendung von CSS und den
box-shadow
Stil- und Parametergleichungen erstellt wurde. Sehr einfacher, sehr kleiner Code. Und viele Browser unterstützen den CSS3-Box-Shadow-Stil:quelle
CSS-Version
Da es hier ein paar Antworten gibt, dachte ich mir, warum ich es nicht mit einer anderen Methode ergänzen sollte. Dies verwendet sowohl HTML als auch CSS , um die Träne zu erstellen.
Auf diese Weise können Sie die Farbe des Randes und des Hintergrunds der Träne ändern und auch die Größe des oberen Teils ändern.
Mit einem einzigen können
div
wir einen Kreis mitborder
und erstellenborder-radius
. Dann erstellen wir mit Pseudoelementen (:before
&:after
) ein CSS-Dreieck mehr hier , wird dies tunals die Spitze des Teardrop. Mit dem:before
als Rand platzieren wir:after
oben mit einer kleineren Größe und der gewünschten Hintergrundfarbe.Hier ist eine Demo der Träne mit einer Hintergrundfarbe
Code-Snippet anzeigen
Es ist so einfach wie das Aufbringen einer Hintergrundfarbe auf die
div
und die:after
bottom-border
Farbe in dieselbe zu ändern . Um den Rahmen zu ändern, müssen Sie auch die Rahmenfarbediv
und die:before
Hintergrundfarbe ändern .quelle
Mit SVG ist dies recht einfach, wenn Sie nur eine Bildkonvertierungsressource wie http://image.online-convert.com/convert-to-svg verwenden, mit der Folgendes erstellt wurde:
quelle
300.000000pt
und Metadaten, die nicht wirklich benötigt werdenWenn Sie sich für SVG entscheiden, sollten Sie sich über Pfade informieren. Ich würde auch einen SVG-Editor vorschlagen.
quelle
Hier sind vier zunehmend einfachere SVG-Tropfenformen:
quelle