Bentuk CSS yang lebih baik menggunakan bentuk () – Bagian 3: Kurva

 – Beragampengetahuan
12 mins read

Bentuk CSS yang lebih baik menggunakan bentuk () – Bagian 3: Kurva – Beragampengetahuan

Jika Anda mengikuti, ini adalah artikel ketiga tentang seri CSS baru shape() Fungsi. Kami telah belajar cara menggambar garis dan busur, dan di bagian ketiga saya akan membahas curve Perintah – Perintah yang hilang yang perlu Anda ketahui untuk kontrol penuh shape() Fungsi. Sebenarnya ada lebih banyak perintah, tetapi Anda jarang membutuhkannya, dan Anda dapat dengan mudah memahaminya nanti dengan memeriksa dokumentasi.

Contents

ini curve Memesan

Dengan menentukan titik kontrol, perintah ini menambahkan kurva Bézier antara kedua titik. Kita dapat memiliki titik kontrol dan membuat kurva kuadratik atau dua titik kontrol dan membuat kurva kubik.

Bézier, kuadratik, kubik, titik kontrol? Apa? Lai

Bagi banyak dari Anda, definisi ini tidak jelas dan bahkan tidak berguna! Anda dapat mengambil beberapa menit untuk membaca tentang kurva Bézier, tetapi apakah itu benar -benar sepadan? Mungkin tidak, kecuali pekerjaan Anda adalah membuat bentuk sepanjang hari dan memiliki latar belakang yang kuat dalam geometri.

Kami sudah punya cubic-bezier() Sebagai fitur animasi yang longgar, tetapi jujur, siapa yang benar -benar mengerti cara kerjanya? Kami mengandalkan generator untuk mendapatkan kode atau membaca penjelasan “membosankan” yang kami lupa dalam dua menit. (Ngomong -ngomong, saya punya satu di sini!)

Jangan khawatir, posting ini tidak akan membosankan, karena saya terutama fokus pada contoh yang sebenarnya, melainkan kasus penggunaan sudut yang akan menjadi bentuk yang tidak teratur. Berikut adalah angka yang menggambarkan contoh kurva Bézier.

Bandingkan dua garis melengkung, satu dengan satu titik kontrol dan satu dengan dua titik kontrol.

Dot biru adalah titik awal dan titik akhir (kami menyebutnya A dan B), sedangkan titik hitam adalah titik kontrol. Dan perhatikan bahwa kurva bersinggungan dengan garis putus -putus yang ditunjukkan dengan warna merah.

Dalam artikel ini, saya hanya akan mempertimbangkan satu titik kontrol. Sintaks akan mengikuti pola berikut:

clip-path: shape(
  from Xa Ya, 
  curve to Xb Yb with Xc Yc
);

arc Perintah dan curve Memesan

Kami telah melihatnya di bagian 1 dan bagian 2 arc Perintah berguna untuk membuat tepi dan sudut melingkar, tetapi tidak semua kasing tertutup. Itulah mengapa Anda membutuhkan curve Memesan. Bagian yang sulit adalah mengetahui kapan harus menggunakan semua orang, dan jawabannya adalah “tergantung”. Tidak ada aturan umum, tetapi saran saya adalah terlebih dahulu melihat apakah mungkin (mudah) untuk digunakan arc. Jika tidak, maka Anda harus menggunakan curve.

Untuk beberapa bentuk kita dapat menggunakan dua perintah ini untuk mendapatkan hasil yang sama, yang merupakan titik awal yang baik bagi kita untuk memahami perintah curve Perintah dan bandingkan arc.

Ambil contoh berikut:

Ini kode untuk bentuk pertama:

.shape {
  clip-path: shape(from 0 0,
    arc to 100% 100% of 100% cw,
    line to 0 100%)
}

Untuk yang kedua, kami memiliki:

.shape {
  clip-path: shape(from 0 0,
    curve to 100% 100% with 100% 0,
    line to 0 100%)
}

ini arc Perintah itu membutuhkan jari -jari (100% Dalam hal ini), bagaimanapun curve Perintah membutuhkan titik kontrol (ya 100% 0 dalam contoh ini).

Dua bentuk melingkar yang tampaknya memiliki kurva yang sama, satu menggunakan busur dan yang lainnya menggunakan busur.

Sekarang, jika Anda melihat lebih dekat, Anda akan melihat bahwa kedua hasilnya tidak persis sama. Gunakan bentuk pertama arc Perintah ini membuat seperempat lingkaran, menggunakan curve Perintahnya sedikit berbeda. Jika Anda menempatkan keduanya di atas satu sama lain, Anda dapat dengan jelas melihat perbedaannya.

Ini menarik karena itu berarti kita dapat menggunakan siapa saja arc atau a curvetetapi hasilnya sedikit berbeda. Mana yang lebih baik, Anda bertanya? Saya akan mengatakan itu tergantung pada preferensi visual Anda dan bentuk yang Anda buat.

Di Bagian 1, kami menggunakan arc Perintah, tapi kita bisa menggunakannya curve.

Bisakah Anda menemukan bedanya? Hampir tidak terlihat, tetapi di sana.

Perhatikan bagaimana saya menggunakannya by Perintahnya sama dengan cara saya arctetapi kali ini kami memiliki titik kontrol, yang juga relatif. Bagian ini bisa membingungkan, jadi awasi yang berikutnya.

Pertimbangkan yang berikut:

shape(from Xa Ya, curve by Xb Yb with Xc Yc)

Ini berarti (Xb,Yb) Dan (Xc,Yc) Ini adalah koordinat relatif yang dihitung dari koordinat titik awal. Gunakan yang setara di atas to Perintahnya adalah:

shape(from Xa Ya, curve to (Xa + Xb) (Ya + Yb) with (Xa + Xc) (Yb + Yc))

Kita dapat mengubah referensi titik kontrol dengan menambahkan satu from menginstruksikan. Kita bisa menggunakannya start (nilai default), endatau origin.

shape(from Xa Ya, curve by Xb Yb with Xc Yc from end)

Di atas berarti bahwa titik kontrol sekarang akan mempertimbangkan titik akhir daripada titik awal. Hasilnya mirip dengan:

shape(from Xa Ya, curve to (Xa + Xb) (Ya + Yb) with (Xa + Xb + Xc) (Ya + Yb + Yc))

Jika Anda menggunakannya originreferensi akan menjadi asal, sehingga koordinat titik kontrol lebih absolut daripada relatif.

ini from Arahan dapat menambah kompleksitas pada kode dan perhitungan, jadi jangan ganggu diri sendiri. Ketahuilah itu ada untuk berjaga -jaga, tetapi tetap menggunakan nilai default.

Saya pikir sudah waktunya melakukan pekerjaan rumah pertama Anda! Mirip dengan latihan meja melingkar, cobalah untuk membuat bentuk jari -jari terbalik yang kami gunakan di Bagian 1 curve Alih-alih arc. Ini adalah dua versi untuk referensi Anda, tetapi jika Anda dapat mencoba melakukannya tanpa mengintip terlebih dahulu.

Mari kita gambar lebih banyak bentuk!

Sekarang kami memiliki gambaran yang baik curve Perintah, mari kita pertimbangkan bentuk yang lebih kompleks arc Ini tidak akan membantu kami melewati sudut -sudut, satu -satunya solusi adalah menggambar kurva. Mempertimbangkan bahwa setiap bentuk itu unik, saya akan fokus pada teknologi, bukan pada kode itu sendiri.

Tepi miring

Mari kita mulai dengan bentuk persegi panjang dengan tepi miring.

Bentuk persegi panjang miring dalam dua tahap, pertama dengan tepi tajam dan kemudian dengan tepi melengkung.

Mendapatkan bentuk di sebelah kiri sangat sederhana, tetapi bentuk di sebelah kanan agak rumit. Kita bisa menggunakan sederhana border-radiustetapi untuk tepi miring yang akan kami gunakan shape() dan dua curve Memesan.

Langkah pertama adalah menulis kode untuk bentuk tanpa sudut bulat (sudut kiri), yang sederhana karena kami hanya menggunakan line Memesan:

.shape {
  --s: 90px;  /* slant size */

  clip-path: 
    shape(from 0 0,
    line to calc(100% - var(--s)) 0,
    line to 100% 100%,
    line to 0 100%
    );
}

