การเฟดเนื้อหาขอบนุ่มนวล

ฟีเจอร์บนเว็บ มาสก์

ภาพรวม

หากต้องการใช้การไล่ระดับสีแบบโปร่งใสกับขอบของคอนเทนเนอร์ (เช่น เพื่อระบุว่ามีเนื้อหาเพิ่มเติมให้เลื่อนดูหรือเพื่อทำให้ข้อความจางลง) ให้ใช้การมาสก์ CSS กับการไล่ระดับสีแบบเส้นตรง วิธีนี้ดีกว่าการใช้การวางซ้อนกึ่งโปร่งใสเนื่องจากจะทำให้เนื้อหาจางลงจริงๆ ซึ่งช่วยให้พื้นหลังแสดงอย่างเป็นธรรมชาติโดยไม่รบกวนการเลือกข้อความหรือเหตุการณ์เคอร์เซอร์

การใช้งาน

วิธีใช้การเฟดขอบแบบนุ่มนวล

การทำให้ขอบด้านล่างของคอนเทนเนอร์จางลง

ซึ่งมีประโยชน์ในการระบุว่ามีเนื้อหาเพิ่มเติมด้านล่างในพื้นที่ที่เลื่อนได้

.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%);
}

การเฟดทั้งขอบด้านบนและด้านล่าง

คุณสามารถใช้การไล่ระดับสีเดียวที่มีจุดสีหลายจุดเพื่อทำให้ขอบทั้ง 2 ด้านจางลงได้

.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 */
  }
}