- Việc thêm đường phân cách giữa các phần trên trang web là một kỹ thuật thiết kế phổ biến giúp sắp xếp nội dung rõ ràng và tăng khả năng đọc
- Có thể thêm đường phân cách bằng các kỹ thuật CSS hiện có như
border, nhưng chúng vẫn có những hạn chế như thay đổi kích thước, cần thêm mã, v.v.
- CSS Gap Decorations giải quyết các vấn đề này bằng cách bổ sung các thuộc tính như
column-rule và row-rule
Các kỹ thuật đường phân cách CSS hiện có và giới hạn của chúng
- Thuộc tính
border là cách phổ biến để thêm đường phân cách, nhưng có thể phát sinh các vấn đề sau
- Việc thêm
border có thể làm thay đổi kích thước phần tử
- Cần viết thêm mã cho phần tử đầu tiên và cuối cùng
- Khi xuống dòng trong bố cục Flexbox, đường phân cách có thể không phủ kín toàn bộ vùng
- Có thể dùng phần tử giả
::before và ::after để thêm đường phân cách, nhưng cũng có những hạn chế sau
- Cần thêm mã cho phần tử đầu tiên và cuối cùng
- Cần mã định vị tuyệt đối phức tạp
- Có thể mô phỏng đường phân cách bằng cách áp dụng màu nền cho grid container và đặt màu nền cho các mục
- Không thể điều chỉnh độ dài đường phân cách
- Nếu có ô trống, màu nền sẽ lộ ra
- Nếu mục không lấp đầy ô, màu nền sẽ lộ ra
- Không hoạt động nếu nền trang không phải màu đơn
- Có thể thêm đường phân cách bằng thuộc tính
column-rule trong bố cục đa cột, nhưng vẫn có các giới hạn sau
- Chỉ hoạt động trong bố cục đa cột
- Không thể kiểm soát hướng inline của nội dung
Đề xuất CSS Gap Decorations
- CSS Gap Decorations là một đề xuất mới nhằm giải quyết các vấn đề nêu trên
- Các điểm đề xuất chính
- Mở rộng thuộc tính
column-rule để có thể áp dụng cho bố cục grid và flexbox
- Giới thiệu thuộc tính mới
row-rule
- Cho phép thiết lập đường phân cách khác nhau cho từng phần của container
- Có thể thay đổi màu đường phân cách bằng thuộc tính
row-rule-color
.alternate-red-blue {
display: grid;
grid-template: repeat(auto-fill, 30px) / repeat(6, 100px);
gap: 10px;
row-rule: 1px solid;
row-rule-color: red blue;
}
- Có thể thiết lập các đường phân cách với độ dày và màu sắc khác nhau
.varying-widths {
display: grid;
grid-template: repeat(auto-fill, 30px) / repeat(6, 100px);
row-gap: 10px;
row-rule: 5px solid black / repeat(auto, 1px solid #666) / 3px solid black;
}
- Có thể kiểm soát cách đường phân cách hoạt động tại các điểm giao nhau
- Có thể dùng các thuộc tính
*-rule-break và *-rule-outset
- Có thể kiểm soát vị trí bắt đầu và kết thúc của đường phân cách tại điểm giao nhau
- Có thể tinh chỉnh chi tiết độ dài và độ lệch của đường phân cách
Yêu cầu phản hồi về đề xuất
- Đề xuất CSS Gap Decorations sẽ được cải thiện dựa trên phản hồi từ nhà phát triển
- Có thể xem thông tin chi tiết trong explainer chính thức
- Có thể gửi phản hồi qua GitHub issue
- Đặc biệt hoan nghênh phản hồi về cách đường phân cách hoạt động tại các điểm giao nhau
1 bình luận
Ý kiến trên Hacker News
Muốn có một pseudo-element mới:
.container:gap { background-color: red; }{ padding: 2px }để đặt khoảng trống ở cuối phần phân cách:gap-horzvà:gap-vertđể thiết lập riêng khoảng cách dọc và ngang.container:gap:nth-gap(2n) { color: blue; }để có màu xen kẽThiết kế bởi ủy ban không phải lúc nào cũng là tốt nhất, nhưng với tư cách là người không phải bản ngữ, tên thuộc tính được đề xuất không truyền tải rõ ý nghĩa
Mong rằng họ đã cân nhắc trường hợp sử dụng của các panel có thể điều chỉnh kích thước
Khi thêm border thì kích thước của phần tử thay đổi, điều này có thể không mong muốn
* { box-sizing: border-box; }saoKhá thú vị. Dạo này tôi chủ yếu làm UI bằng QML, và nó xử lý gần như mọi vấn đề kiểu này
Ý tưởng ổn, nhưng có lẽ nó sẽ hữu ích hơn vào khoảng 10 năm trước
.things .thing:not(:last-child) { border-bottom: 1px solid gray; }Đây đã là một vấn đề gây đau đầu suốt thời gian dài. Thật tuyệt khi thấy ai đó đang làm gì đó với nó
display: grid, nên không áp dụng cho các phần tử có chiều rộng không cố định|giữa các liên kết có thể xuất hiện ở cuối dòng đầu hoặc đầu dòng thứ haiTôi nhớ đến một câu ngạn ngữ của giới thiết kế Đức: "Khi nhà thiết kế không còn ý tưởng nào nữa, họ sẽ thêm vài đường kẻ"
Tôi gặp vấn đề này khá thường xuyên và muốn có cách tốt hơn
<hr/>Mong là cái này sẽ được thông qua... Việc dùng AI để vá lỗ hổng kiến thức của tôi về flexbox đúng là một ân huệ, nhưng cái này mới cho cảm giác là giải pháp thực sự