Kemudian, kami pergi di setiap sudut, mencoba melampirkannya dengan memodifikasi kode. Berikut adalah nomor yang menggambarkan teknologi yang ingin saya gunakan di setiap sudut.

Diagmiong dibagi menjadi tiga tahap bentuk persegi panjang melingkar, pertama dengan tepi tajam, kemudian titik untuk menunjukkan di mana kurva mengontrol titik, dan kemudian bentuk lengkap.

Kami mendefinisikan jarak, RKontrol jari -jari. Dari setiap sisi titik sudut, saya bergerak sepanjang jarak itu untuk membuat dua titik baru, dengan contoh merah di atas. Lalu, saya menggambar milik saya curve Ambil titik baru sebagai titik awal dan titik akhir. Titik sudut akan menjadi titik kontrol.

Kode menjadi:

.shape {
  --s: 90px;  /* slant size */

  clip-path: 
    shape(from 0 0,
    Line  to Xa Ya,
    curve to Xb Yb with calc(100% - var(--s)) 0,
    line to 100% 100%,
    line to 0 100%
    );
}

Perhatikan bagaimana curve Koordinat titik sudut digunakan with Instruksi, kami memiliki dua A dan B. baru

Sejauh ini, teknologinya tidak rumit. Untuk setiap titik sudut, Anda mengganti line Memesan line + curve Dimana perintahnya curve Perintah itu diulangi di titik lama with menginstruksikan.

Jika kami menerapkan logika yang sama ke sudut lain, kami akan mendapatkan yang berikut:

.shape {
  --s: 90px;  /* slant size */

  clip-path: 
    shape(from 0 0,
    line  to Xa Ya, 
    curve to Xb Yb with calc(100% - var(--s)) 0,
    line  to Xc Yc,
    curve to Xd Yd with 100% 100%,
    line to 0 100%
    );
}

Sekarang, kita perlu menghitung koordinat poin baru. Ini adalah bagian yang rumit karena tidak selalu sederhana dan mungkin memerlukan beberapa perhitungan yang kompleks. Bahkan jika saya menjelaskan tentang hal ini, logikanya juga berbeda untuk bentuk lain yang kami buat, jadi saya akan melewatkan bagian matematika dan memberi Anda kode akhir:

.box {
  --h: 200px; /* element height */
  --s: 90px;  /* slant size */
  --r: 20px;  /* radius */
  
  height: var(--h);
  border-radius: var(--r) 0 0 var(--r);
  --_a: atan2(var(--s), var(--h));
  clip-path: 
    shape(from 0 0,
    line  to calc(100% - var(--s) - var(--r)) 0,
    curve by calc(var(--r) * (1 + sin(var(--_a)))) 
              calc(var(--r) * cos(var(--_a)))
    with var(--r) 0,
    line  to calc(100% - var(--r) * sin(var(--_a))) 
              calc(100% - var(--r) * cos(var(--_a))),
    curve to calc(100% - var(--r)) 100%  with 100% 100%,
    line to 0 100%
    );
}

Saya tahu kodenya terlihat agak menakutkan, tetapi kabar baiknya adalah menggunakan variabel CSS, kodenya juga mudah dikendalikan. Jadi, bahkan jika matematika tidak mudah dikuasai, Anda tidak harus menghadapinya. Perlu dicatat bahwa saya perlu mengetahui ketinggian koordinat yang dapat menghitung, yang berarti solusinya tidak sempurna karena ketinggiannya adalah nilai tetap.

Kotak panah

Ini adalah bentuk yang sama, tetapi kali ini kami memiliki tiga sudut untuk digunakan curve Memesan.

Kode akhir masih rumit, tetapi saya mengikuti langkah yang sama. Saya akan mulai dari sekarang:

.shape {
  --s: 90px; 

  clip-path: 
    shape(from 0 0,
    /* corner #1 */
    line to calc(100% - var(--s)) 0,
    /* corner #2 */
    line to 100% 50%,
    /* corner #3 */
    line to calc(100% - var(--s)) 100%,

    line to 0 100%
    );
}

Lalu saya memodifikasinya menjadi:

