نموذج الكائنات المكتوبة في CSS (OM)
تعامَل مع قيم CSS بوصفها كائنات JavaScript مكتوبة بدلًا من سلاسل نصية باستخدام واجهة CSS Typed OM البرمجية.
نموذج الكائنات المكتوبة في CSS (OM) درس مجاني في CSS Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 للأنماط المضمّنة
عيّنوا قيم الأنماط المضمّنة المكتوبة واحصلوا عليها عبر 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 عند:
- إنشاء Paint Worklets أو Layout Worklets في CSS (مطلوب)
- تحريك عناصر كثيرة في كل إطار باستخدام JavaScript
- إنشاء أدوات CSS أو معالجات مسبقة
- الحاجة إلى معالجة قيم CSS مع التحقق من الأنواع
تحقق سريع
ماذا تعيد element.computedStyleMap().get("width") مقارنةً بما تعيده getComputedStyle(element).width؟
مراجعة
يستبدل CSS Typed OM CSSOM القائم على السلاسل النصية بكائنات JavaScript مكتوبة. استخدموا computedStyleMap() للقراءة وattributeStyleMap لكتابة الأنماط المضمّنة. تنشئ طرائق إنشاء CSS (CSS.px() وCSS.percent()) قيمًا مكتوبة. وتتميز واجهة API بسرعة أعلى من المعالجة القائمة على السلاسل النصية، كما أنها مطلوبة لـ Paint Worklets وLayout Worklets.
الأسئلة الشائعة
هل درس «نموذج الكائنات المكتوبة في CSS (OM)» مجاني؟
نعم — نص درس «نموذج الكائنات المكتوبة في CSS (OM)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CSS Academy، انتقل إلى CoddyKit PRO. تتضمن دورة CSS Academy 4 دروس في المجموع.
ماذا ستتعلم في «نموذج الكائنات المكتوبة في CSS (OM)»؟
تعامَل مع قيم CSS بوصفها كائنات JavaScript مكتوبة بدلًا من سلاسل نصية باستخدام واجهة CSS Typed OM البرمجية. تتمرن على CSS Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ CSS Academy؟
لا تُشترط خبرة سابقة. CSS Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «نموذج الكائنات المكتوبة في CSS (OM)»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس CSS Academy هذا؟
نعم. كل درس في CSS Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- نموذج الكائنات المكتوبة في CSS (OM)
- واجهة خصائص CSS وقيمها (@property)
- واجهة CSS Paint: وحدات Worklets
- واجهة CSS Layout ونطاقها