เครื่องมือสร้าง clip-path สำหรับ CSS
ด้วย clip-path คุณสามารถตัดองค์ประกอบใดๆ ให้เป็นรูปหลายเหลี่ยม สร้างรูปภาพที่มีทรง ฮีโร่เซกชันไม่สมมาตร หรือกรอบคำพูดโดยไม่ต้องใช้ SVG ทับซ้อน การเขียนพิกัด polygon() ด้วยมือมักทำให้เกิดความผิดพลาดทางคณิตศาสตร์ ตัวสร้างนี้จะแสดงคำสั่ง clip-path ที่ถูกต้องสำหรับรูปทรงสำเร็จรูป 4 แบบ ได้แก่ สามเหลี่ยม เพชร สี่เหลี่ยมคางหมู และหกเหลี่ยม เลือกรูปทรง สร้างโค้ด แล้วคัดลอก CSS ได้เลย
วิธีสร้าง clip-path
-
1
เลือกรูปทรง
เลือกรูปแบบสำเร็จรูปหนึ่งในสี่แบบ ได้แก่ สามเหลี่ยม เพชร สี่เหลี่ยมคางหมู หรือหกเหลี่ยม
-
2
สร้าง CSS
คลิกปุ่ม เครื่องมือจะสร้างกฎ `clip-path: polygon(...)` สำหรับรูปทรงที่เลือก
-
3
คัดลอกกฎ
คัดลอกผลลัพธ์และวางลงในสไตล์ชีตของคุณ เปอร์เซ็นต์จะทำให้รูปทรงปรับขนาดตามองค์ประกอบได้
-
4
อ่านพิกัด
ตัวเลขแต่ละคู่คือหนึ่งจุดมุม คือตำแหน่ง x และ y ของมุมนั้นคิดเป็นเปอร์เซ็นต์ของกรอบองค์ประกอบ
-
5
นำไปใช้
`clip-path` ใช้ได้กับองค์ประกอบใดๆ ในเบราว์เซอร์สมัยใหม่ทั้งหมด และรูปทรงจะปรับขนาดตามองค์ประกอบ
ฟังก์ชันรูปร่างทั้งห้าชนิด
| ฟังก์ชัน | ไวยากรณ์ | การใช้งาน |
|---|---|---|
inset() |
inset(10% 20% 10% 20% round 8px) |
คลิปรูปสี่เหลี่ยมผืนผ้าแบบเว้นขอบเข้าด้านใน เลือกให้มุมโค้งมนได้ |
circle() |
circle(50% at 50% 50%) |
วงกลม |
ellipse() |
ellipse(40% 25% at 50% 50%) |
วงรี |
polygon() |
polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%) |
รูปหลายเหลี่ยมใดก็ได้ |
path() |
path("M0 0 L100 0 L50 100 Z") |
ข้อมูลเส้นทาง SVG (รองรับในระดับจำกัด) |
คลิปรูปหลายเหลี่ยมที่ใช้บ่อย
/* Hexagon */
clip-path: polygon(25% 0, 75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%);
/* Rhombus */
clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
/* Chevron / arrow pointing right */
clip-path: polygon(0 0, 75% 0, 100% 50%, 75% 100%, 0 100%, 25% 50%);
/* Parallelogram */
clip-path: polygon(20% 0, 100% 0, 80% 100%, 0 100%);
/* Diagonal slice (modern hero section) */
clip-path: polygon(0 0, 100% 0, 100% 85%, 0 100%);
เส้นทแยงมุมของฮีโร่เซกชันน่าจะเป็นรูปแบบที่ใช้บ่อยที่สุด เพราะช่วยให้ส่วนนั้นดูทันสมัยด้วยมุมเฉียง โดยไม่ต้องพึ่งไฟล์ SVG เลย
การทำแอนิเมชันให้ clip-path
clip-path จะทำแอนิเมชันได้ตราบใดที่ทั้งสองสถานะใช้ฟังก์ชันรูปร่างเดียวกันและมีจำนวนจุดเท่ากัน รูปหลายเหลี่ยมที่มีจุดยอด 4 จุดจะเคลื่อนไหวไปยังรูปหลายเหลี่ยมอีกรูปที่มีจุดยอด 4 จุดได้อย่างลื่นไหล แต่การเพิ่มหรือลบจุดยอดจะทำให้การประมาณค่าระหว่างจุด (interpolation) เสียไป
.card { clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); }
.card:hover { clip-path: polygon(0 5%, 100% 0, 100% 95%, 0 100%); }
ใช้เทคนิคนี้กับเอฟเฟกต์การปรากฏตัว การบิดเล็กน้อยเมื่อชี้เมาส์ หรือการเปลี่ยนหน้าเว็บ
clip-path เทียบกับ overflow: hidden
overflow: hidden จะตัดตามกรอบสี่เหลี่ยมของบอร์เดอร์บ็อกซ์ (ซึ่งทำให้มุมโค้งมนได้ด้วย border-radius) ส่วน clip-path จะตัดตามรูปร่างใดก็ได้ที่คุณกำหนด และตัด ทุกอย่าง รวมถึงเงาและเส้นขอบ หากคุณต้องการให้เงายังปรากฏอยู่นอกรูปร่าง clip-path ไม่ใช่ตัวเลือกที่เหมาะสม
filter: drop-shadow() สามารถเพิ่มเงาที่อิงตามรูปร่างให้กับองค์ประกอบที่ใช้ clip-path ได้ แต่ทำงานช้ากว่า
ประสิทธิภาพ
ในเบราว์เซอร์สมัยใหม่ clip-path ได้รับการเร่งความเร็วด้วย GPU แอนิเมชันของ clip-path จึงลื่นไหล ยกเว้น path() และรูปหลายเหลี่ยมที่ซับซ้อนมาก (จุดยอดมากกว่า 40 จุด) ซึ่งในบางเบราว์เซอร์จะถูกเรนเดอร์ด้วย CPU แทน
การเข้าถึง (Accessibility)
clip-path เปลี่ยนเฉพาะส่วนที่มองเห็นเท่านั้น โปรแกรมอ่านหน้าจอ โฟกัสของคีย์บอร์ด และเหตุการณ์ของตัวชี้ (pointer) จะอิงตามกรอบเต็มขององค์ประกอบ ไม่ใช่รูปร่างที่ถูกตัด หากภาพถูกตัดเป็นรูปดาว ข้อความ alt ก็ยังถูกอ่านได้ตามปกติ แต่ถ้าปุ่มถูกตัดเป็นรูปเชฟรอน พื้นที่คลิกจะเป็นสี่เหลี่ยมผืนผ้าทั้งกรอบ ไม่ใช่เฉพาะรูปเชฟรอนที่มองเห็น จึงอาจเกิดการคลิกโดยไม่ตั้งใจในพื้นที่ที่ดูเหมือนว่างเปล่า
สำหรับปุ่มที่มีรูปทรงตัดแปลกตา ให้กำหนดความกว้างและความสูงขององค์ประกอบให้พอดี เพื่อให้พื้นที่คลิก (hitbox) ตรงกับพื้นที่ที่มองเห็นมากที่สุด
คำถามที่พบบ่อย
เบราว์เซอร์สมัยใหม่ทั้งหมด (Chrome, Firefox, Safari และ Edge) รองรับ polygon(), circle(), ellipse() และ inset() ส่วน path() ได้รับการสนับสนุนใน Chrome เวอร์ชัน 88 เป็นต้นไป, Firefox เวอร์ชัน 97 เป็นต้นไป และ Safari เวอร์ชัน 13.1 เป็นต้นไป ขณะที่ IE ไม่รองรับ path() เลย แต่ปัจจุบันการใช้งานฟีเจอร์นี้มีอยู่เพียงเล็กน้อยสำหรับเว็บไซต์ส่วนใหญ่
เพราะ clip-path จะตัดเงาไปพร้อมกับทุกสิ่งทุกอย่าง ให้ใช้ filter: drop-shadow() แทน เพราะมันจะอิงตามรูปร่างที่ถูกตัดและทำให้เงายังมองเห็นได้
ทำได้เฉพาะระหว่างฟังก์ชันรูปร่างเดียวกันที่มีจำนวนจุดเท่ากันเท่านั้น รูปหลายเหลี่ยมที่มี 4 จุดจะเปลี่ยนไปเป็นรูปหลายเหลี่ยมอีกรูปที่มี 4 จุด การเพิ่มหรือลบจุด หรือการเปลี่ยนจากฟังก์ชันหนึ่งไปอีกฟังก์ชันหนึ่ง (เช่น จากรูปหลายเหลี่ยมไปเป็นวงกลม) จะทำให้การประมาณค่าระหว่างจุดเสียไป
ไม่ เหตุการณ์ของตัวชี้ (pointer events) ยังคงไปที่กรอบสี่เหลี่ยมผืนผ้าเต็มขององค์ประกอบเสมอ ปุ่มรูปดาวจะมีพื้นที่คลิกเป็นสี่เหลี่ยมผืนผ้า รวมถึงมุมที่โปร่งใสด้วย หากเรื่องนี้สำคัญ ให้พิจารณาใช้ pointer-events: none กับ ::before หรือใช้องค์ประกอบที่กำหนดขนาดให้พอดี
เครื่องมือที่เกี่ยวข้อง
ตารางอ้างอิง ASCII
ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL
อ้างอิงตัวอักษร HTML
รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ
ตารางอ้างอิงแป้นพิมพ์ลัด
ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux
ตัวลดรูปพีชคณิตบูลีน
ประเมินนิพจน์บูลีนสำหรับทุกชุดอินพุตและดูตารางค่าความจริงที่สมบูรณ์ รองรับตัวแปรสูงสุดห้าตัวและตัวดำเนินการ &, |, !, ^
เครื่องสร้างตัวอักษรสุ่ม
สร้างตัวอักษร A-Z แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน
เครื่องมือตรวจสอบหมายเลขโทรศัพท์
ตรวจสอบโครงสร้างหมายเลขตามประเทศ พร้อมดูภูมิภาค ประเภท และรูปแบบ E.164 ระหว่างประเทศ ในประเทศ และ RFC 3966