CSS الحرج

CSS الحرج: استخراج أنماط الجزء الظاهر قبل التمرير وتضمينها وتأجيل البقية لتسريع أول رسم. يشرح المقال لماذا تعده Google تقنية متقدمة واختيارية، ومقايضات التخزين المؤقت والصيانة وحالات التسابق، وكيف تعرف ما إذا كان CSS هو عنق الزجاجة فعلاً.

نُشر أول مرة: 3 يوليو 2026 · آخر تحديث: 14 أغسطس 2026 · Advanced
اللغات

CSS الحرج تقنية أداء تستخرج CSS اللازم لعرض إطار مختار من الجزء الظاهر قبل التمرير، وتضمّنه في <head>، ثم تؤجل بقية ورقة الأنماط بصورة غير متزامنة. تعمل لأن CSS حاجب للعرض افتراضياً، ولا يوجد ارتفاع عالمي للجزء الظاهر لأن الجهاز والاتجاه والتكبير وحالة الصفحة تغيره. النقطة الأهم: تقدم Google CSS الحرج بوصفه تقنية متقدمة واختيارية، لا نصيحة افتراضية، وتقول إن معظم المواقع ينبغي أن تبلغ أهداف الأداء من دونه. المقايضات حقيقية: لا يُخزن CSS المضمن مؤقتاً للزيارات المتكررة، وينكسر الفصل مع تغير القوالب والحالات، وقد تحجب سياسة CSP style-src الكتلة المضمنة، وقد يتسابق التأجيل أو يسبب تحولاً في التخطيط. شخّص أولاً وتأكد أن CSS، لا JavaScript أو زمن استجابة الخادم، هو عنق زجاجة العرض. أثر SEO غير مباشر عبر Core Web Vitals وLCP، وليس إشارة ترتيب مباشرة. لا توجد إرشادات خاصة بـ Bing. تندرج الصفحة تحت مركز مسار العرض الحرج.

الخلاصة — CSS الحرج = استخراج أنماط الجزء الظاهر قبل التمرير، وتضمينها في <head>، وتأجيل بقية ورقة الأنماط بصورة غير متزامنة (تبديل rel="preload" مع onload، أو بديل <noscript>، أو loadCSS). يعمل لأن CSS يحجب العرض افتراضياً. محور الدقة: تقدمه Google بوصفه تقنية متقدمة واختيارية، لا نصيحة افتراضية“Most sites should be able to achieve all of our recommended performance targets without implementing this technique.” (ترجمة) «ينبغي أن تتمكن معظم المواقع من بلوغ جميع أهداف الأداء الموصى بها من دون تنفيذ هذه التقنية». أبقِ الحمولة المضمنة صغيرة. المقايضات حقيقية: لا يُخزن CSS المضمن مؤقتاً بين تحميلات الصفحات، فيمكن أن تكون الزيارات المتكررة أبطأ؛ وينكسر الفصل بين الحرج وغير الحرج مع تغير القوالب؛ وقد يتسابق التأجيل أو يسبب FOUC/CLS. شخّص أولاً: تأكد أن CSS، لا JavaScript أو زمن الخادم، هو عنق الزجاجة الفعلي. وانتبه لمخاطر لا يكشفها العرض السريع: يمكن لسياسة CSP style-src حجب كتلة <style> المضمنة تماماً، وكون النمط «غير مستخدم وقت الالتقاط» لا يعني أنه «آمن للتأجيل» عبر السمات والتخصيص والحالات، كما أن التضمين لا يحل توقيت تحميل الخطوط. أثر SEO غير مباشر عبر Core Web Vitals/LCP، ولا توجد إرشادات خاصة بـ Bing.

ما CSS الحرج فعلياً؟

