รายการเพิ่มเติม

เมื่อเนื้อหาขยายไปเกินกว่าเนื้อหาหลัก คุณจะมีตัวเลือกมากมายในการจัดการเนื้อหานั้น คุณสามารถเลื่อนเพื่อเพิ่มพื้นที่ ตัดขอบที่เกินออกมา ระบุข้อความที่ถูกตัดออกด้วยเครื่องหมายจุด 3 จุด และอื่นๆ อีกมากมาย รายการเพิ่มเติมมีความสำคัญอย่างยิ่งในการพิจารณาเมื่อพัฒนาสำหรับแอปพลิเคชันโทรศัพท์และหน้าจอหลายขนาด

ตัวเลือกการตัดใน CSS มี 2 แบบ ได้แก่ text-overflow จะช่วยตัดข้อความแต่ละบรรทัด และพร็อพเพอร์ตี้ overflow จะช่วยควบคุมส่วนที่ตัดออกในโมเดลกล่อง

เกินบรรทัดเดียวด้วย text-overflow

ใช้พร็อพเพอร์ตี้ text-overflow ในองค์ประกอบที่มีโหนดข้อความ เช่น ย่อหน้า <p> ซึ่งจะระบุลักษณะที่ข้อความจะปรากฏเมื่อไม่พอดีกับพื้นที่ว่างขององค์ประกอบ ข้อความ HTML ที่ดูได้ทั้งหมดในหน้าเว็บอยู่ในโหนดข้อความ หากต้องการใช้ text-overflow คุณต้องมีข้อความบรรทัดเดียวที่ไม่ได้ตัดขึ้นบรรทัดใหม่ ดังนั้นคุณต้องตั้งค่า overflow เป็น hidden และมีค่า white-space ที่ป้องกันไม่ให้ตัดขึ้นบรรทัดใหม่ด้วย

p {
   
text-overflow: ellipsis;
   
overflow: hidden;
   
white-space: nowrap;
}

การใช้พร็อพเพอร์ตี้การเลื่อนออก

พร็อพเพอร์ตี้ Overflow ตั้งค่าไว้ในองค์ประกอบเพื่อควบคุมสิ่งที่จะเกิดขึ้นเมื่อองค์ประกอบย่อยต้องใช้พื้นที่มากกว่าที่มี การดำเนินการเช่นนี้อาจเกิดขึ้นโดยเจตนา เช่น ในแผนที่แบบอินเทอร์แอกทีฟอย่าง Google Maps ซึ่งผู้ใช้เลื่อนดูรูปภาพขนาดใหญ่เพื่อตัดเป็นขนาดที่เจาะจง หรืออาจเกิดขึ้นโดยไม่ตั้งใจ เช่น ในแอปพลิเคชันแชทที่ผู้ใช้พิมพ์ข้อความยาวๆ ซึ่งไม่พอดีกับกล่องข้อความ

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

การเลื่อนบนแกนแนวตั้งและแนวนอน

พร็อพเพอร์ตี้ overflow-y จะควบคุมส่วนที่ลอยไปตามแกนแนวตั้งของวิวพอร์ตของอุปกรณ์ ดังนั้นจึงมีการเลื่อนขึ้นและลง

พร็อพเพอร์ตี้ overflow-x จะควบคุมส่วนเกินในแกนแนวนอนของวิวพอร์ตของอุปกรณ์ ดังนั้นจึงมีการเลื่อนไปทางซ้ายและขวา

พร็อพเพอร์ตี้เชิงตรรกะสำหรับทิศทางการเลื่อน

การรองรับเบราว์เซอร์

  • Chrome: ไม่รองรับ
  • Edge: ไม่รองรับ
  • Firefox: 69
  • Safari: ไม่รองรับ

แหล่งที่มา

พร็อพเพอร์ตี้ overflow-inline และ overflow-block จะตั้งค่าการเลื่อนออกตามทิศทางของเอกสารและโหมดการเขียน

ชวเลข overflow

ชวเลข overflow จะกำหนดทั้งรูปแบบ overflow-x และ overflow-y ในบรรทัดเดียว

overflow: hidden scroll;

หากระบุคีย์เวิร์ด 2 รายการ คีย์เวิร์ดแรกจะมีผลกับ overflow-x และ คีย์เวิร์ด 2 จะมีผลกับ overflow-y ไม่เช่นนั้น ทั้ง overflow-x และ overflow-y จะใช้ค่าเดียวกัน

ค่า

เรามาดูรายละเอียดเกี่ยวกับค่าและคีย์เวิร์ดที่ใช้ได้กับพร็อพเพอร์ตี้ overflow กัน

