CSS Houdini เป็นคำศัพท์ครอบคลุมที่ครอบคลุมชุด API ระดับต่ำที่แสดงบางส่วนของเครื่องมือแสดงผล CSS และให้สิทธิ์นักพัฒนาแอปเข้าถึง CSS Object Model การเปลี่ยนแปลงนี้ถือเป็นการเปลี่ยนแปลงครั้งใหญ่สำหรับระบบนิเวศ CSS เนื่องจากช่วยให้นักพัฒนาซอฟต์แวร์บอกเบราว์เซอร์ว่าจะอ่านและแยกวิเคราะห์ CSS ที่กําหนดเองอย่างไรได้โดยไม่ต้องรอให้ผู้ให้บริการเบราว์เซอร์รองรับฟีเจอร์เหล่านี้โดยค่าเริ่มต้น น่าตื่นเต้นมาก
สิ่งหนึ่งที่น่าสนใจที่สุดใน CSS ภายในร่ม Houdini คือ Properties and Value API
API นี้จะเพิ่มประสิทธิภาพพร็อพเพอร์ตี้ที่กำหนดเองของ CSS (หรือที่เรียกกันโดยทั่วไปว่าตัวแปร CSS) โดยให้ความหมายเชิงความหมาย (กำหนดโดยไวยากรณ์) และแม้แต่ค่าสำรอง ซึ่งช่วยให้ทำการทดสอบ CSS ได้
การเขียนคุณสมบัติที่กำหนดเองของฮูดินี
ต่อไปนี้คือตัวอย่างการตั้งค่าพร็อพเพอร์ตี้ที่กำหนดเอง (ลองนึกถึงตัวแปร CSS) แต่ตอนนี้มีไวยากรณ์ (ประเภท) ค่าเริ่มต้น (ค่าสำรอง) และบูลีนการสืบทอด (รับค่ามาจากพร็อพเพอร์ตี้หลักหรือไม่) วิธีการตรวจสอบในปัจจุบันคือผ่าน CSS.registerProperty()
ใน JavaScript แต่ในเบราว์เซอร์ที่รองรับ คุณจะใช้ @property
ได้
CSS.registerProperty({ name: '--colorPrimary', syntax: '<color>', initialValue: 'magenta', inherits: false });
@property --colorPrimary { syntax: '<color>'; initial-value: magenta; inherits: false; }
ตอนนี้คุณเข้าถึง --colorPrimary
ได้เช่นเดียวกับพร็อพเพอร์ตี้ที่กำหนดเองอื่นๆ ของ CSS ผ่าน
var(--colorPrimary)
แต่ความแตกต่างของที่นี่คือ --colorPrimary
ไม่ได้อ่านเป็นสตริงเท่านั้น มีข้อมูล
ค่าสำรอง
คุณสามารถรับ (ใช้ var
) หรือตั้งค่า (เขียน/เขียนใหม่) เช่นเดียวกับพร็อพเพอร์ตี้ที่กำหนดเองอื่นๆ แต่สำหรับพร็อพเพอร์ตี้ที่กำหนดเองของ Houdini หากคุณตั้งค่าที่ไม่ใช่ค่าจริงเมื่อลบล้าง เครื่องมือแสดงผล CSS จะส่งค่าเริ่มต้น (ค่าสำรอง) แทนการละเว้นบรรทัด
ลองดูตัวอย่างด้านล่าง ตัวแปร --colorPrimary
มี
initial-value
เท่ากับ magenta
แต่นักพัฒนาแอปได้ตั้งค่าเป็นค่าที่ไม่ถูกต้อง "23" หากไม่มี @property
โปรแกรมแยกวิเคราะห์ CSS จะละเว้นโค้ดที่ไม่ถูกต้อง ตอนนี้โปรแกรมแยกวิเคราะห์จะใช้ magenta
ซึ่งช่วยให้มีการแสดงผลสำรองและการทดสอบที่แท้จริงภายใน CSS เยี่ยมเลย
.card {
background-color: var(--colorPrimary); /* magenta */
}
.highlight-card {
--colorPrimary: yellow;
background-color: var(--colorPrimary); /* yellow */
}
.another-card {
--colorPrimary: 23;
background-color: var(--colorPrimary); /* magenta */
}
ไวยากรณ์
ฟีเจอร์ไวยากรณ์ช่วยให้คุณเขียน CSS เชิงความหมายได้โดยระบุประเภท ประเภทในปัจจุบันที่อนุญาตมีดังนี้
length
number
percentage
length-percentage
color
image
url
integer
angle
time
resolution
transform-list
transform-function
custom-ident
(สตริงตัวระบุที่กำหนดเอง)
การตั้งค่าไวยากรณ์ช่วยให้เบราว์เซอร์ตรวจสอบประเภทของพร็อพเพอร์ตี้ที่กำหนดเองได้ ซึ่งมีประโยชน์มากมาย
เพื่อแสดงถึงจุดนี้ เราจะแสดงวิธีการไล่ระดับสี ให้เป็นภาพเคลื่อนไหว ปัจจุบันยังไม่มีวิธีสร้างภาพเคลื่อนไหว (หรือประมาณค่า) ระหว่างค่าของไล่ระดับอย่างราบรื่น เนื่องจากระบบจะแยกวิเคราะห์การประกาศไล่ระดับแต่ละรายการเป็นสตริง
ในตัวอย่างนี้ เปอร์เซ็นต์จุดสิ้นสุดของไล่ระดับสีจะมีภาพเคลื่อนไหวจากค่าเริ่มต้น 40% เป็นค่าสุดท้าย 100% ผ่านการโต้ตอบด้วยการวางเมาส์เหนือ คุณควรเห็นการไล่ระดับสีด้านบนนั้นค่อยๆ เปลี่ยนเป็นสีด้านล่างอย่างราบรื่น
เบราว์เซอร์ทางด้านซ้ายรองรับ Houdini Properties and Value API ซึ่งจะเปิดใช้งานการเปลี่ยนการหยุดไล่ระดับสีที่ราบรื่น เบราว์เซอร์ทางด้านขวาไม่มี ส่วนเบราว์เซอร์ที่ไม่รองรับจะเข้าใจการเปลี่ยนแปลงนี้ว่าเป็นสตริงที่วิ่งจากจุด A ไปยังจุด B เท่านั้น จึงไม่มีเวลาที่จะหาค่าเฉลี่ยระหว่างค่าต่างๆ และคุณจึงไม่เห็นการเปลี่ยนที่ราบรื่น
อย่างไรก็ตาม หากคุณประกาศประเภทไวยากรณ์เมื่อเขียนพร็อพเพอร์ตี้ที่กำหนดเอง แล้วใช้พร็อพเพอร์ตี้ที่กำหนดเองเหล่านั้นเพื่อเปิดใช้ภาพเคลื่อนไหว คุณจะเห็นการเปลี่ยน คุณสามารถสร้างอินสแตนซ์พร็อพเพอร์ตี้ที่กำหนดเอง --gradPoint
ดังตัวอย่างต่อไปนี้
@property --gradPoint {
syntax: '<percentage>';
inherits: false;
initial-value: 40%;
}
และเมื่อถึงเวลาสร้างภาพเคลื่อนไหว คุณสามารถอัปเดตค่าจาก 40%
เริ่มต้นเป็น 100%
ได้โดยทำดังนี้
.post:hover,
.post:focus {
--gradPoint: 100%;
}
ซึ่งจะช่วยให้การเปลี่ยนสีไล่ระดับเป็นไปอย่างราบรื่น
บทสรุป
กฎ @property
ทำให้เทคโนโลยีที่น่าตื่นเต้นนี้เข้าถึงได้ง่ายขึ้นด้วยการอนุญาตให้คุณเขียน CSS ที่มีความหมายเชิงความหมายภายใน CSS เอง ดูข้อมูลเพิ่มเติมเกี่ยวกับ CSS Houdini และ Properties and Values API ได้ที่แหล่งข้อมูลต่อไปนี้
- Houdini พร้อมใช้งานหรือยัง
- ข้อมูลอ้างอิง MDN Houdini
- พร็อพเพอร์ตี้ที่กำหนดเองที่ฉลาดขึ้นด้วย API ใหม่ของ Houdini
- คิวปัญหา CSSWG ของ Houdini
รูปภาพโดย Cristian Escobar ใน Unsplash