المشكلة التي يحلها هي CSS الحاجب للعرض. توضح web.dev من Google: يُعامل CSS افتراضياً بوصفه مورداً حاجباً للعرض، ما يعني أن المتصفح لن يعرض أي محتوى معالج حتى بناء CSSOM. وهذا هو سبب وجود التقنية: يرفض المتصفح الرسم حتى يحصل على الأنماط، لذلك يؤخر كل ما يؤخر CSS أول رسم. ولرؤية المسار الكامل الكامن خلف ذلك، راجع مركز مسار العرض الحرج الذي تندرج تحته هذه الصفحة، ومقاله الشقيق عن الموارد الحاجبة للعرض.

يعالج CSS الحرج ذلك بتقسيم CSS إلى جزأين. وفق تعريف web.dev: “Critical CSS is a technique that extracts the CSS for above-the-fold content in order to render content to the user as fast as possible.” (ترجمة) «CSS الحرج تقنية تستخرج CSS الخاص بالمحتوى الظاهر قبل التمرير لعرض المحتوى للمستخدم بأسرع ما يمكن». أما الآلية فهي: يؤدي تضمين الأنماط المستخرجة في <head> مستند HTML إلى إلغاء الحاجة إلى طلب إضافي لجلبها، ويمكن تحميل بقية CSS بصورة غير متزامنة.

Evidence for this claim Critical CSS extracts and inlines above-the-fold styles so the remaining CSS can load asynchronously. Scope: web.dev definition and implementation outline for critical CSS. Confidence: high · Verified: web.dev: Extract critical CSS

تصرح web.dev بنقطة تتجاوزها أدلة ثانوية كثيرة: لا يوجد ارتفاع واحد وعالمي للجزء الظاهر قبل التمرير. فحجم الجهاز واتجاهه، وواجهة المتصفح، ومستوى التكبير، وحالة الصفحة مثل قائمة مفتوحة أو تخصيص محمّل أو حالة خطأ، كلها تغير ما يجب أن يدخل فعلياً في المجموعة «الحرجة». عامل CSS الحرج كقرار بشأن إطار عرض وحالة أوليين مختارين، لا كحد ثابت بالبكسل، واختبره على نقاط التوقف والحالات الحقيقية، لا على لقطة شاشة مكتبية واحدة.

إذن فله مهمتان بالترتيب:

  1. ضمّن الحد الأدنى من CSS الخاص بالجزء الظاهر قبل التمرير في <head>، من دون رحلة شبكة إضافية قبل أول رسم.
  2. أجّل بقية ورقة الأنماط، وحمّلها بصورة غير متزامنة كي لا تحجب أول رسم.

وهكذا تماماً قسمته في محاضراتي عن تجربة الصفحة. ففي عرضي ما التالي لتجربة الصفحة؟ في SMX Next 2021 وضعت عمل CSS في مجموعتين: مسار مبكر/حرج (إزالة CSS غير المستخدم ← تصغير CSS ← تضمين CSS الحرج)، ومسار متأخر/مؤجل (تأجيل CSS غير الحرج). إنه الشكل نفسه لدى web.dev، لكن مرتب بالطريقة التي أفكر بها.

كيفية تنفيذه

الخطوة 1 — ضمّن CSS الحرج. توصي Lighthouse نفسها بتضمين الأنماط الحرجة اللازمة لأول رسم داخل كتلة <style> في رأس صفحة HTML. وهدف Google لحجم تلك الحمولة المضمنة، من الصفحة نفسها، هو إبقاء محتوى الجزء الظاهر قبل التمرير دون 14 KB بعد الضغط كي يلائم أول رحلة عبر الشبكة. عامل هذا الرقم بوصفه إرشاد نقل تاريخياً، لا مواصفة خالدة؛ فالصفحة مؤرخة في 2019 وتسبق الانتشار الواسع الحالي لـ HTTP/2 وHTTP/3، وكلاهما يغير حساب الرحلة الأولى. لا يزال الرقم الذي تستشهد به وثائق Google، لكن عند الضبط الدقيق تحقّق منه مقابل البروتوكول الحالي وسلوك خادمك بدلاً من اعتبار 14 KB حقيقة مطلقة.

