Trình đơn mục bổ sung

Khi nội dung mở rộng ra ngoài thành phần mẹ, bạn có nhiều cách để xử lý nội dung đó. Bạn có thể cuộn để thêm không gian bổ sung, cắt các cạnh tràn, biểu thị vùng cắt bằng dấu ba chấm và làm nhiều việc khác. Tình trạng tràn là đặc biệt quan trọng cần xem xét khi phát triển cho các ứng dụng dành cho điện thoại và nhiều kích thước màn hình.

Có hai tuỳ chọn cắt khác nhau trong CSS; text-overflow sẽ giúp từng dòng văn bản riêng lẻ, còn các thuộc tính overflow sẽ giúp kiểm soát tràn trong mô hình hộp.

Tràn dòng đơn bằng text-overflow

Sử dụng thuộc tính text-overflow trên bất kỳ phần tử nào chứa(các) nút văn bản, ví dụ như đoạn, <p>. Thuộc tính này chỉ định cách văn bản xuất hiện khi không vừa với không gian có sẵn của phần tử. Tất cả văn bản HTML có thể xem được trên một trang đều nằm trong nút văn bản. Để sử dụng text-overflow, bạn cần có một dòng văn bản không bao bọc, vì vậy, bạn cũng phải đặt overflow thành hidden và có giá trị white-space ngăn không cho xuống dòng.

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

Sử dụng thuộc tính tràn

Thuộc tính tràn được đặt trên một phần tử để kiểm soát điều sẽ xảy ra khi các phần tử con của nó cần nhiều không gian hơn mức có sẵn. Điều này có thể là có chủ ý, như trong bản đồ tương tác như Google Maps, trong đó người dùng xoay quanh một hình ảnh lớn được cắt xén thành một kích thước cụ thể. Lỗi này cũng có thể ngoài ý muốn, chẳng hạn như trong một ứng dụng nhắn tin, trong đó người dùng nhập một tin nhắn dài không vừa với bong bóng văn bản.

Bạn có thể xem tràn hai phần. Phần tử mẹ có một không gian bị ràng buộc cố định và không thay đổi. Bạn có thể coi đây là một cửa sổ. Các phần tử con là nội dung muốn có thêm không gian từ phần tử mẹ. Bạn có thể xem đây là nội dung mà bạn đang nhìn qua cửa sổ. Việc quản lý vùng tràn sẽ giúp định hướng cách cửa sổ đóng khung nội dung này.

Cuộn trên trục tung và trục hoành

Thuộc tính overflow-y kiểm soát tình trạng tràn thực tế dọc theo trục dọc của khung nhìn thiết bị, do đó, cuộn lên và xuống.

Thuộc tính overflow-x kiểm soát tràn dọc theo trục ngang của khung nhìn thiết bị, nhờ đó cuộn sang trái và sang phải.

Thuộc tính logic cho hướng cuộn

Hỗ trợ trình duyệt

  • Chrome: không được hỗ trợ.
  • Edge: không được hỗ trợ.
  • Firefox: 69.
  • Safari: không được hỗ trợ.

Nguồn

Các thuộc tính overflow-inlineoverflow-block đặt chế độ tràn dựa trên hướng tài liệu và chế độ ghi.

Ký hiệu viết tắt overflow

Viết tắt overflow đặt cả kiểu overflow-xoverflow-y trên một dòng:

overflow: hidden scroll;

Nếu bạn chỉ định hai từ khoá, thì từ khoá đầu tiên sẽ áp dụng cho overflow-x và từ khoá thứ hai sẽ áp dụng cho overflow-y. Nếu không, cả overflow-xoverflow-y sẽ sử dụng cùng một giá trị.

Giá trị

Hãy cùng tìm hiểu kỹ hơn về các giá trị và từ khoá có thể dùng cho tài sản overflow.

overflow: visible (mặc định)
Nếu bạn không đặt thuộc tính này, overflow: visible sẽ là giá trị mặc định cho web. Điều này giúp đảm bảo rằng nội dung không bao giờ bị ẩn do nhầm lẫn và tuân thủ các nguyên tắc cốt lõi là "không bao giờ ẩn nội dung" hoặc "bố cục an toàn của bố cục chính xác".
overflow: hidden
Với overflow: hidden, nội dung sẽ bị cắt theo hướng đã chỉ định và không có thanh cuộn nào được cung cấp để hiển thị nội dung đó.
overflow: scroll
overflow: scroll bật thanh cuộn để cho phép người dùng cuộn qua nội dung. Ngay cả khi nội dung hiện không bị tràn, thanh cuộn vẫn sẽ xuất hiện. Đây là một cách hiệu quả để giảm sự thay đổi bố cục trong tương lai nếu một vùng chứa có thể cuộn được trong tương lai, chẳng hạn như dựa trên việc đổi kích thước và chuẩn bị trực quan cho người dùng về các khu vực có thể cuộn.
overflow: clip
Giống như overflow: hidden, nội dung có overflow: clip được cắt vào hộp khoảng đệm của phần tử. Sự khác biệt giữa cliphidden là từ khoá clip cũng cấm tất cả thao tác cuộn, bao gồm cả thao tác cuộn có lập trình.
overflow: auto
Cuối cùng là giá trị thường được dùng nhất, overflow: auto. Điều này tuân theo lựa chọn ưu tiên của người dùng và hiển thị thanh cuộn nếu cần, nhưng ẩn thanh cuộn theo mặc định và giao trách nhiệm cuộn cho người dùng và trình duyệt.