.shape {
  --s: 90px; 

  clip-path: 
    shape(from 0 0,
    /* corner #1 */
    line  to Xa Ya
    curve to Xb Yb with calc(100% - var(--s)) 0,
    /* corner #2 */
    line  to Xa Ya
    curve to Xb Yb with 100% 50%,
    /* corner #3 */
    line  to Xa Yb
    curve to Xb Yb with calc(100% - var(--s)) 100%,

    line to 0 100%
    );
}

Akhirnya, saya menggunakan pena dan kertas untuk melakukan semua perhitungan.

Anda mungkin berpikir bahwa jika Anda tidak pandai matematika dan geometri, maka teknik ini tidak berguna, bukan? Tidak demikian, karena Anda masih dapat mengambil kode dan menggunakannya dengan mudah, karena dioptimalkan dengan variabel CSS. Juga, Anda tidak memiliki kewajiban untuk menjadi super akurat dan akurat. Anda dapat mengandalkan teknik yang disebutkan di atas dan menggunakan coba -coba untuk memperkirakan koordinat. Ini bisa membutuhkan waktu lebih sedikit daripada menyelesaikan semua matematika.

Poligon melingkar

Saya tahu Anda menunggu ini, bukan? Terima kasih untuk yang baru shape() Dan curve Perintah, kita sekarang dapat memiliki bentuk poligon melingkar!

Tiga bentuk poligonal melingkar, pertama di antaranya adalah Pentagon, segitiga kedua, dan segi delapan ketiga.

Berikut adalah implementasi saya menggunakan SASS di mana Anda dapat mengontrol rotasi jari -jari, jumlah sisi dan bentuknya:

Jika kita menghilangkan bagian geometris yang kompleks, loopnya sangat sederhana karena tergantung pada teknik yang sama line + curve Setiap sudut.

$n: 9; /* number of sides*/
$r: .2; /* control the radius [0 1] */
$a: 15deg; /* control the rotation */

.poly {
  aspect-ratio: 1;
  $m: ();
  @for $i from 0 through ($n - 1) {
    $m: append($m, line  to Xai Yai, comma);
    $m: append($m, curve to Xbi Ybi with Xci Yci, comma);
  } 
  clip-path: shape(#{$m});
}

Berikut adalah implementasi lain dari saya yang mendefinisikan variabel di CSS, bukan Sass:

Memiliki variabel di CSS sangat nyaman, terutama jika Anda ingin memiliki beberapa animasi. Berikut adalah contoh efek hover keren yang cocok untuk bentuk heksagonal:

Saya juga memperbarui generator online saya untuk menambahkan parameter radius. Jika Anda tidak terbiasa dengan Sass, Anda dapat dengan mudah menyalin kode CSS dari sana. Anda juga akan menemukan versi-hanya dan memotong versi!

Bentuk melingkar dengan enam sisi dan enam potongan bundar di sebelahnya.

sebagai kesimpulan

Kami sudah selesai curve Memesan? Mungkin tidak, tetapi kami memiliki gambaran yang baik tentang potensinya dan semua bentuk kompleks yang dapat kami gunakan. Adapun kode, saya tahu kami telah mencapai level yang tidak mudah. Saya bisa memperluas deskripsi dengan menguraikan matematika secara eksplisit shape() Lebih sulit dari sebelumnya.

Yang mengatakan, sebagian besar bentuk kode saya terus diperbarui dan dioptimalkan dalam koleksi online saya, sehingga Anda dapat dengan mudah mendapatkan kode untuk bentuk apa pun!

Jika Anda ingin menindaklanjuti artikel ini dengan baik, saya menulis artikel untuk Master Frontend curve Memesan.

Satu deretan bentuk spot, setiap gradien mulai dari oranye gelap hingga oranye terang hingga kiri ke kanan.

rencana pengembangan website



metode pengembangan website

jelaskan beberapa rencana untuk pengembangan website, proses pengembangan website, kekuatan dan kelemahan bisnis pengembangan website
, jasa pengembangan website, tahap pengembangan website, biaya pengembangan website

#Bentuk #CSS #yang #lebih #baik #menggunakan #bentuk #Bagian #Kurva

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *