تعمل filter على أي عنصر، لا على الصور فقط: الـ div المموه يموّه نصه وحده وأبناءه أيضًا. لاحظ الحواف الناعمة في الصور المموهة: ينشر التمويه الصورة إلى الخارج ويمزج معها المنطقة الشفافة المحيطة. الحل في الأسفل، تحت «مشكلة الحواف المموهة».
تمويه الخلفية: backdrop-filter
لتمويه ما خلف العنصر (لوحة زجاج مصنفر فوق صورة أو صفحة)، استخدم backdrop-filter. يبقى محتوى العنصر نفسه حادًا. ويحتاج إلى خلفية شفافة كي يظهر التمويه:
الدوال التي حرّكتها بعيدًا عن قيمتها المحايدة هي وحدها التي تُكتب، وهذا يبقي القيمة قصيرة. لا تغيّر brightness(1) أو blur(0px) شيئًا، فلا داعي لذكرهما.
دوال المرشحات
الدالة
القيمة المحايدة
ماذا تفعل
مثال
blur(r)
0
تمويه غاوسي بنصف قطر r
blur(4px)
brightness(n)
1
أغمق تحت 1، وأسطع فوقه
brightness(0.7)
contrast(n)
1
أبهت تحت 1، وأقوى فوقه
contrast(1.3)
grayscale(n)
0
القيمة 1 (أو 100%) رمادية تمامًا
grayscale(100%)
sepia(n)
0
درجة بنية دافئة
sepia(0.6)
saturate(n)
1
0 رمادي، وفوق 1 أكثر حيوية
saturate(1.5)
hue-rotate(a)
0deg
تزيح كل درجة لونية حول عجلة الألوان
hue-rotate(90deg)
invert(n)
0
القيمة 1 صورة سالبة كاملة
invert(1)
opacity(n)
1
مثل الخاصية opacity
opacity(0.5)
drop-shadow(x y blur color)
ظل يتبع الشكل
drop-shadow(2px 4px 6px rgb(0 0 0 / 0.3))
يمكن أن تكون الأرقام نسبًا مئوية أيضًا (grayscale(100%) تساوي grayscale(1)). توضع عدة دوال في قيمة واحدة، مفصولة بمسافات، وتُطبَّق بالترتيب: تعطي filter: grayscale(1) sepia(1) لونًا بنيًا، بينما تنتهي sepia(1) grayscale(1) إلى رمادي عادي.
drop-shadow تتبع الشكل
box-shadow دائمًا مستطيل (بزوايا مستديرة على الأكثر). أما drop-shadow() فتُرسم من البكسلات المرئية، فتحصل الأيقونة الشفافة على ظل بحدود الأيقونة:
النجمة الأولى تلقي ظلًا مربعًا من صندوقها المحيط غير المرئي. والثانية تلقي ظلًا بشكل نجمة. وعلى عكس box-shadow، لا يوجد في drop-shadow() انتشار ولا inset؛ وتشرحهما صفحة box-shadow.
مشكلة الحواف المموهة
تتلاشى الصورة المموهة عند حوافها، لأن التمويه يسحب إليها البكسلات الشفافة المحيطة. للاحتفاظ بحافة حادة (لخلفية رئيسية مموهة مثلًا)، ضع الصورة في حاوية عليها overflow: hidden وكبّر الصورة قليلًا كي تُقص الحافة الناعمة:
مرّر المؤشر فوق مربع (أو انتقل إليه بـ Tab) فتظهر ألوانه تدريجيًا.
من المفيد معرفته
الأداء. أنصاف أقطار التمويه الكبيرة على مساحات كبيرة هي الأعلى كلفة، خاصةً backdrop-filter على عناصر تتحرك أو تتمرر. اختبر على هاتف.
سهولة القراءة. لا تموّه أبدًا نصًا يحتاج الناس إلى قراءته، وافحص التباين للنص فوق لوحة مصنفرة.
التراكب. أي filter غير none تنشئ سياق تراكب جديدًا وتصبح الكتلة الحاوية لأحفاد position: fixed، مثل transform.
أخطاء شائعة
filter: blur(5). يحتاج نصف القطر إلى وحدة: blur(5px).
استخدام filter: blur() للوحة مصنفرة. يموّه نص اللوحة نفسه. استخدم backdrop-filter مع خلفية شفافة.
backdrop-filter لا تُظهر شيئًا. يجب أن تكون خلفية العنصر شفافة جزئيًا على الأقل، وأن يوجد شيء خلفه.
تصريحا filter. الثاني يستبدل الأول. ضع كل الدوال في قيمة واحدة.
ظلال بشكل صندوق على أيقونات شفافة. استخدم filter: drop-shadow() بدل box-shadow.
الأسئلة الشائعة
كيف أموّه عنصرًا في CSS؟
استخدم filter: blur(5px);. الطول هو نصف قطر التمويه: 0 حاد، والقيم الأكبر أكثر تمويهًا. يموّه العنصر وكل ما بداخله، بما في ذلك نصه وصوره.
كيف أموّه الخلفية التي خلف عنصر؟
استخدم backdrop-filter: blur(10px); على العنصر، مع خلفية شفافة جزئيًا مثل rgb(255 255 255 / 0.5). يبقى محتوى العنصر نفسه حادًا ويُموَّه ما خلفه، وهذا هو تأثير الزجاج المصنفر.
ما الفرق بين drop-shadow() وbox-shadow؟
تتبع box-shadow دائمًا صندوق العنصر المستطيل. أما filter: drop-shadow() فتتبع الشكل المرئي، بما في ذلك المناطق الشفافة في صورة PNG أو SVG، فيكون ظل الأيقونة بحدود الأيقونة.
كيف أجعل صورة بالأبيض والأسود في CSS؟
استخدم filter: grayscale(100%); (أو grayscale(1)). أضف انتقالًا وfilter: grayscale(0) عند التمرير لإعادة الألوان.
هل يمكن استخدام عدة مرشحات معًا؟
نعم، اذكرها مفصولة بمسافات: filter: grayscale(1) brightness(1.2) blur(1px);. تُطبَّق بالترتيب، فقد يغيّر الترتيب النتيجة. وتصريح filter الثاني يستبدل الأول.