overflow: visible (ค่าเริ่มต้น)
หากไม่ได้ตั้งค่าพร็อพเพอร์ตี้ overflow: visible จะเป็นค่าเริ่มต้นสำหรับเว็บ วิธีนี้ช่วยให้มั่นใจว่าเนื้อหาจะไม่ถูกซ่อนโดยไม่ตั้งใจและเป็นไปตามหลักการหลักของ "ไม่ซ่อนเนื้อหา" หรือ "เลย์เอาต์ที่ปลอดภัยของเลย์เอาต์ที่แม่นยำ"
overflow: hidden
มีการตัดเนื้อหา overflow: hidden ตามทิศทางที่ระบุ และไม่มีการให้แถบเลื่อนแสดง
overflow: scroll
overflow: scroll จะเปิดใช้แถบเลื่อนเพื่ออนุญาตให้ผู้ใช้เลื่อนดูเนื้อหาได้ แถบเลื่อนจะปรากฏขึ้นแม้ว่าตอนนี้เนื้อหาจะยังไม่แสดงเกินขอบก็ตาม ซึ่งเป็นวิธีที่ดีในการลดการเปลี่ยนแปลงของเลย์เอาต์ในอนาคตในกรณีที่คอนเทนเนอร์อาจเลื่อนได้ในอนาคต เช่น ในการปรับขนาด และทำให้ผู้ใช้เตรียมพร้อมสําหรับพื้นที่ที่เลื่อนได้
overflow: clip
เช่นเดียวกับ overflow: hidden เนื้อหาที่มี overflow: clip จะได้รับการครอบตัดให้พอดีกับกล่องระยะห่างจากขอบขององค์ประกอบ ความแตกต่างระหว่าง clip กับ hidden คือคีย์เวิร์ด clip จะห้ามการเลื่อนทั้งหมดด้วย รวมถึงการเลื่อนแบบเป็นโปรแกรม
overflow: auto
สุดท้าย ค่าที่ใช้กันมากที่สุดคือ overflow: auto การดำเนินการนี้จะเป็นไปตามค่ากำหนดของผู้ใช้และแสดงแถบเลื่อนหากจำเป็น แต่ซ่อนแถบเลื่อนโดยค่าเริ่มต้น รวมทั้งมอบความรับผิดชอบในการเลื่อนไปยังผู้ใช้และเบราว์เซอร์ด้วย

การเลื่อนและการวางซ้อน

ลักษณะการทำงานของ overflow หลายๆ อย่างเหล่านี้ทำให้เกิดแถบเลื่อน แต่มีลักษณะการทำงานและพร็อพเพอร์ตี้เฉพาะบางอย่างที่จะช่วยคุณควบคุมการเลื่อนในคอนเทนเนอร์รายการเพิ่มเติมได้

การเลื่อนและการช่วยเหลือพิเศษ

สิ่งสำคัญก็คือต้องตรวจสอบว่าพื้นที่ที่เลื่อนได้นั้นยอมรับโฟกัสได้ เพื่อให้ผู้ใช้แป้นพิมพ์กด Tab ไปยังช่องได้โดยใช้แป้นลูกศรเพื่อเลื่อน

หากต้องการให้ช่องเลื่อนยอมรับโฟกัส ให้เพิ่ม tabindex="0", ชื่อที่มีแอตทริบิวต์ aria-labelledby และแอตทริบิวต์ role ที่เหมาะสม เช่น

<div tabindex="0" role="region" aria-labelledby="id-of-descriptive-text">
    content
</div>

จากนั้นจะใช้ CSS เพื่อระบุว่าช่องมีโฟกัส โดยใช้พร็อพเพอร์ตี้ outline เพื่อแสดงข้อบ่งชี้ที่เป็นรูปภาพว่าตอนนี้จะเลื่อนกล่องได้

ในการใช้ CSS เพื่อบังคับใช้การช่วยเหลือพิเศษ Adrian Roselli สาธิตวิธีที่ CSS สามารถช่วยป้องกันการถดถอยของการช่วยเหลือพิเศษได้ เช่น การเปิดการเลื่อนและเพิ่มสัญญาณบอกสถานะโฟกัสเมื่อมีการใช้แอตทริบิวต์ที่ถูกต้องเท่านั้น กฎต่อไปนี้จะทำให้กล่องเลื่อนได้ก็ต่อเมื่อมีแอตทริบิวต์ tabindex, aria-labelledby และ role

[role][aria-labelledby][tabindex] {
 
overflow: auto;
}

[role][aria-labelledby][tabindex]:focus {
 
outline: .1em solid blue;
}

การวางตำแหน่งแถบเลื่อนภายในรูปแบบกล่อง

