إضافات PostCSS مخصصة
اكتب إضافة PostCSS الخاصة بك لتحويل عُقد CSS برمجيًا.
إضافات PostCSS مخصصة درس مجاني في CSS Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CSS Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CSS Academy 4 دروس في المجموع.
لماذا تكتب إضافة مخصّصة؟
عندما لا تحل أي إضافة PostCSS موجودة حاجتك — مثل تحويل CSS خاص بالمشروع أو أداة مساعدة للترحيل أو قاعدة فحص مخصّصة — تتيح لك كتابة إضافة مخصّصة الوصول المباشر إلى شجرة AST الخاصة بـ CSS.
بنية الإضافة
إضافة PostCSS هي دالة تستقبل عقدة Root، أي CSS الذي جرى تحليله، وكائن Result اختياريًا. استخدم المصنع postcss.plugin() أو أسلوب الدالة المباشرة الحديث:
// my-plugin.js
const plugin = () => {
return {
postcssPlugin: 'my-plugin',
Declaration(decl) {
// Called for every declaration node
},
Rule(rule) {
// Called for every rule node
}
};
};
plugin.postcss = true;
module.exports = plugin;استعراض التصريحات
حوّل كل تصريح color:
const plugin = () => ({
postcssPlugin: 'rem-converter',
Declaration(decl) {
if (decl.prop === 'font-size' && decl.value.endsWith('px')) {
const px = parseFloat(decl.value);
decl.value = `${px / 16}rem`;
}
}
});إضافة قواعد جديدة
أدرج قاعدة جديدة بعد كل قاعدة .btn:
Rule(rule) {
if (rule.selector.includes('.btn')) {
const focusRule = rule.cloneAfter();
focusRule.selector = rule.selector + ':focus';
}
}إزالة التصريحات
أزل جميع تصريحات color: red، باستخدام إضافة لتصحيح الأخطاء أو التنظيف:
Declaration(decl) {
if (decl.prop === 'color' && decl.value === 'red') {
decl.remove();
}
}أدوات PostCSS المساعدة
يوفّر PostCSS أساليب مساعدة على العقد:
node.remove(): يزيل العقدةnode.replaceWith(newNode): يستبدل العقدةnode.cloneBefore()/cloneAfter(): يدرج نسخةpostcss.decl()/rule()/atRule(): ينشئ عقدًا جديدة
الإضافات غير المتزامنة
يمكن أن تكون إضافات PostCSS غير متزامنة، وهو أمر مفيد عندما تحتاج إلى قراءة ملفات أو إجراء طلبات شبكة:
async Declaration(decl, helpers) {
if (decl.prop === 'icon') {
const svg = await readFile(`icons/${decl.value}.svg`);
decl.replaceWith(helpers.decl({ prop: 'background', value: `url(${svg})` }));
}
}اختبار إضافات PostCSS
اختبر الإضافات باستخدام الحزمة postcss مباشرةً:
const postcss = require('postcss');
const plugin = require('./my-plugin');
test('converts px to rem', () => {
const input = 'p { font-size: 16px; }';
const result = postcss([plugin()]).process(input, { from: undefined });
expect(result.css).toBe('p { font-size: 1rem; }');
});خيارات الإضافة
اقبل خيارات الإعداد من خلال تمرير وسيط إلى مصنع الإضافة:
const plugin = (opts = {}) => ({
postcssPlugin: 'configurable',
Declaration(decl) {
if (decl.prop === opts.property) {
decl.value = opts.replacement;
}
}
});نشر إضافات PostCSS
تتبع إضافات PostCSS اصطلاحًا للتسمية: postcss-plugin-name. وتُنشر في npm وتُضاف إلى مستودع PostCSS. أما الأدوات الداخلية، فأبقِها في صورة ملفات محلية داخل مشروعك.
تحقق سريع
أي زائر في PostCSS يُستدعى لكل زوج خاصية: قيمة في ورقة الأنماط؟
مراجعة
تستخدم إضافات PostCSS المخصّصة أساليب الزوّار لمعالجة عقد شجرة AST الخاصة بـ CSS. ويُستخدم Declaration(decl) لأزواج الخاصية: القيمة، وRule(rule) لكتل المحدّدات، وAtRule() لقواعد @. استخدم أساليب العقد مثل remove() وreplaceWith() وcloneAfter() لتعديل شجرة CSS. اختبر الإضافات باستخدام حزمة postcss مباشرةً.
الأسئلة الشائعة
هل درس «إضافات PostCSS مخصصة» مجاني؟
نعم — نص درس «إضافات PostCSS مخصصة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CSS Academy، انتقل إلى CoddyKit PRO. تتضمن دورة CSS Academy 4 دروس في المجموع.
ماذا ستتعلم في «إضافات PostCSS مخصصة»؟
اكتب إضافة PostCSS الخاصة بك لتحويل عُقد CSS برمجيًا. تتمرن على CSS Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ CSS Academy؟
لا تُشترط خبرة سابقة. CSS Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «إضافات PostCSS مخصصة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس CSS Academy هذا؟
نعم. كل درس في CSS Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما الذي يفعله PostCSS وكيف يعمل
- Autoprefixer وcssnano
- إضافات PostCSS مخصصة
- PostCSS في Vite وWebpack