column-wrap

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

Thuộc tính CSS column-wrap xác định hành vi xuống dòng của các cột tràn trong bố cục nhiều cột CSS.

Cú pháp

css
/* Từ khóa */
column-wrap: auto;
column-wrap: nowrap;
column-wrap: wrap;

/* Giá trị toàn cục */
column-wrap: inherit;
column-wrap: initial;
column-wrap: revert;
column-wrap: revert-layer;
column-wrap: unset;

Giá trị

auto

Giá trị ban đầu. Nếu column-height của vùng chứa nội dung được đặt thành <length>, auto sẽ được hiểu là wrap, còn lại sẽ là nowrap.

nowrap

Các cột tràn ra theo chiều ngang (inline direction).

wrap

Các cột tràn được đặt vào một hàng mới theo chiều dọc (block direction).

Mô tả

Thuộc tính column-wrap có thể dùng để đặt các cột của bố cục nhiều cột CSS xuống dòng mới khi chúng bắt đầu tràn ra khỏi chiều rộng cột. Điều này hữu ích để tạo bố cục dễ đọc hơn khi sử dụng thuộc tính column-count hoặc column-width để tạo nhiều cột.

Nếu không có column-wrap, các cột dư thừa sẽ tràn sang một bên và người đọc phải cuộn theo chiều ngang để đọc hết nội dung. Thuộc tính column-height, kết hợp với column-wrap, cho phép bạn đặt chiều cao cố định cho các cột và tự động xuống hàng khi chạm đến cạnh vùng chứa.

Giá trị mặc định của column-wrapauto, được hiểu là wrap khi column-height được đặt thành giá trị <length>; wrap cho phép các cột có chiều cao cố định xuống nhiều hàng. Khi column-height bằng auto, column-wrap: auto được hiểu là nowrap, cho phép các cột tràn ngang nếu vùng chứa có chiều cao cố định.

Do hành vi mặc định này, thông thường bạn không cần đặt tường minh thuộc tính column-wrap.

Định nghĩa hình thức

Initial valueauto
Applies tomulticol elements
Inheritedno
Computed valueas specified
Animation typediscrete

Cú pháp hình thức

column-wrap = 
auto |
nowrap |
wrap

Ví dụ

Sử dụng cơ bản

Ví dụ này minh họa cách sử dụng cơ bản của thuộc tính column-wrap để tạo bố cục nhiều cột có xuống hàng bằng cách đặt thuộc tính column-height.

HTML

Chúng ta dùng một bài thơ của Dr. Seuss trong phần tử <ol> chứa 28 phần tử <li>, theo sau là tên tác giả trong phần tử <p>.

html
<ol>
  <li>One fish</li>
  <li>Two fish</li>
  <li>Red fish</li>
  <li>Blue fish</li>
  ...
</ol>
<p>-- Dr. Seuss</p>

CSS

Chúng ta định nghĩa <ol> là vùng chứa nhiều cột bằng cách đặt thuộc tính column-width thành 150px, nghĩa là vùng chứa sẽ có càng nhiều cột càng tốt, mỗi cột có độ rộng tối thiểu 150px. Thuộc tính gap đặt khoảng cách ngang giữa các cột và khoảng cách dọc giữa các hàng cột. Sau đó chúng ta đặt column-height thành 3em, khiến giá trị mặc định auto của column-wrap được hiểu là wrap để tạo các hàng cột xuống dòng.

css
ol {
  column-width: 150px;
  gap: 2em;
  column-height: 3em;
}

Kết quả

So sánh wrapnowrap

Ví dụ này có bố cục nhiều cột minh họa sự khác biệt giữa giá trị wrapnowrap bằng cách cho phép bạn chuyển đổi giá trị column-wrap của vùng chứa cột giữa hai giá trị này. Kết quả là bố cục chuyển đổi động giữa cuộn ngang và cuộn dọc.

HTML và JavaScript

Phần đánh dấu của ví dụ này chứa nhiều đoạn nội dung, lấy từ trang chủ HTML, CSS và JavaScript của MDN, cùng một phần tử <input type="checkbox"> điều khiển bằng JavaScript để chuyển đổi giá trị thuộc tính column-wrap của vùng chứa giữa nowrapwrap. HTML và JavaScript đã được ẩn để ngắn gọn.

CSS

Chúng ta biến phần tử <body> thành vùng chứa nhiều cột bằng cách đặt column-count thành 3. Sau đó đặt gap thành 3em 2em, tạo khoảng cách 3em giữa các hàng và 2em giữa các cột.

Tiếp theo đặt column-height thành 90vh, làm cho các cột gần bằng chiều cao viewport. Chúng ta cũng đặt column-wrap thành nowrap, khiến các cột nội dung dư thừa tràn sang ngang. Điều này cần thiết vì giá trị ban đầu của column-wrapauto, được hiểu là wrap khi column-height được đặt thành giá trị <length>.

Hộp kiểm chuyển đổi thuộc tính column-wrap giữa nowrapwrap. Khi đặt thành wrap, các cột nội dung dư thừa tràn theo chiều dọc sang hàng mới, tạo bố cục dọc. Giá trị column-height làm cho mỗi hàng cột lấp đầy viewport.

css
body {
  column-count: 3;
  gap: 3em 2em;
  padding: 0 2em;
  column-height: 90vh;
  column-wrap: nowrap;
}

Tiếp theo, chúng ta đặt thuộc tính column-span của phần tử <h1> thành all để tiêu đề trải rộng trên tất cả các cột, và đặt thuộc tính margin-top của <p> đầu tiên thành 0 để nó thẳng hàng với đỉnh cột.

css
h1 {
  column-span: all;
}

p:first-of-type {
  margin-top: 0;
}

Kết quả

Chuyển đổi hộp kiểm để thay đổi giá trị của thuộc tính column-wrap và chuyển đổi bố cục giữa cuộn ngang và cuộn dọc. Khi column-wrap được đặt thành nowrap, các cột tràn sang ngang; khi column-wrap được đặt thành wrap, các hàng cột mới được thêm vào theo chiều dọc.

Thông số kỹ thuật

Thông số kỹ thuật
CSS Multi-column Layout Module Level 2
# propdef-column-wrap

Tương thích trình duyệt

Xem thêm