الخطوة 2 — أجّل البقية. النمط الذي توصي به web.dev من أجل تأجيل CSS غير الحرج هو تحميل مسبق مع تبديل onload وإضافة بديل <noscript>:

<link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="styles.css"></noscript>

تنصح web.dev في الإنتاج باستخدام دوال لتأجيل CSS مثل loadCSS، تغلف هذا السلوك وتعمل جيداً عبر المتصفحات بدلاً من بناء التبديل يدوياً. وإذا أجّلت باستخدام JavaScript، فتشير web.dev إلى أن انتظار تنفيذ JavaScript قبل تحميل CSS غير الحرج قد يؤخر العرض عندما يمرر المستخدم، ولهذا يُستخدم preload لبدء التنزيل في وقت أبكر.

الأدوات. نادراً ما تستخرج CSS الحرج يدوياً. التنفيذ المرجعي لدى Google هو حزمة npm المسماة critical من Addy Osmani، وهي “a tool that extracts, minifies and inlines above-the-fold CSS.” (ترجمة) «أداة تستخرج CSS للجزء الظاهر قبل التمرير وتصغّره وتضمّنه». وتشمل البدائل Penthouse وCriticalCSS ومجموعة من مولدات SaaS والإضافات لـ WordPress وShopify. ولتحديد القواعد الحرجة بنفسك، توجهك Google إلى تبويب Coverage في Chrome DevTools لتحديد CSS وJS غير الحرجين.

إذا كنت تستخدم إضافة أو مولداً مثل WP Rocket أو Autoptimize، فلا تعامل شرح واجهة المورّد أو لقطة درجة قبل/بعد بوصفها ضماناً للمنصة؛ فهذه الصفحات تخلط إصدارات المنتج ونتائج مواقع بعينها، ولم تُعد فروق الدرجات بصورة مستقلة. قبل الوثوق بها في الإنتاج، أكد السلوك مقابل الوثائق الحالية للإضافة ورقم إصدارها، واخضعها لمصفوفة الاختبار نفسها التي تستخدمها لتنفيذ يدوي: تحميلات باردة ومتكررة، ونقاط التوقف والسمات والحالات الحقيقية، وسياسة CSP إن كانت مطبقة.

لاحظ أن CSS الحرج ليس سوى أحد حلول CSS الحاجب للعرض. تشمل الحلول الأخرى تقييد نطاق أوراق الأنماط بسمة media كي تُنزّل من دون حجب الرسم، وشحن CSS أقل من الأصل. بل تميل مقالة web.dev عن حجب العرض إلى نهج سمة media بدلاً من التضمين، ولذلك لدى Google أكثر من وصفة رسمية بحسب الوثيقة التي تقرؤها.

موقف Google الفعلي: محور الدقة

هذا هو الجزء الذي تدفنه معظم المقالات المنافسة، وهو سبب رغبتي في كتابة المقال. لا تقدم Google CSS الحرج بوصفه نصيحة افتراضية. يصرح مختبرها التعليمي بالمخاطر: يشرح هذا المختبر تقنية أداء متقدمة يمكن أن تحسن الأداء، لكنها قد تؤدي أيضاً إلى أخطاء إن لم تُنفذ بصورة صحيحة. وتقول Google مرتين في وثائقها إن معظم المواقع لا ينبغي أن تلجأ إليه: ينبغي أن تتمكن معظم المواقع من بلوغ جميع أهداف الأداء الموصى بها من دون تنفيذ هذه التقنية.

Evidence for this claim web.dev presents critical CSS as an advanced technique that can cause bugs and says most sites can meet performance targets without it. Scope: web.dev codelab guidance; not a universal recommendation. Confidence: high · Verified: web.dev: Extract and inline critical CSS

