สร้างรูปร่างรูปภาพที่น่าสนใจด้วยพร็อพเพอร์ตี้คลิปเส้นทางของ CSS

การใช้การตัดใน CSS จะช่วยให้เราไม่ต้องออกแบบทุกอย่างให้ดูเหมือนกล่อง คุณสร้างเส้นทางคลิปได้โดยใช้รูปร่างพื้นฐานต่างๆ หรือ SVG จากนั้นตัดส่วนต่างๆ ขององค์ประกอบที่ไม่ต้องการแสดงออก

องค์ประกอบทั้งหมดในหน้าเว็บจะกำหนดไว้ในกล่องสี่เหลี่ยมผืนผ้า แต่ก็ไม่ได้หมายความว่าเราต้องทําให้ทุกอย่างดูเป็นกล่อง คุณใช้พร็อพเพอร์ตี้ CSS clip-path เพื่อตัดบางส่วนของรูปภาพหรือองค์ประกอบอื่นๆ ออกเพื่อสร้างเอฟเฟกต์ที่น่าสนใจได้

ในตัวอย่างด้านบน รูปภาพบอลลูนเป็นรูปสี่เหลี่ยมจัตุรัส (แหล่งที่มา) เมื่อใช้ clip-path และค่ารูปร่างพื้นฐานของ circle() ระบบจะตัดท้องฟ้าส่วนเกินรอบๆ ลูกโป่งออกและเหลือไว้เฉพาะรูปวงกลมบนหน้า

เนื่องจากรูปภาพเป็นลิงก์ คุณจึงเห็นสิ่งอื่นๆ เกี่ยวกับพร็อพเพอร์ตี้ clip-path ได้ เฉพาะพื้นที่ที่มองเห็นของรูปภาพเท่านั้นที่คลิกได้ เนื่องจากเหตุการณ์จะไม่เริ่มทํางานในส่วนที่ซ่อนอยู่ของรูปภาพ

การตัดใช้ได้กับองค์ประกอบ HTML ใดก็ได้ ไม่ใช่แค่รูปภาพ การสร้าง clip-path ทำได้หลายวิธีด้วยกัน ซึ่งเราจะมาพูดถึงวิธีต่างๆ กันในโพสต์นี้

ความเข้ากันได้กับเบราว์เซอร์

การรองรับเบราว์เซอร์

  • Chrome: 55
  • Edge: 79
  • Firefox: 3.5
  • Safari: 9.1

แหล่งที่มา

สําหรับเบราว์เซอร์เดิม การแสดงผลสำรองอาจเป็นการอนุญาตให้เบราว์เซอร์ละเว้นพร็อพเพอร์ตี้ clip-path และแสดงรูปภาพที่ไม่ได้ตัด หากเป็นปัญหานี้ คุณสามารถทดสอบ clip-path ในคำค้นหาฟีเจอร์และนำเสนอเลย์เอาต์อื่นสำหรับเบราว์เซอร์ที่ไม่รองรับ

@supports(clip-path: circle(45%)) {
  /* code that requires clip-path here. */
}

รูปทรงพื้นฐาน

พร็อพเพอร์ตี้ clip-path สามารถใช้ค่าได้หลายค่า ค่าที่ใช้ในตัวอย่างแรกคือ circle() นี่เป็นหนึ่งในค่ารูปร่างพื้นฐานที่กำหนดในข้อกำหนดรูปร่าง CSS ซึ่งหมายความว่าคุณสามารถตัดพื้นที่และใช้ค่าเดียวกันสำหรับ shape-outside เพื่อทำให้ข้อความล้อมรอบรูปร่างนั้น

รายการรูปร่างพื้นฐานทั้งหมดมีดังนี้

inset()

ค่า inset() จะแทรกพื้นที่ที่ตัดจากขอบขององค์ประกอบ และอาจส่งค่าได้สำหรับขอบด้านบน ด้านขวา ด้านล่าง และด้านซ้าย คุณเพิ่ม border-radius เพื่อโค้งมุมของพื้นที่ที่ตัดได้โดยใช้คีย์เวิร์ด round

ในตัวอย่างนี้ฉันมีกล่อง 2 กล่องที่มีคลาส .box กล่องแรกไม่มีการตัด กล่องที่ 2 ถูกตัดโดยใช้ค่า inset()

circle()

ดังที่คุณเห็น ค่า circle() จะสร้างพื้นที่ที่ตัดออกเป็นรูปวงกลม ค่าแรกคือความยาวหรือเปอร์เซ็นต์ และเป็นรัศมีของวงกลม ค่าที่ไม่บังคับที่ 2 ช่วยให้คุณกำหนดจุดศูนย์กลางของวงกลมได้ ในตัวอย่างนี้ เราใช้ค่าคีย์เวิร์ดเพื่อตั้งค่าวงกลมที่ตัดด้านบนขวา คุณยังใช้ความยาวหรือเปอร์เซ็นต์ได้ด้วย

ระวังขอบที่เรียบ

โปรดทราบว่าค่าเหล่านี้ทั้งหมดจะทำให้รูปร่างถูกตัดโดยกล่องระยะขอบบนองค์ประกอบ ถ้าคุณสร้างวงกลมบนรูปภาพ แล้วรูปร่างนั้นจะขยายออกนอกขนาดตามปกติของภาพ ขอบจะเป็นขอบแบน

วงกลมตัดขอบแบน
ตอนนี้รูปภาพที่ใช้ก่อนหน้านี้มีการใช้ circle(50%) แล้ว เนื่องจากรูปภาพไม่ใช่สี่เหลี่ยมจัตุรัส เราจึงตัดกล่องระยะขอบที่ด้านบนและด้านล่างออกและตัดวงกลมออก

ellipse()

วงรีโดยพื้นฐานแล้วคือวงกลมที่ถูกบีบอัด จึงทํางานคล้ายกับ circle() มาก แต่ยอมรับรัศมีสําหรับ x และรัศมีสําหรับ y รวมถึงค่าสําหรับจุดศูนย์กลางของวงรี

polygon()

ค่า polygon() ช่วยให้คุณสร้างรูปร่างที่ซับซ้อนได้ โดยกำหนดจุดได้มากเท่าที่ต้องการ โดยการตั้งค่าพิกัดของจุดแต่ละจุด

หากต้องการสร้างรูปหลายเหลี่ยมและดูว่าสร้างอะไรได้บ้าง ให้ดู Clippy ซึ่งเป็นเครื่องมือสร้าง clip-path จากนั้นคัดลอกและวางโค้ดลงในโปรเจ็กต์ของคุณเอง

รูปร่างจากค่าในช่อง

นอกจากนี้ยังมีคำจำกัดความในรูปร่าง CSS เป็นรูปร่างที่มาจากค่ากล่อง ซึ่งเกี่ยวข้องกับรูปแบบกล่อง CSS ได้แก่ กล่องเนื้อหา กล่องระยะห่างจากขอบ กล่องเส้นขอบ และกล่องระยะขอบที่มีค่าคีย์เวิร์ด content-box, border-box, padding-box และ margin-box

ค่าเหล่านี้สามารถใช้เดี่ยวๆ หรือใช้ร่วมกับรูปร่างพื้นฐานเพื่อกำหนดกล่องอ้างอิงที่รูปร่างใช้ ตัวอย่างเช่น คำสั่งต่อไปนี้จะตัดรูปร่างให้อยู่ตรงขอบของเนื้อหา

.box {
  clip-path: content-box;
}

ในตัวอย่างนี้ วงกลมจะใช้ content-box เป็นกล่องอ้างอิงแทน margin-box (ซึ่งเป็นค่าเริ่มต้น)

.box {
  clip-path: circle(45%) content-box;
}

ปัจจุบันเบราว์เซอร์ไม่รองรับการใช้ค่ากล่องสำหรับพร็อพเพอร์ตี้ clip-path แต่ระบบรองรับ shape-outside

การใช้องค์ประกอบ SVG

หากต้องการควบคุมพื้นที่ที่ตัดออกได้มากกว่ารูปร่างพื้นฐาน ให้ใช้องค์ประกอบ SVG clipPath จากนั้นอ้างอิงรหัสนั้นโดยใช้ url() เป็นค่าสำหรับ clip-path

การทำภาพเคลื่อนไหวของพื้นที่ที่ตัด

คุณสามารถใช้การเปลี่ยนและภาพเคลื่อนไหวของ CSS กับ clip-path เพื่อสร้างเอฟเฟกต์ที่น่าสนใจ ในตัวอย่างถัดไปนี้ เราจะสร้างภาพเคลื่อนไหววงกลมเมื่อวางเมาส์เหนือโดยการเปลี่ยนระหว่างวงกลม 2 วงที่มีค่ารัศมีต่างกัน

คุณใช้ภาพเคลื่อนไหวร่วมกับคลิปได้หลายวิธี ภาพเคลื่อนไหวด้วย clip-path ใน CSS Tricks มีตัวอย่างไอเดียบางส่วน

ภาพโดย Matthew Henry ใน Burst