แถบเลื่อนใช้พื้นที่ภายในช่องระยะห่างจากขอบและอาจแย่งพื้นที่กันหากinlineไม่ใช่overlaid โมดูลรูปแบบกล่องจะขยายมากขึ้นเกี่ยวกับแหล่งที่มาที่เป็นไปได้ของการเปลี่ยนเลย์เอาต์นี้

root-scroller กับ implicit-scroller

คุณอาจสังเกตเห็นว่าแถบเลื่อนบางรุ่นมีลักษณะการทำงานแบบพุลเพื่อรีเฟรชและมีลักษณะการทำงานพิเศษอื่นๆ โดยเฉพาะอย่างยิ่งเมื่อพัฒนาสำหรับแอปพลิเคชันบนอุปกรณ์เคลื่อนที่และแอปพลิเคชันแบบไฮบริด ลักษณะการทำงานของการเลื่อนเช่นนี้จะเกิดขึ้นในการเลื่อนรูท ในหน้าหนึ่งๆ จะมีตัวเลื่อนรูทเพียงรายการเดียว โดยค่าเริ่มต้น documentElement จะเป็นเครื่องมือเลื่อนรูทของหน้า แต่เมื่อเปลี่ยนองค์ประกอบที่เป็นแถบเลื่อนรูท พฤติกรรมพิเศษนั้นสามารถใช้กับแถบเลื่อนอื่นๆ ที่ไม่ใช่ documentElement เราเรียกตัวเลื่อนแบบใหม่นี้ว่าตัวเลื่อนรากแบบโดยนัย

หากต้องการสร้างเครื่องมือเลื่อนรูท คุณสามารถใช้สิ่งที่เรียกว่าการเลื่อนระดับแถบเลื่อน โดยวางคอนเทนเนอร์เป็นแบบคงที่เพื่อให้แน่ใจว่าครอบคลุมวิวพอร์ตทั้งหมดและมีดัชนี z อยู่ด้านบนด้วยแถบเลื่อน สัมผัสประสบการณ์การเลื่อนรูทเทียบกับแถบเลื่อนแบบโดยนัยที่ซ้อนกันได้ที่นี่

วิดีโอแสดงตัวเลื่อนรูทที่มีลักษณะการเด้งและฟีเจอร์การจัดสไตล์ใหม่
เมื่อเทียบกับการเลื่อนตัวเลื่อนโดยนัยที่ไม่มีลักษณะการเลื่อนที่ปรับปรุงแล้ว

scroll-behavior

การรองรับเบราว์เซอร์

  • Chrome: 61
  • Edge: 79
  • Firefox: 36
  • Safari: 15.4

แหล่งที่มา

scroll-behavior ให้คุณเลือกใช้การเลื่อนไปยังองค์ประกอบต่างๆ ที่เบราว์เซอร์ควบคุมได้ ซึ่งจะช่วยให้คุณระบุวิธีจัดการการนำทางในหน้าเว็บ เช่น .scrollTo() หรือลิงก์ได้

ซึ่งจะเป็นประโยชน์อย่างยิ่งเมื่อใช้ร่วมกับ prefers-reduced-motion เพื่อระบุลักษณะการเลื่อนตามความต้องการของผู้ใช้

@media (prefers-reduced-motion: no-preference) {
 
.scroll-view {
   
scroll-behavior: auto;
 
}
}

overscroll-behavior

การรองรับเบราว์เซอร์

  • Chrome: 63
  • Edge: 18.
  • Firefox: 59
  • Safari: 16

แหล่งที่มา

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

ทดสอบความเข้าใจ

ทดสอบความรู้เรื่องการล้น

ข้อความที่ตัดออกและองค์ประกอบที่ตัดออกเหมือนกันไหม

เท็จ
จริง

พร็อพเพอร์ตี้ overflow ยอมรับคีย์เวิร์ด 2 รายการ คีย์เวิร์ดแรกใช้กับแกนใด

แนวตั้ง
แนวนอน

แถบเลื่อนของโมเดลใช้พื้นที่ใดในรูปแบบกล่องเมื่อแสดงและแทรกในบรรทัด

กล่องระยะขอบ
กล่องเนื้อหา
กล่องระยะห่างจากขอบ
ช่องเส้นขอบ

คุณจะใช้พร็อพเพอร์ตี้ใดเพื่อดักจับโมเมนตัมเพิ่มเติมจากการเลื่อนในแถบเลื่อนแบบโดยนัยที่ซ้อนกันอยู่

scroll-padding
overscroll-behavior
scroll-hint
scroll-behavior
overscroll-effect

แหล่งข้อมูล

Overflow และ Data Loss ใน CSS จาก Smashing Magazine