حتى الفائدة تأتي مع تحذير. توضح web.dev أن للتضمين سلبيات لأنه يمنع المتصفح من تخزين CSS مؤقتاً لإعادة استخدامه في تحميلات الصفحات اللاحقة، ولذلك يُفضل استخدامه باعتدال، وعن الإفراط تقول: إذا أُعطيت الأولوية لكل شيء فلن تكون لأي شيء أولوية. يؤدي الإفراط في التضمين إلى تضخيم HTML الذي تحاول إرساله بسرعة.

إذن الصياغة الصادقة هي أن CSS الحرج تقنية حقيقية وموثقة وقد تكون قوية أحياناً، لكنها متقدمة واختيارية ويُلجأ إليها أخيراً، وتقول Google إن معظم المواقع لا تحتاج إليها لبلوغ أهدافها. تعامل معها على هذا الأساس.

المقايضات الحقيقية

كان مهندسو الأداء المستقلون أعلى الأصوات هنا، وتتفق آراؤهم مع تحذيرات Google.

فقدان التخزين المؤقت في الزيارات المتكررة. يصرح Matt Zeunert من DebugBear: لا يمكن إعادة استخدام CSS الحرج بين تحميلات الصفحات المختلفة في موقعك، ولذلك قد تكون عروض الصفحات اللاحقة أبطأ فعلاً مما ستكون عليه من دونه. تُخزن ورقة الأنماط الخارجية العادية مرة واحدة ويعاد استخدامها في كل مكان، بينما يعاد تنزيل CSS المضمن داخل كل استجابة HTML.

خطر الصيانة والانحدار. تعد مقالة Harry Roberts المخالفة للرأي السائد أشهر الآراء، وتحذر من أن إضافة CSS الحرج إلى نظام قائم أمر صعب وعرضة للأخطاء. وبعد تحديد CSS بوصفه عنق الزجاجة، “you need to keep it that way… One wrong decision can undo everything.” (ترجمة) «عليك أن تبقيه كذلك… فقرار خاطئ واحد قد يبطل كل شيء». لا توجد إعادة تحقق تلقائية؛ فقد يكسر تغيير في القالب أو التصميم الفصل بين الحرج وغير الحرج بصمت.

حالات التسابق في التأجيل. يشير Roberts أيضاً إلى أن تبديل preload/onload قد ينقلب ضدك في التوقيت: إذا استغرق تحليل <head> ثانية واحدة وجلب CSS غير الحرج بصورة غير متزامنة 0,5 ثانية، فسيعود CSS ملفاً متزامناً قبل أن تصبح مستعداً بـ 0,5 ثانية. وعندما يصل CSS غير الحرج متأخراً، تخاطر بوميض محتوى غير منسق وتحول في التخطيط.

غالباً لا يكون عنق الزجاجة أصلاً. خلاصة Roberts: لا يساعد CSS الحرج إلا إذا كان CSS أكبر عنق زجاجة حاجب للعرض، وغالباً لا يكون كذلك. ويوافق DebugBear: افحص قبل التضمين ما إذا كان CSS هو المشكلة فعلاً، لأن وجود JavaScript حاجب للعرض يعني أن تضمين CSS لن يساعد على الأرجح، وأن “often it’s not the most impactful optimization.” (ترجمة) «غالباً لا يكون التحسين الأكبر أثراً».

مخاطر الإنتاج: CSP والحالة والخطوط

ثمة ثلاثة أنماط فشل إضافية لا تظهر في عرض سريع، لكنها تؤذيك بعد الإطلاق:

