تلاشي المحتوى بحواف ناعمة

ميزات الويب: الأقنعة

نظرة عامة

لتطبيق تدرج شفافية على حواف حاوية (على سبيل المثال، للإشارة إلى توفّر المزيد من المحتوى للتمرير أو لتلاشي النص)، استخدِم CSS Masking مع تدرج خطي. هذا الأسلوب أفضل من استخدام تراكب شبه شفاف لأنّه يتلاشى المحتوى نفسه، ما يسمح للخلفية بالظهور بشكل طبيعي بدون التداخل مع اختيار النص أو أحداث المؤشر.

التنفيذ

لتطبيق تلاشٍ ناعم للحواف:

تلاشي الحافة السفلية للحاوية

هذا مفيد للإشارة إلى وجود المزيد من المحتوى أدناه في منطقة قابلة للتمرير.

.container {
  /* Enable scrolling */
  overflow-y: auto;
  
  /* MANDATORY: Use vendor prefix for wider support in older browsers */
  -webkit-mask-image: linear-gradient(to bottom, black 80%, transparent 100%);
  
  /* Standard property for modern browsers */
  mask-image: linear-gradient(to bottom, black 80%, transparent 100%);
}

تلاشي الحواف العلوية والسفلية

يمكنك استخدام تدرج واحد مع نقاط توقف ألوان متعددة لتلاشي كلا الحافتين.

.dual-fade-container {
  /* Content is visible between 10% and 90% of the height */
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 10%, black 90%, transparent 100%);
  mask-image: linear-gradient(to bottom, transparent 0%, black 10%, black 90%, transparent 100%);
}

استراتيجيات احتياطية

إذا كان المتصفّح لا يتوافق مع mask-image أو الإصدار الذي يتضمّن بادئة:

  • لن يتلاشى المحتوى وسيتم عرضه بحواف حادة.
  • تأكَّد من أنّ الواجهة لا تزال تعمل وأنّ المحتوى قابل للقراءة بدون تأثير التلاشي (التحسين التدريجي).
  • يمكنك استخدام تراكب شبه شفاف كحل بديل، ولكن يجب معرفة لون الخلفية وقد يتداخل مع اختيار النص ما لم يتم استخدام pointer-events: none.
/* Fallback using an overlay for browsers that do not support masking */
@supports (not (mask-image: linear-gradient(to bottom, black, transparent))) and (not (-webkit-mask-image: linear-gradient(to bottom, black, transparent))) {
  .container {
    position: relative;
  }
  
  .container::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    height: 20%;
    /* Fallback assumes a solid background color (e.g., white) */
    background: linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,1));
    pointer-events: none; /* Allow interaction with text underneath */
  }
}