Cuộn và tràn

Nhiều hành vi overflow trong số này tạo ra thanh cuộn, nhưng có một số hành vi và thuộc tính cuộn cụ thể có thể giúp bạn kiểm soát việc cuộn trên vùng chứa mục bổ sung.

Tính năng cuộn và hỗ trợ tiếp cận

Điều quan trọng là phải đảm bảo rằng vùng có thể cuộn có thể chấp nhận tiêu điểm để người dùng bàn phím có thể nhấn phím Tab để chuyển đến hộp, sau đó sử dụng các phím mũi tên để cuộn.

Để cho phép hộp cuộn chấp nhận tiêu điểm, hãy thêm tabindex="0", tên có thuộc tính aria-labelledby và thuộc tính role thích hợp. Ví dụ:

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

Sau đó, bạn có thể sử dụng CSS để cho biết rằng hộp có tiêu điểm, sử dụng thuộc tính outline để đưa ra gợi ý trực quan rằng hộp đó hiện có thể cuộn được.

Trong bài viết Sử dụng CSS để thực thi tính năng hỗ trợ tiếp cận, Adrian Roselli minh hoạ cách CSS có thể giúp ngăn chặn sự hồi quy về tính năng hỗ trợ tiếp cận. Ví dụ: để chỉ bật tính năng cuộn và thêm chỉ báo tiêu điểm nếu sử dụng đúng các thuộc tính. Các quy tắc sau sẽ chỉ làm cho hộp có thể cuộn nếu hộp có thuộc tính tabindex, aria-labelledbyrole.

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

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

Định vị thanh cuộn trong mô hình hộp

Thanh cuộn chiếm không gian trong hộp khoảng đệm và có thể cạnh tranh không gian nếu inline chứ không phải overlaid. Mô-đun mô hình hộp mở rộng thêm về nguồn thay đổi bố cục tiềm năng này.

root-scroller so với implicit-scroller

Bạn có thể nhận thấy rằng một số thanh cuộn có hành vi kéo để làm mới và các hành vi đặc biệt khác, đặc biệt là khi phát triển cho các ứng dụng di động và kết hợp. Hành vi cuộn này xảy ra trên trình cuộn gốc. Chỉ có một thanh cuộn gốc trên một trang. Theo mặc định, documentElement là trình cuộn gốc của trang. Tuy nhiên, khi thay đổi phần tử nào là trình cuộn gốc, các hành vi đặc biệt có thể được áp dụng cho các trình cuộn khác với documentElement, chúng tôi gọi trình cuộn mới này là trình cuộn gốc ngầm ẩn.

Để tạo một trình cuộn gốc, bạn có thể sử dụng một tính năng có tên là quảng cáo hiệu ứng cuộn bằng cách đặt một vùng chứa ở vị trí cố định, đảm bảo vùng chứa bao phủ toàn bộ khung nhìn và chỉ mục z ở trên cùng bằng một trình cuộn. Trải nghiệm trình cuộn gốc và trình cuộn ngầm ẩn lồng nhau tại đây.

Video này cho thấy một thanh cuộn gốc có hành vi bật lại và các tính năng tạo kiểu mới,
so với việc cuộn một thanh cuộn ngầm ẩn không có hành vi cuộn nâng cao.

scroll-behavior

Hỗ trợ trình duyệt

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

Nguồn

scroll-behavior cho phép bạn chọn sử dụng tính năng cuộn do trình duyệt kiểm soát đến các phần tử. Điều này cho phép bạn chỉ định cách xử lý các thành phần điều hướng trong trang như .scrollTo() hoặc đường liên kết.

Tính năng này đặc biệt hữu ích khi sử dụng cùng với prefers-reduced-motion để chỉ định hành vi cuộn dựa trên lựa chọn ưu tiên của người dùng.

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

overscroll-behavior

Hỗ trợ trình duyệt

  • Chrome: 63.
  • Cạnh: 18.
  • Firefox: 59.
  • Safari: 16.

Nguồn

Nếu bạn đã từng đến cuối lớp phủ phương thức, sau đó tiếp tục cuộn và di chuyển trang phía sau lớp phủ, thì đây là quá trình tạo chuỗi cuộn hoặc chuyển lên vùng chứa cuộn mẹ. Thuộc tính overscroll-behavior cho phép bạn ngăn tình trạng chức năng cuộn tràn bị rò rỉ vào vùng chứa mẹ (gọi là chuỗi cuộn).

Kiểm tra mức độ hiểu biết

Kiểm tra kiến thức của bạn về tình trạng tràn

tràn văn bản và tràn phần tử có giống nhau không?

false
đúng

Thuộc tính overflow chấp nhận 2 từ khoá, từ khoá đầu tiên là cho trục nào?

ngành dọc
ngang

Thanh cuộn sử dụng không gian nào trong mô hình hộp khi hiển thị và cùng dòng?

hộp có đường viền
hộp khoảng đệm
hộp lề
hộp nội dung

Để bẫy thêm động lượng từ thao tác cuộn trong một trình cuộn ngầm ẩn lồng, bạn sẽ sử dụng thuộc tính nào?

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

Tài nguyên

Vấn đề tràn và mất dữ liệu trong CSS trên Smashing Magazine