Cara membuat bentuk & corak bergelombang dalam CSS
dan sejumlah besar perkiraan, tetapi ini boleh menjadi lebih kompleks apabila berurusan dengan corak gelombang. border-radius
Menggunakan penjana, anda dapat melihat bahawa kod CSS yang dihasilkan mengandungi hanya dua kecerunan dan satu harta CSS
- itu sahaja, dan anda boleh membuat pelbagai bentuk gelombang dan corak. Di samping itu, kita boleh mengawal saiz dan kelengkungan gelombang dengan mudah. mask
Artikel ini adalah susulan kepada artikel sebelumnya tentang mewujudkan pelbagai Zigzag, Range-Limited, Scalloped, dan Wavy Borders. Saya sangat mengesyorkan membaca artikel itu kerana ia menggunakan teknik yang sama yang diterangkan di sini, tetapi lebih terperinci.
Prinsip matematik di belakang gelombang
dengan tegas, tidak ada formula ajaib untuk membuat bentuk gelombang. Mana -mana bentuk dengan lengkung atas dan bawah boleh dipanggil gelombang, jadi kita tidak mengehadkan diri kita untuk pengiraan matematik yang kompleks. Sebaliknya, kami akan menggunakan asas geometri untuk menghasilkan semula gelombang.
mari kita mulakan dengan contoh mudah menggunakan dua bentuk bulat:
Kami mempunyai dua bulatan dengan jejari yang sama bersebelahan antara satu sama lain. Pernahkah anda melihat garis merah itu? Ia meliputi bahagian atas pusingan pertama dan separuh bawah pusingan kedua. Sekarang bayangkan anda mengambil garis itu dan ulangi.
kita telah melihat gelombang. Sekarang mari kita isi bahagian bawah (atau atas) untuk mendapatkan hasil berikut:
Lihat! Kami mendapat bentuk gelombang dan kami boleh menggunakan pembolehubah untuk mengawal jejari bulatan. Ini adalah salah satu gelombang paling mudah yang boleh kita buat dan yang saya tunjukkan dalam jawatan terdahulu saya.
mari kita tambahkan beberapa kerumitan dengan mengambil legenda pertama dan menggerakkan bulatan sedikit:
kita masih mempunyai dua kalangan dengan jejari yang sama, tetapi mereka tidak lagi sejajar secara mendatar. Dalam kes ini, garis merah tidak lagi meliputi separuh daripada kawasan setiap bulatan, tetapi kawasan yang lebih kecil. Kawasan ini terhad oleh garis merah bertitik. Garis ini melalui titik di mana dua lingkaran bertemu.
Sekarang ambil garis itu dan ulangi dan anda akan mendapat gelombang lain, yang lebih lancar.
saya rasa anda faham. Dengan mengawal kedudukan dan saiz bulatan, kita boleh membuat sebarang gelombang yang kita mahu. Kita juga boleh membuat pembolehubah untuk mereka, yang akan saya panggil P dan S masing -masing.
Anda mungkin menyedari bahawa dalam penjana dalam talian, kami menggunakan dua input untuk mengawal gelombang. Mereka dipetakan ke pembolehubah yang disebutkan di atas. S ialah "saiz gelombang" dan p ialah "kelengkungan gelombang".
Saya mentakrifkan p sebagai p = m*s, di mana m adalah pemboleh ubah yang anda sesuaikan apabila mengemas kini kelengkungan gelombang. Ini membolehkan kita sentiasa mengekalkan kelengkungan yang sama, walaupun kita mengemas kini S.
m boleh menjadi nilai antara 0 dan 2. 0 akan memberikan kes khas pertama kami di mana dua kalangan diselaraskan secara mendatar. 2 adalah nilai maksimum. Kita boleh menjadi lebih besar, tetapi selepas beberapa ujian, saya mendapati bahawa apa -apa nilai lebih besar daripada 2 akan menghasilkan bentuk rata yang buruk.
Jangan lupa jejari bentuk bulat kita! Ini juga boleh ditakrifkan menggunakan S dan P, seperti yang ditunjukkan di bawah:
<code>R = sqrt(P² + S²)/2 R = sqrt(m²*S² + S²)/2 R = S*sqrt(m² + 1)/2</code>
Apabila m sama dengan 0 (iaitu p adalah sama dengan 0), kita akan mempunyai r = s/2.
kita mempunyai segala yang kita perlukan untuk menukar semua ini menjadi kecerunan dalam CSS!
Buat kecerunan
Gelombang kami menggunakan bulatan, dan ketika datang ke kalangan, kita bercakap tentang kecerunan radial. Oleh kerana kedua -dua bulatan menentukan gelombang kami, kami akan menggunakan dua kecerunan radial secara logik.
kita akan bermula dengan kes khas di mana p adalah sama dengan 0. Ini adalah ilustrasi kecerunan pertama:
Kecerunan ini mewujudkan kelengkungan pertama semasa mengisi seluruh kawasan bawah - boleh dikatakan "air" gelombang.
<code>.wave { --size: 50px; mask: radial-gradient(var(--size) at 50% 0%, #0000 99%, red 101%) 50% var(--size)/calc(4 * var(--size)) 100% repeat-x; }</code>
--size
pembolehubah menentukan jejari dan saiz kecerunan radial. Jika kita membandingkannya dengan pembolehubah S, ia sama dengan s/2.
mari tambahkan kecerunan kedua sekarang:
Kecerunan kedua hanyalah bulatan untuk melengkapkan gelombang kami:
<code>radial-gradient(var(--size) at 50% var(--size), blue 99%, #0000 101%) calc(50% - 2*var(--size)) 0/calc(4 * var(--size)) 100%</code>
Jika anda melihat jawatan terdahulu, anda akan mendapati bahawa saya hanya mengulangi apa yang saya lakukan di sana.
Saya membaca dua artikel, tetapi konfigurasi kecerunan tidak sama.
Ini kerana kita boleh menggunakan konfigurasi kecerunan yang berbeza untuk mencapai hasil yang sama. Jika anda membandingkan dua konfigurasi, anda akan melihat penjajaran yang sedikit berbeza, tetapi silap mata adalah sama. Jika anda tidak biasa dengan kecerunan, ini boleh mengelirukan, tetapi jangan risau. Dengan beberapa latihan, anda akan terbiasa dengan mereka dan anda akan mendapati bahawa sintaks yang berbeza dapat menghasilkan hasil yang sama.
ini adalah kod lengkap untuk gelombang pertama kami:
<code>.wave { --size: 50px; mask: radial-gradient(var(--size) at 50% var(--size),#000 99%, #0000 101%) calc(50% - 2*var(--size)) 0/calc(4 * var(--size)) 100%, radial-gradient(var(--size) at 50% 0px, #0000 99%, #000 101%) 50% var(--size)/calc(4 * var(--size)) 100% repeat-x; }</code>
Sekarang mari kita ambil kod ini dan laraskannya supaya kami memperkenalkan pembolehubah yang boleh digunakan sepenuhnya untuk membuat gelombang yang kami inginkan. Seperti yang kita lihat di bahagian sebelumnya, helah utama adalah untuk menggerakkan bulatan supaya mereka tidak lagi sejajar, jadi mari kita mengemas kini kedudukan setiap bulatan. Kami bergerak yang pertama dan yang kedua ke bawah.
kod kami akan kelihatan seperti ini:
<code>.wave { --size: 50px; --p: 25px; mask: radial-gradient(var(--size) at 50% calc(var(--size) + var(--p)), #000 99%, #0000 101%) calc(50% - 2*var(--size)) 0/calc(4 * var(--size)) 100%, radial-gradient(var(--size) at 50% calc(-1*var(--p)), #0000 99%, #000 101%) 50% var(--size) / calc(4 * var(--size)) 100% repeat-x; }</code>
Saya memperkenalkan pembolehubah --p
baru untuk menentukan kedudukan pusat setiap bulatan. Kecerunan pertama menggunakan 50% calc(-1*var(--p))
, jadi pusatnya bergerak ke atas, sementara kecerunan kedua menggunakan calc(var(--size) var(--p))
untuk memindahkannya ke bawah.
demonstrasi lebih baik daripada seribu perkataan:
Lingkaran tidak sejajar atau menyentuh satu sama lain. Kami memisahkan mereka jauh tanpa mengubah jejari, jadi kami kehilangan gelombang. Tetapi kita boleh menyelesaikan masalah ini dengan mengira jejari baru menggunakan kaedah matematik yang sama yang digunakan sebelum ini. Ingat r = sqrt (p² s²)/2. Dalam kes kami, --size
adalah sama dengan s/2; Oleh itu, jarak antara titik pusat mereka adalah dua kali setinggi --p
: --p
<code>R = sqrt(P² + S²)/2 R = sqrt(m²*S² + S²)/2 R = S*sqrt(m² + 1)/2</code>
Gelombang kami kembali! Mari masukkan persamaan ke dalam CSS kami:
<code>.wave { --size: 50px; mask: radial-gradient(var(--size) at 50% 0%, #0000 99%, red 101%) 50% var(--size)/calc(4 * var(--size)) 100% repeat-x; }</code>
<code>radial-gradient(var(--size) at 50% var(--size), blue 99%, #0000 101%) calc(50% - 2*var(--size)) 0/calc(4 * var(--size)) 100%</code>
. Tidak perlu mencuba dan melakukannya - anda hanya perlu mengemas kini dua pembolehubah! mask
Bagaimana jika kita mahu gelombang bergerak ke arah yang lain, kita mengisi "langit" dan bukannya "air"? Percayalah atau tidak, kita hanya perlu mengemas kini dua nilai:
<code>.wave { --size: 50px; mask: radial-gradient(var(--size) at 50% var(--size),#000 99%, #0000 101%) calc(50% - 2*var(--size)) 0/calc(4 * var(--size)) 100%, radial-gradient(var(--size) at 50% 0px, #0000 99%, #000 101%) 50% var(--size)/calc(4 * var(--size)) 100% repeat-x; }</code>
kita mungkin mempertimbangkan menggunakan sintaks yang lebih mesra nilai kata kunci untuk memudahkannya:
<code>.wave { --size: 50px; --p: 25px; mask: radial-gradient(var(--size) at 50% calc(var(--size) + var(--p)), #000 99%, #0000 101%) calc(50% - 2*var(--size)) 0/calc(4 * var(--size)) 100%, radial-gradient(var(--size) at 50% calc(-1*var(--p)), #0000 99%, #000 101%) 50% var(--size) / calc(4 * var(--size)) 100% repeat-x; }</code>
dan left
untuk menentukan tepi dan offset. Secara lalai, penyemak imbas lalai ke bottom
dan left
- itulah sebabnya kami menggunakan 100% untuk memindahkan elemen ke bahagian bawah. Kami sebenarnya memindahkannya 100% dari atas, jadi ia sebenarnya sama dengan mengatakan bahagian bawah. Lebih mudah dibaca daripada matematik! top
dengan bottom
-dan sebaliknya -untuk mengubah arah gelombang. top
<code>R = sqrt(var(--size) * var(--size) + var(--p) * var(--p))</code>
bagaimana dengan sisi kiri dan kanan?Ini adalah kerja rumah anda! Ambil kesempatan daripada apa yang kami lakukan di bahagian atas dan bawah dan cuba mengemas kini nilai untuk mendapatkan nilai di sebelah kanan dan kiri. Jangan risau, mudah, satu -satunya perkara yang perlu anda lakukan ialah menukar nilai.
Jika anda mempunyai masalah, anda boleh menggunakan penjana dalam talian untuk menyemak kod dan menggambarkan hasilnya.
... (kandungan yang tinggal adalah serupa dengan teks asal, kecuali bahasa dan ekspresi diselaraskan, dan gambar dan blok kod dikekalkan)
Atas ialah kandungan terperinci Cara membuat bentuk & corak bergelombang dalam CSS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Sekiranya anda baru -baru ini mula bekerja dengan GraphQL, atau mengkaji semula kebaikan dan keburukannya, anda tidak akan ragu -ragu mendengar perkara seperti "Graphql tidak menyokong caching" atau

API Peralihan Svelte menyediakan cara untuk menghidupkan komponen apabila mereka memasuki atau meninggalkan dokumen, termasuk peralihan svelte adat.

Berapa banyak masa yang anda habiskan untuk merancang persembahan kandungan untuk laman web anda? Semasa anda menulis catatan blog baru atau membuat halaman baru, adakah anda memikirkan

Dengan pendakian harga bitcoin baru -baru ini lebih dari 20k $ USD, dan baru -baru ini melanggar 30k, saya fikir ia patut mengambil menyelam yang mendalam kembali ke dalam mewujudkan Ethereum

Artikel ini membincangkan menggunakan CSS untuk kesan teks seperti bayang -bayang dan kecerunan, mengoptimumkannya untuk prestasi, dan meningkatkan pengalaman pengguna. Ia juga menyenaraikan sumber untuk pemula. (159 aksara)

Perintah NPM menjalankan pelbagai tugas untuk anda, sama ada sebagai satu-satunya atau proses berjalan terus untuk perkara seperti memulakan pelayan atau menyusun kod.

Tidak kira tahap tahap anda sebagai pemaju, tugas yang kami selesaikan -sama ada besar atau kecil -membuat kesan besar dalam pertumbuhan peribadi dan profesional kami.

Saya hanya berbual dengan Eric Meyer pada hari yang lain dan saya teringat cerita Eric Meyer dari tahun -tahun pembentukan saya. Saya menulis catatan blog mengenai kekhususan CSS, dan
