Jak utworzyć taki kształt, aby wyświetlał się na stronie internetowej?
Nie chcę używać obrazów, ponieważ byłyby rozmyte podczas skalowania
Próbowałem z 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>
To się naprawdę spieprzyło.
A potem spróbowałem z SVG:
<svg viewBox="0 100 100">
<polygon points="50,0 100,70 50,100 0,70"/>
</svg>
Przybierał kształt, ale dolna część nie była zakrzywiona.
Czy istnieje sposób na utworzenie tego kształtu, aby można go było używać na stronie HTML?
html
css
svg
css-shapes
Persijn
źródło
źródło
[srcset]
lub<picture>
elementu. Jeszcze lepiej, po prostu link do obrazu<img src="tear.svg" alt="Teardrop"/>
picture
element? Brak obsługi IE, brak obsługi wczesnych wersji Chrome, brak wsparcia dla safari. Powinienem kontynuować?why are you scaling the image?
Cóż, obraz może wydawać się rozmazany bez skalowania go przez programistę. Wszystko, czego potrzebujesz, to powiększenie przeglądarki. W moim przypadku mam ekran HighDPI i mnóstwo rozmytych obrazów. Tak, jeśli możesz uniknąć obrazów za pomocą SVG, idź do niego.Odpowiedzi:
Podejście SVG:
Podwójną krzywą można łatwo osiągnąć za pomocą wbudowanego pliku SVG i
<path/>
elementu zamiast<polygon/>
elementu, który nie pozwala na zakrzywione kształty.W poniższym przykładzie użyto
<path/>
elementu z:Q
)A
)SVG jest doskonałym narzędziem do tworzenia tego rodzaju kształtów z podwójnymi krzywymi. Możesz sprawdzić ten post na temat podwójnych krzywych za pomocą porównania SVG / CSS. Niektóre zalety używania SVG w tym przypadku to:
Obsługa wbudowanych plików SVG wraca do przeglądarki Internet Explorer 9. Aby uzyskać więcej informacji, zobacz canIuse .
źródło
<svg width="100%" height="100%" viewBox="0 0 8 8" /> <path d="M4 1L3 4A1.2 2 0 1 0 5 4"/> </svg>
... wypełni to obszar, który mu dasz, więc może sprawić, że „tłuste” lub „chude” krople deszczu ... zmienią się na stałą wysokość / szerokość, jeśli to konieczned="..."
atrybucie polega na tym, że nie masz już podwójnej krzywej na górze kropli.<img />
w dokumencie hipertekstowym.Podstawowy promień granicy
Możesz to zrobić w CSS stosunkowo łatwo, używając promienia granicy i transformacji. Twój CSS był tylko trochę niedostępny.
Zaawansowany promień obramowania
Będzie to bardzo podobne do powyższego, ale nadaje mu nieco więcej kształtu.
źródło
Twoim głównym problemem z kodem CSS było:
Tak więc, „naprawiając” te problemy, można wygenerować:
Pamiętaj również, aby zaoszczędzić na długości CSS, możesz ponownie zapisać swoje właściwości promienia granicy do:
można to ulepszyć pseudoelementami, jak pokazano w tym skrzypce
Alternatywy
Znalazłem to przez Vinay Challuru na codepen.
Zauważ, że dzięki logice tutaj byłem w stanie stworzyć SVG do prawie każdego możliwego kształtu kompilacji / etc. Na przykład szybkie wyjście to:
Pokaż fragment kodu
Korzysta z SVG i pozwala zmieniać kształt na wiele sposobów, mając możliwość zmiany kształtu do pożądanego rezultatu:
Pokaż fragment kodu
Wersja CSS
Chociaż nie jest to jeszcze ukończone, możesz również wygenerować ten kształt za pomocą CSS.
Pokaż fragment kodu
Wersja SVG
Powinienem wiedzieć, że SVG powinien znajdować się na szczycie tej odpowiedzi, jednak lubię wyzwania, więc oto próba z SVG.
Zmieniając
path
wartości, będziesz mógł zmienić kształt swojego projektu łezki.źródło
IMO ten kształt wymaga gładkiego zakrzywienia krzywej w stosunku do ramek, aby zapewnić ciągłość krzywej.
Spadek, o którym mowa:
W przypadku kropli, o której mowa,
Uwaga : Krzywe czerwone i niebieskie to dwie różne krzywe kwadratowe.
stroke-linejoin="miter"
, dla spiczastej górnej części.Ponieważ ten kształt używa tylko kolejnych
c
poleceń, możemy go pominąć.Oto ostatni fragment:
TBH jednak , krzywe akceptowanych odpowiedzi nie są ciągłe.
Dla IE 5-8 (VML)
Działa tylko w IE 5-8. VML używa innych poleceń niż SVG . Na przykład. używa v dla względnych sześciennych Beziers .
Uwaga: ten fragment kodu również nie będzie działał w IE 5-8. Musisz utworzyć plik HTML i uruchomić go bezpośrednio w przeglądarce.
źródło
Lub jeśli czcionka przeglądarki obsługuje tę czcionkę, użyj znaków Unicode
DROPLET: 💧 (
💧
)lub
CZARNA KROPKA: 🌢 (
🌢
)Skaluj odpowiednio!
źródło
Osobiście użyłbym do tego SVG. Pliki SVG można tworzyć w większości programów do grafiki wektorowej. Poleciłbym:
Zrobiłem jeden poniżej, który jest śledzeniem twojego kształtu w programie Illustrator.
źródło
HTML Canvas
Jest to opcja odkryta do tej pory w tym wątku. Polecenia używane do rysunków Canvas są bardzo podobne do SVG (a web-tiki zasługuje na uznanie za podstawowy pomysł użyty w tej odpowiedzi).
Kształt, o którym mowa, można utworzyć za pomocą poleceń własnej krzywej obszaru roboczego (Quadratic lub Bezier) lub interfejsu API ścieżki. Odpowiedź zawiera przykłady wszystkich trzech metod.
Obsługa przeglądarki Canvas jest całkiem dobra .
Korzystanie z krzywych kwadratowych
Poniżej znajduje się wersja zaawansowana z wypełnieniem gradientowym i cieniami. Uwzględniłem również
hover
wpływ na kształt, aby zilustrować jedną wadę Canvas w porównaniu do SVG. Płótno jest oparte na rastrze (pikselach) i dlatego wyglądałoby na rozmazane / pikselowane, gdy skalowane jest poza określony punkt. Jedynym rozwiązaniem byłoby odmalowanie kształtu przy każdej zmianie rozmiaru przeglądarki, co jest narzutem.Pokaż fragment kodu
Korzystanie z krzywych Beziera
Pokaż fragment kodu
Korzystanie ze ścieżki API
Pokaż fragment kodu
Uwaga: Jak wspomniano w mojej odpowiedzi tutaj , interfejs API ścieżki nie jest jeszcze obsługiwany przez IE i Safari.
Dalsza lektura:
źródło
Znalazłem to również na Codepen wykonanej przez użytkownika Ana Tudor przy użyciu CSS oraz
box-shadow
równań stylu i parametrycznych. Bardzo prosty, bardzo mało kodu. Wiele przeglądarek obsługuje styl CSS3 Box-shadow:źródło
Wersja CSS
Ponieważ jest tu sporo odpowiedzi, pomyślałem, dlaczego nie dodać do niego innej metody. Wykorzystuje zarówno HTML, jak i CSS do utworzenia łezki.
Umożliwi to zmianę koloru obramowania i tła łzy, a także zmianę rozmiaru jej górnej części.
Za pomocą jednego
div
możemy stworzyć okrąg za pomocąborder
iborder-radius
. Następnie przy użyciu elementów pseudo (:before
&:after
) możemy utworzyć trójkąt CSS bardziej tutaj , to będzie działać jako końcówki łzy. Używając:before
jako obramowania, umieszczamy:after
na górze mniejszy rozmiar i pożądany kolor tła.Oto demonstracja łzy z kolorem tła
Pokaż fragment kodu
Jest to tak proste, jak nałożenie koloru tła na
div
i zmianę:after
bottom-border
tego samego koloru. Aby zmienić ramkę, musisz również zmienićdiv
kolor ramki i:before
kolor tła.źródło
Jest to dość łatwe w SVG, po prostu za pomocą zasobu do konwersji obrazów, takiego jak http://image.online-convert.com/convert-to-svg , który został użyty do utworzenia następujących elementów:
źródło
300.000000pt
metadane, które tak naprawdę nie są potrzebneJeśli zdecydujesz się użyć SVG, powinieneś przeczytać na ścieżkach. Sugerowałbym również edytor SVG.
źródło
Oto cztery stopniowo prostsze kształty łez SVG:
źródło