يمكن لسياسة CSP حجب كتلة <style> المضمنة تماماً. قد تحجب سياسة Content-Security-Policy ذات التوجيه style-src كتلة <style> حرجة ومضمنة ما لم تسمح بها صراحة، عادة عبر nonce أو تجزئة مطابقة. توثق MDN حالات الانتهاك وآليات nonce والتجزئة. ويؤدي استخدام unsafe-inline لمجرد إزالة خطأ وحدة التحكم إلى إضعاف السياسة على الموقع كله، وليس حلاً افتراضياً. اربط توليد nonce أو التجزئة بالأداة التي تستخرج CSS الحرج، وافحص وحدة تحكم المتصفح بحثاً عن انتهاكات بعد النشر.

كونه «غير مستخدم وقت الالتقاط» لا يعني أنه «آمن للتأجيل». يخبرك تبويب Coverage بما نُفذ من CSS خلال تشغيل مسجل واحد. يجب أن يحافظ الفصل الآمن على ترتيب التتالي والقواعد اللازمة لنقاط التوقف المتجاوبة، ومتغيرات السمات، والمحتوى المخصص، وحالات التركيز، والقوائم والنوافذ المفتوحة، وحالات الخطأ؛ لا على ما ظهر في تشغيل واحد فقط. ويطرح Roberts السؤال نفسه من زاوية أخرى: أي إطار عرض وأي عناصر خارج الشاشة أو لم يتفاعل معها المستخدم، مثل القوائم المنسدلة، يجب أن يغطيها الاستخراج؟

لا يحل مشكلة الخطوط، وقد يضيف عملاً للعرض. لا يجعل تضمين أنماط العناصر خط الويب قابلاً للاكتشاف في وقت أبكر بذاته، ولا يضمن عرض النص في موعده؛ فاكتشاف الخط و preload وfont-display ومقاييس الخط البديل تبعيات منفصلة لا يمسها CSS الحرج. كما أن تطبيق مجموعة فرعية مضمنة تتبعها ورقة أنماط أكبر قد يعني إعادة حساب إضافية للأنماط والتخطيط والرسم. تقليل تأخير الجلب لا يعني تلقائياً تقليل عمل العرض كله؛ فقِس الاثنين، لا شلال الشبكة وحده.

كيف تشخّص ما إذا كنت تحتاج إليه أصلاً؟

في ضوء ذلك كله، لا تبدأ بعبارة «أضف CSS الحرج»، بل ابدأ بـ «تأكد أن CSS هو عنق زجاجة العرض لدي»، ولا تتوقف هناك. توجد أربع بوابات يجب أن تتحقق كلها قبل أن يستحق التنفيذ:

1. CSS حاجب مثبت، لا تخمين.

  • افتح تقرير PageSpeed Insights أو Lighthouse. منذ Lighthouse 13، انتقل تدقيق “Eliminate render-blocking resources” إلى مؤشر Render-blocking requests، ولذلك أصبحت المقالات القديمة التي تستخدم اسم التدقيق السابق قديمة.
  • استخدم تبويب Coverage في Chrome DevTools لمعرفة مقدار CSS وJS غير المستخدم فعلياً عند أول رسم.
  • افصل الأسباب. إذا كان عنق الزجاجة JavaScript حاجباً للعرض أو استجابة خادم بطيئة (TTFB)، فلن يصلحه تضمين CSS؛ عندها ستحسن الشيء الخطأ.

2. يمكنك بناء تغطية استخراج مستقرة فعلاً عبر نقاط التوقف والسمات والتخصيص والحالات التفاعلية الحقيقية، لا من لقطة شاشة مكتبية واحدة؛ راجع المخاطر أعلاه.

3. تكلفة العرض المتكرر وCSP مقبولة. لا يُخزن CSS المضمن مؤقتاً، فوازن ذلك مع عمق الجلسة المعتاد. وإذا كنت تطبق سياسة CSP style-src، فيجب ربط توليد nonce أو التجزئة بخط المعالجة قبل النشر، لا اكتشاف الحاجة إليه بعده.

4. ستصونه فعلاً. أعد التوليد عند كل تغيير في القالب أو التصميم، وأعد تشغيل مصفوفة الاختبار كاملة: التحميل البارد والمتكرر، وكل مسار وإطار عرض وحالة تدعمها، لا مجرد فحص بصري واحد بعد النشر.

