Bagaimana cara membuat bentuk seperti ini untuk ditampilkan di halaman web?
Saya tidak ingin menggunakan gambar karena gambar akan menjadi kabur pada penskalaan
Saya mencoba dengan 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>
Ternyata ternyata benar-benar kacau.
Dan kemudian saya mencoba dengan SVG:
<svg viewBox="0 100 100">
<polygon points="50,0 100,70 50,100 0,70"/>
</svg>
Itu memang mendapatkan bentuk, tetapi bagian bawah tidak melengkung.
Apakah ada cara untuk membuat bentuk ini sehingga dapat digunakan di halaman HTML?
html
css
svg
css-shapes
Persijn
sumber
sumber
[srcset]
atau<picture>
elemen. Lebih baik lagi, cukup tautkan ke gambar svg:<img src="tear.svg" alt="Teardrop"/>
picture
elemen? Tidak ada dukungan untuk IE, tidak ada dukungan untuk versi awal Chrome, tidak ada dukungan untuk safari. Haruskah saya melanjutkan?why are you scaling the image?
Nah, gambarnya bisa terlihat buram tanpa dev menskalakannya. Yang Anda butuhkan untuk itu adalah memperbesar browser. Dalam kasus saya, saya memiliki layar HighDPI dan banyak gambar buram. Jadi, ya, jika Anda dapat menghindari gambar menggunakan SVG, lakukan saja.Jawaban:
Pendekatan SVG:
Anda dapat mencapai kurva ganda dengan mudah dengan SVG sebaris dan
<path/>
elemen, bukan<polygon/>
elemen yang tidak memungkinkan bentuk melengkung.Contoh berikut menggunakan
<path/>
elemen dengan:Q
)A
)SVG adalah alat yang hebat untuk membuat bentuk semacam ini dengan kurva ganda. Anda dapat memeriksa posting ini tentang kurva ganda dengan perbandingan SVG / CSS. Beberapa keuntungan menggunakan SVG dalam hal ini adalah:
Dukungan browser untuk inline SVG kembali ke Internet Explorer 9. Lihat canIuse untuk informasi lebih lanjut.
sumber
<svg width="100%" height="100%" viewBox="0 0 8 8" /> <path d="M4 1L3 4A1.2 2 0 1 0 5 4"/> </svg>
... ini akan mengisi area yang Anda berikan, sehingga dapat membuat hujan "gemuk" atau "kurus" ... ubah ke ketinggian / lebar tetap jika perlud="..."
atribut adalah bahwa Anda tidak memiliki kurva ganda di bagian atas drop lagi.<img />
dalam dokumen hypertext.Basic Border-Radius
Anda dapat melakukan ini di dalam CSS dengan relatif mudah menggunakan batas-jari dan transformasi. CSS Anda hanya sedikit keluar.
Radius Perbatasan Lanjutan
Ini akan sangat mirip dengan di atas tetapi memberikan bentuk yang sedikit lebih.
sumber
Masalah utama Anda dengan kode CSS Anda adalah:
Jadi, dengan 'memperbaiki' masalah ini, Anda akan menghasilkan:
Harap perhatikan juga untuk menghemat panjang CSS, Anda dapat menulis ulang properti radius batas Anda ke:
ini dapat ditingkatkan dengan elemen semu seperti yang ditunjukkan dalam biola ini
Alternatif
Saya menemukan ini oleh Vinay Challuru di codepen.
Harap dicatat bahwa dengan logika di sini, saya dapat membuat SVG untuk hampir semua bentuk build yang mungkin / etc. Misalnya, output cepat adalah:
Tampilkan cuplikan kode
Itu menggunakan SVG dan memungkinkan Anda untuk mengubah bentuk dalam berbagai cara, memiliki kemampuan untuk mengubah bentuknya ke hasil yang diinginkan:
Tampilkan cuplikan kode
Versi CSS
Meskipun ini jauh dari selesai, Anda mungkin juga dapat menghasilkan bentuk ini menggunakan CSS.
Tampilkan cuplikan kode
Versi SVG
Saya harus tahu bahwa SVG harus di atas jawaban ini, namun, saya suka tantangan dan jadi di sini ada upaya dengan SVG.
Mengubah
path
nilai, Anda akan dapat mengubah bentuk desain tetesan air mata Anda.sumber
IMO bentuk ini membutuhkan beziers kurva- halus untuk memastikan kontinuitas kurva.
Pertanyaan drop:
Untuk pertanyaan yang diajukan,
Catatan : Kurva merah dan biru adalah dua kurva kuadratik yang berbeda.
stroke-linejoin="miter"
, untuk bagian atas yang runcing.SEBAGAI bentuk ini hanya menggunakan
c
perintah yang berurutan , kita dapat menghilangkannya.Ini cuplikan terakhir:
Namun TBH , kurva jawaban yang diterima tidak cukup kontinu.
Untuk IE 5-8 (VML)
Hanya berfungsi di IE 5-8. VML menggunakan perintah yang berbeda dari SVG . Misalnya. ia menggunakan v untuk bezel kubik relatif .
Catatan: Cuplikan ini tidak akan berjalan di IE 5-8 juga. Anda perlu membuat file html dan menjalankannya langsung di browser.
sumber
Atau jika font pemirsa Anda mendukungnya, gunakan karakter Unicode
DROPLET: 💧 (
💧
)atau
DROPLET HITAM: 🌢 (
🌢
)Skala sesuai!
sumber
Saya pribadi menggunakan SVG untuk ini. Anda dapat membuat SVG di sebagian besar perangkat lunak grafik vektor. Saya akan merekomendasikan:
Saya telah membuat satu di bawah ini yang merupakan penelusuran bentuk Anda di Illustrator.
sumber
Kanvas HTML
Ini adalah opsi yang belum ditemukan di utas ini sejauh ini. Perintah yang digunakan untuk gambar Canvas sangat mirip dengan SVG (dan web-tiki layak mendapatkan kredit untuk ide dasar yang digunakan dalam jawaban ini).
Bentuk yang dimaksud dapat dibuat menggunakan perintah kurva kanvas sendiri (Kuadratik atau Bezier) atau Path API. Jawabannya berisi contoh untuk ketiga metode.
Dukungan browser untuk Canvas cukup bagus .
Menggunakan Kurva Quadratic
Di bawah ini adalah versi lanjutan dengan fill gradien dan bayangan. Saya juga menyertakan
hover
efek pada bentuk untuk menggambarkan satu kelemahan Canvas jika dibandingkan dengan SVG. Kanvas berbasis raster (pixel) dan karenanya akan terlihat buram / pixelated ketika ditingkatkan di luar titik tertentu. Satu-satunya solusi untuk itu adalah mengecat ulang bentuk pada setiap ukuran browser yang merupakan overhead.Tampilkan cuplikan kode
Menggunakan Bezier Curves
Tampilkan cuplikan kode
Menggunakan Path API
Tampilkan cuplikan kode
catatan: Seperti yang disebutkan dalam jawaban saya di sini , Path API belum didukung oleh IE dan Safari.
Bacaan lebih lanjut:
sumber
Saya juga menemukan ini pada Codepen yang dibuat oleh pengguna Ana Tudor menggunakan CSS dan
box-shadow
persamaan gaya dan parametrik. Sangat sederhana, kode yang sangat sedikit. Dan banyak browser mendukung gaya Box-shadow CSS3:sumber
Versi CSS
Karena ada beberapa jawaban yang adil di sini saya pikir mengapa tidak menambahkannya dengan metode lain. Ini menggunakan HTML dan CSS untuk membuat tetesan air mata.
Ini akan memungkinkan Anda untuk mengubah warna perbatasan dan latar belakang tetesan air mata dan juga ukuran ulang bagian atas itu.
Menggunakan satu
div
kita dapat membuat lingkaran denganborder
danborder-radius
. Kemudian menggunakan elemen pseudo (:before
&:after
) kita membuat segitiga CSS lebih lanjut di sini , ini akan bertindak sebagai ujung dari tetesan air mata. Menggunakan:before
sebagai batas kita letakkan:after
di atas dengan ukuran yang lebih kecil dan warna latar yang diinginkan.Berikut ini adalah demo dari titisan air mata dengan warna latar belakang
Tampilkan cuplikan kode
Ini sesederhana menempatkan warna latar belakang ke
div
dan mengubah:after
bottom-border
warna menjadi sama. Untuk mengubah batas, Anda juga perlu mengubahdiv
warna batas dan:before
warna latar.sumber
Sangat mudah untuk melakukan ini dengan SVG dengan hanya menggunakan sumber konversi gambar seperti http://image.online-convert.com/convert-to-svg , yang digunakan untuk membuat yang berikut:
sumber
300.000000pt
dan metadata yang tidak benar-benar diperlukanJika Anda memilih untuk menggunakan SVG Anda harus membaca di jalur. Saya juga menyarankan editor SVG.
sumber
Berikut adalah empat bentuk teardrop SVG yang semakin sederhana:
sumber