Rumah > hujung hadapan web > tutorial css > Meneroka CSS Paint API: Sempadan Poligon

Meneroka CSS Paint API: Sempadan Poligon

Joseph Gordon-Levitt
Lepaskan: 2025-03-20 09:47:10
asal
556 orang telah melayarinya

Meneroka CSS Paint API: Sempadan Polygon

Mewujudkan bentuk yang rumit dengan clip-path adalah mudah, tetapi menambah sempadan memberikan cabaran yang berterusan. CSS tidak mempunyai penyelesaian yang mantap, sering memerlukan penyelesaian yang rumit. Artikel ini menunjukkan penyelesaian menggunakan API cat CSS.

Siri Eksplorasi API CSS Cat CSS ini berterusan:

  • Bahagian 1: Kesan Pemecahan Imej
  • Bahagian 2: Animasi Gumpalan
  • Bahagian 3: Sempadan Polygon (artikel semasa)
  • Bahagian 4: Bentuk Bulat

Butiran artikel ini mewujudkan sempadan poligon. Ingat, teknik ini kini disokong hanya dalam pelayar berasaskan kromium (Chrome, Edge, Opera). Semak Caniuse untuk maklumat keserasian terkini.

Kod ini tetap ringkas dan mudah disesuaikan, memerlukan hanya pelarasan pembolehubah kecil untuk mengubah bentuknya.

Konsep teras

Sempadan poligon dicapai dengan menggabungkan clip-path dan topeng tersuai yang dihasilkan dengan API cat:

  1. Mulakan dengan segi empat tepat standard.
  2. Sapukan clip-path untuk membentuknya menjadi poligon.
  3. Sapukan topeng tersuai untuk membuat sempadan poligon.

Struktur CSS

CSS untuk langkah clip-path adalah:

1

2

3

4

5

6

7

8

9

.box {

  --Path: 50% 0,100% 100%, 0 100%;

 

  Lebar: 200px;

  Ketinggian: 200px;

  Latar Belakang: Merah;

  paparan: blok sebaris;

  Clip-Path: Polygon (var (-Path));

}

Salin selepas log masuk

Kuncinya ialah pembolehubah CSS --path . Kedua-dua clip-path dan topeng menggunakan pembolehubah ini untuk parameter yang konsisten.

Kod CSS lengkap menjadi:

1

2

3

4

5

6

7

8

9

10

11

.box {

  --Path: 50% 0,100% 100%, 0 100%;

  -Border: 5px;

 

  Lebar: 200px;

  Ketinggian: 200px;

  Latar Belakang: Merah;

  paparan: blok sebaris;

  Clip-Path: Polygon (var (-Path));

  -Webkit-mask: cat (polygon-sempadan);

}

Salin selepas log masuk

Selain clip-path , topeng tersuai digunakan, dan --border mengawal ketebalan sempadan. CSS tetap mudah dan generik, menonjolkan kemudahan penggunaan API cat.

Pelaksanaan JavaScript

Rujuk Bahagian 1 siri ini untuk pemahaman yang lebih baik mengenai struktur API cat.

Kod JavaScript paint() Fungsi:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

const points = properties.get ('-Path'). ToString (). Split (',');

const b = parsefloat (properties.get ('-sempadan'). nilai);

const w = size.width;

const h = size.height;

 

const cc = function (x, y) {

  // ...

}

 

var p = mata [0] .trim (). split ("");

p = cc (p [0], p [1]);

 

ctx.beginpath ();

ctx.moveto (p [0], p [1]);

untuk (var i = 1; i <points.length i p="mata" .trim split ctx.lineto ctx.closepath ctx.linewidth="2" b ctx.strokestyle="'Black';" ctx.stroke><p> Kod ini membaca pembolehubah <code>--path</code> , mengubahnya menjadi array titik, dan kemudian menarik poligon menggunakan <code>moveTo</code> dan <code>lineTo</code> . Poligon ini mencerminkan poligon <code>clip-path</code> . Strok mencipta sempadan; Pengisian bentuknya telus.</p><p> Mengubah laluan dan ketebalan membolehkan sempadan poligon yang pelbagai. Kecerunan dan imej boleh menggantikan warna pepejal kerana penggunaan harta <code>background</code> CSS.</p><p> Untuk menggabungkan kandungan, elemen pseudo diperlukan untuk mengelakkan keratan. Hartanah topeng dipindahkan ke elemen pseudo, manakala <code>clip-path</code> kekal pada elemen utama.</p><h3> Soalan yang sering ditanya</h3><p> Beberapa soalan umum mengenai skrip yang disediakan ditangani di bawah.</p><h4> Apakah fungsi <code>cc()</code> ?</h4><p> Fungsi ini menukarkan koordinat titik (peratusan atau nilai piksel) ke dalam nilai piksel yang boleh digunakan dalam elemen kanvas.</p><pre class="brush:php;toolbar:false"> const cc = function (x, y) {

  var fx = 0, fy = 0;

  jika (x.indexof ('%')> -1) {

    fx = (parsefloat (x)/100)*w;

  } else if (x.indexof ('px')> -1) {

    fx = parsefloat (x);

  }

  jika (y.indexof ('%')> -1) {

     FY = (parsefloat (y)/100)*h;

  } else if (y.indexof ('px')> -1) {

    FY = parsefloat (y);

  }

  kembali [fx, fy];

}

Salin selepas log masuk

Mengapa menggunakan clip-path jika topeng sudah klip?

Menggunakan hanya topeng membawa kepada isu -isu dengan penjajaran strok dan kawasan yang boleh dibersihkan. clip-path menyelesaikan masalah ini.

Mengapa menggunakan @property dengan nilai sempadan?

@property mendaftarkan harta tersuai, menentukan jenisnya (dalam kes ini,<length></length> ), membolehkan pengiktirafan dan pengendalian penyemak imbas sebagai jenis yang sah, bukan hanya rentetan. Ini membolehkan pelbagai unit panjang.

Bagaimana dengan pembolehubah --path ?

Pembolehubah --path ditangani sebagai rentetan kerana batasan dalam mendaftarkan jenis kompleks dengan @property . Fungsi cc() mengendalikan penukaran rentetan-ke-piksel.

Bolehkah kita mempunyai sempadan putus -putus?

Ya, menggunakan ctx.setLineDash() . Pembolehubah tambahan mengawal corak dash.

Mengapa tidak menggunakan @property untuk pemboleh ubah dash?

Walaupun secara teknikal mungkin, mengambil nilai -nilai dalam paint() terbukti bermasalah. Buat masa ini, pembolehubah --dash dianggap sebagai rentetan.

Aplikasi praktikal

Beberapa kes penggunaan mempamerkan teknik sempadan poligon:

  • Butang: Buat butang berbentuk adat dengan kesan hover.
  • Breadcrumbs: Memudahkan navigasi breadcrumb.
  • Kad mendedahkan animasi: ketebalan sempadan animasi untuk kesan hover atau mendedahkan animasi.
  • Callouts & Ucapan Gelembung: Mudah tambahkan sempadan ke bentuk kompleks.
  • Animasi Dashes: Buat pelbagai animasi dash menggunakan setLineDash() dan lineDashOffset .

Artikel ini menyediakan panduan yang komprehensif untuk mewujudkan sempadan poligon menggunakan API cat CSS, yang menawarkan fleksibiliti dan kecekapan dalam gaya bentuk.

Atas ialah kandungan terperinci Meneroka CSS Paint API: Sempadan Poligon. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan