CSS Typed Object Model (OM)
จัดการค่าของ CSS ในรูปออบเจ็กต์ JavaScript ที่มีชนิดข้อมูล แทนการใช้สตริง ด้วย API ของ CSS Typed OM
CSS Typed Object Model (OM) เป็นบทเรียน CSS Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CSS Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CSS Academy มีบทเรียนทั้งหมด 4 บทเรียน
CSS Typed OM คืออะไร
CSS Typed Object Model (Typed OM) เป็นส่วนหนึ่งของโครงการ CSS Houdini โดยเปิดเผยค่าของ CSS เป็นออบเจ็กต์ JavaScript ที่มีชนิด แทนที่จะเป็นสตริงธรรมดา ทำให้จัดการค่าได้เร็วขึ้น รองรับการคำนวณที่หลากหลายขึ้น และตรวจสอบชนิดข้อมูลได้
แบบเก่ากับแบบใหม่
CSSOM แบบดั้งเดิมส่งคืนสตริง ส่วน Typed OM ส่งคืนออบเจ็กต์ที่มีข้อมูลชนิด:
<p id="demo" style="opacity: 0.5;">Typed OM demo element</p>
<p id="output">Reading style values…</p>
<script>
const demo = document.getElementById('demo');
const output = document.getElementById('output');
// Old CSSOM (string)
const oldValue = demo.style.opacity; // '0.5'
// CSS Typed OM (typed object)
const typed = demo.computedStyleMap().get('opacity');
// CSSUnitValue { value: 0.5, unit: 'number' }
output.textContent = 'old (string): "' + oldValue + '" | typed OM: value=' + typed.value + ', unit=' + typed.unit;
</script>
computedStyleMap()
เข้าถึงค่าที่คำนวณแล้วและมีชนิดขององค์ประกอบใดก็ได้:
<div id="box">400px wide box</div>
<p id="output">Reading computed width…</p>
<script>
const box = document.getElementById('box');
const output = document.getElementById('output');
const styles = box.computedStyleMap();
const width = styles.get('width');
console.log(width.value); // 400
console.log(width.unit); // 'px'
output.textContent = 'width.value = ' + width.value + ', width.unit = "' + width.unit + '"';
</script>
attributeStyleMap สำหรับสไตล์แบบอินไลน์
ใช้ set และ get เพื่อกำหนดและอ่านค่าของสไตล์แบบอินไลน์ที่มีชนิดผ่าน element.attributeStyleMap:
<div id="box">Inline-styled box</div>
<p id="output">Setting styles via attributeStyleMap…</p>
<script>
const box = document.getElementById('box');
const output = document.getElementById('output');
box.attributeStyleMap.set('opacity', CSS.number(0.5));
box.attributeStyleMap.set('margin-top', CSS.px(16));
const opacity = box.attributeStyleMap.get('opacity');
output.textContent = 'opacity.value = ' + opacity.value;
</script>
เมธอดสร้างค่าตัวเลขของ CSS
เนมสเปซ CSS มีเมธอดสำหรับสร้างค่าที่มีชนิด:
<div id="box">Factory methods demo</div>
<p id="output">Computing…</p>
<script>
const output = document.getElementById('output');
const px = CSS.px(100); // CSSUnitValue(100, 'px')
const percent = CSS.percent(50); // CSSUnitValue(50, 'percent')
const em = CSS.em(1.5); // CSSUnitValue(1.5, 'em')
const number = CSS.number(0.5); // CSSUnitValue(0.5, 'number')
const deg = CSS.deg(180); // CSSUnitValue(180, 'deg')
output.textContent = [px, percent, em, number, deg]
.map(v => v.value + v.unit).join(', ');
</script>
การคำนวณกับค่าที่มีชนิด
CSSMathValue ช่วยให้ใช้การคำนวณทางคณิตศาสตร์ของ CSS ใน JavaScript ได้โดยไม่ต้องต่อสตริงเข้าด้วยกัน:
<div id="box">Math on typed values</div>
<p id="output">Calculating…</p>
<script>
const output = document.getElementById('output');
const width = CSS.px(100).add(CSS.percent(10));
// Equivalent to calc(100px + 10%)
const margin = CSS.px(16).mul(2);
// 32px
output.textContent = 'width = ' + width.toString() + ' | margin = ' + margin.value + margin.unit;
</script>
ประโยชน์ด้านประสิทธิภาพ
Typed OM เร็วกว่า CSSOM ที่ใช้สตริงอย่างมากเมื่อมีการปรับค่าบ่อยครั้ง (เช่น ในแต่ละเฟรมของภาพเคลื่อนไหว) ไม่จำเป็นต้องแยกวิเคราะห์ค่าจากสตริงทุกครั้งที่เข้าถึง เพราะค่าเหล่านั้นเป็นออบเจ็กต์ที่มีโครงสร้างอยู่แล้ว
ชนิดค่าของ CSSStyleValue
ชนิดค่าของ Typed OM ได้แก่:
CSSUnitValue: ตัวเลข + หน่วย (100px)CSSKeywordValue: คำสำคัญ (auto, none)CSSImageValue: รูปภาพ (url())CSSMathValue: นิพจน์ calcCSSColorValue: ค่าสี (อยู่ระหว่างการทดลอง)
Typed OM ในภาพเคลื่อนไหว
ใน Web Animations API ให้ใช้ค่าที่มีชนิดเพื่อควบคุมภาพเคลื่อนไหวได้แม่นยำยิ่งขึ้น:
<div id="box">Animated via Typed OM</div>
<script>
const box = document.getElementById('box');
box.animate(
[{ opacity: CSS.number(0) }, { opacity: CSS.number(1) }],
{ duration: 300, fill: 'forwards' }
);
</script>
การรองรับของเบราว์เซอร์
CSS Typed OM (ระดับ 1) รองรับใน Chrome 66 ขึ้นไป และ Edge 79 ขึ้นไป ส่วน Firefox และ Safari รองรับเพียงบางส่วนหรือรองรับเมื่อเปิดแฟล็ก โปรดตรวจสอบ caniuse.com ก่อนใช้งานจริง ขอบเขตของ API ยังคงเพิ่มขึ้นอย่างต่อเนื่อง
ควรใช้ Typed OM เมื่อใด
ใช้ Typed OM เมื่อ:
- สร้าง CSS Paint หรือ Layout Worklet (จำเป็นต้องใช้)
- ทำภาพเคลื่อนไหวให้กับองค์ประกอบจำนวนมากในแต่ละเฟรมด้วย JavaScript
- สร้างเครื่องมือ CSS หรือตัวประมวลผลล่วงหน้า
- ต้องการจัดการค่าของ CSS พร้อมตรวจสอบชนิดข้อมูล
ตรวจสอบความเข้าใจ
element.computedStyleMap().get("width") ส่งคืนอะไร เมื่อเทียบกับ getComputedStyle(element).width
สรุป
CSS Typed OM แทนที่ CSSOM ที่ใช้สตริงด้วยออบเจ็กต์ JavaScript ที่มีชนิด ใช้ computedStyleMap() เพื่ออ่านค่า และใช้ attributeStyleMap เพื่อเขียนสไตล์แบบอินไลน์ เมธอดสร้างค่าของ CSS (CSS.px(), CSS.percent()) ใช้สร้างค่าที่มีชนิด API นี้เร็วกว่าการจัดการด้วยสตริง และจำเป็นสำหรับ Paint และ Layout Worklet
คำถามที่พบบ่อย
บทเรียน “CSS Typed Object Model (OM)” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “CSS Typed Object Model (OM)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CSS Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CSS Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “CSS Typed Object Model (OM)”
จัดการค่าของ CSS ในรูปออบเจ็กต์ JavaScript ที่มีชนิดข้อมูล แทนการใช้สตริง ด้วย API ของ CSS Typed OM คุณปฏิบัติ CSS Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CSS Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน CSS Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “CSS Typed Object Model (OM)” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน CSS Academy นี้ได้ไหม
ได้ บทเรียน CSS Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- CSS Typed Object Model (OM)
- API คุณสมบัติและค่าของ CSS (@property)
- CSS Paint API: เวิร์กเล็ต
- CSS Layout API และขอบเขต