إذا تحققت البوابات الأربع كلها، استحق CSS الحرج تكلفة الصيانة. وإذا فشلت أي واحدة، فالحلول الأرخص، مثل إزالة CSS غير المستخدم وتصغيره وتقييد أوراق الأنماط غير الحرجة بسمة media، هي الخيار الأفضل.

مشكلة راهنة في 2026

هناك تفصيل حي يستحق التنبيه: يوجد بلاغ مفتوح لم يُحل يفيد بأن النمط نفسه <link rel="preload" as="style"> الذي توصي به وثائق Google لتأجيل CSS بدأ يُصنف مجدداً بوصفه حاجباً للعرض بعد تحديث نقطي في Lighthouse/PSI. توثق المشكلة رقم #17031 على GitHub ظهور CSS المحمل مسبقاً باللون الأخضر في Lighthouse 13.0.1 ثم تصنيفه حاجباً للعرض في 13.3.0. وحتى وقت كتابة المصدر لا يوجد حل عام من Google، لذا عاملها كتطور جارٍ. لكن الدرس العملي ثابت: إذا صنف PSI ملف CSS المؤجل بصورة صحيحة على أنه حاجب، فقد يكون التدقيق نفسه مخطئاً؛ اقرأ التقرير نقدياً قبل افتراض أن تنفيذك معطل.

هل يساعد CSS الحرج تحسين محركات البحث؟

بصورة غير مباشرة ومتواضعة. افصل بين أمرين:

  • CSS ليس إشارة ترتيب مباشرة. قال Martin Splitt من Google عن أسماء فئات CSS: “I don’t think we care because the CSS class names are just that.” (ترجمة) «لا أظن أننا نهتم، لأن أسماء فئات CSS ليست سوى أسماء». يتعلق ذلك بأسماء الفئات تحديداً، لكنه يدحض الخرافة الأوسع بأن اختيارات CSS تُقرأ بوصفها مدخلاً للترتيب.
  • السرعة إشارة صغيرة عبر Core Web Vitals. قد يحسن CSS الحرج أول رسم، فيحسن LCP، وهو مقياس من مؤشرات أداء الويب الأساسية يغذي إشارات تجربة الصفحة لدى Google. هذه هي صلة SEO كلها: رسم أسرع، لا مكافأة على التقنية نفسها.

إذن قوة حجة CSS الحرج لتحسين محركات البحث تساوي تماماً أثره في LCP على موقعك، وهو أثر أصغر كثيراً، وفق Google ومجتمع الأداء، مما توحي به الأدوات التي تبيعه.

ماذا عن Bing؟

لا توجد إرشادات خاصة بـ Bing. بخلاف Google التي لديها عدة صفحات على web.dev ومختبر تعليمي عن التقنية، لم أجد في المصدر وثيقة مخصصة من Bing أو Microsoft عن CSS الحرج. تنطبق إرشادات Bing العامة لتجربة الصفحة، مثل إبقاء الموقع سريعاً والمحتوى الحرج قابلاً للوصول، لكن لا يوجد نظير لدى Bing لمختبر web.dev. ومن يدّعي وجود توصية محددة من Bing بشأن CSS الحرج يختلقها.

موضع هذه الصفحة

تندرج هذه الصفحة تحت مركز مسار العرض الحرج، إذ يمثل CSS الحرج أحد أساليب تقصير ذلك المسار، وهي الشقيقة العملية لمقال الموارد الحاجبة للعرض. وتظهر الفائدة، حين توجد، في أكبر رسم محتوى (LCP)، وأول رسم محتوى (FCP)، ومجموعة مؤشرات أداء الويب الأساسية الأوسع. وللصورة الأشمل للأداء، راجع مجموعة أداء الويب.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.