Tôi có một bảng "có thể sắp xếp" trong đó tiêu đề của cột hiện được sắp xếp sẽ hiển thị một biểu tượng:
Biểu tượng sắp xếp sẽ được hiển thị ở cuối văn bản (nghĩa là chúng tôi đang hỗ trợ LTR / RTL). Tôi hiện đang sử dụng display:flex
. Tuy nhiên, nếu chiều rộng bảng co lại và văn bản tiêu đề cột bắt đầu bao bọc, tôi chạy vào trạng thái mơ hồ nơi không rõ cột nào được sắp xếp:
Thay vào đó tôi muốn đáp ứng các yêu cầu sau:
- Biểu tượng luôn được căn chỉnh "chặt chẽ" với "kết thúc" của dòng văn bản dài nhất (ngay cả khi ô / nút gói rộng hơn).
- Biểu tượng cũng phải được căn dưới cùng với hàng văn bản cuối cùng.
- Biểu tượng không bao giờ nên quấn vào một dòng của riêng nó.
- Nút phải có mặt và phải trải rộng toàn bộ chiều rộng của ô. (Đó là kiểu dáng bên trong và đánh dấu có thể thay đổi khi cần thiết.)
- CSS và HTML chỉ khi có thể.
- Nó không thể dựa vào độ rộng cột đã biết / đặt hoặc tiêu đề văn bản.
Ví dụ:
Tôi đã thử nghiệm với một loạt các kết hợp khác nhau của display: inline/inline-block/flex/grid
, position
, ::before/::after
, và thậm chí float
(!) Nhưng không thể có được những hành vi mong muốn. Đây là mã hiện tại của tôi chứng minh vấn đề:
.table {
border-collapse: collapse;
width: 100%;
}
.thead {
border-bottom: 3px solid #d0d3d3;
}
.thead .tr {
vertical-align: bottom;
}
.button {
padding: 1rem;
text-align: start;
font-family: Arial, "noto sans", sans-serif;
font-size: 0.875rem;
border: 0;
background-color: transparent;
width: 100%;
display: flex;
align-items: flex-end;
font-weight: bold;
line-height: 1.4;
}
.sort {
width: 1.25rem;
height: 1.25rem;
}
<table class="table">
<thead class="thead">
<tr class="tr">
<th class="th">
<button class="button">
Age
<span class="sort"></span>
</button>
</th>
<th class="th">
<button class="button">
Favorite Food
<span class="sort"></span>
</button>
</th>
<th class="th" aria-sort="ascending">
<button class="button">
Favorite Color
<span class="sort">
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" role="presentation" style="width: 1.25rem; height: 1.25rem;"> <path d="M11.4709 4.2136C11.7638 3.92071 12.2386 3.92071 12.5315 4.2136L17.1277 8.8098C17.4206 9.10269 17.4206 9.57756 17.1277 9.87046C16.8348 10.1633 16.3599 10.1633 16.0671 9.87046L12.7512 6.55459V19.25C12.7512 19.6642 12.4154 20 12.0012 20C11.587 20 11.2512 19.6642 11.2512 19.25V6.55459L7.93533 9.87046C7.64244 10.1633 7.16756 10.1633 6.87467 9.87046C6.58178 9.57756 6.58178 9.10269 6.87467 8.8098L11.4709 4.2136Z"> </path></svg>
</span>
</button>
</th>
<th class="th">
<button class="button">
Likes Neil Diamond?
<span class="sort"></span>
</button>
</th>
</tr>
</thead>
</table>
Bất kỳ ý tưởng về làm thế nào để thực hiện giao diện người dùng này? Điều này có lẽ ít liên quan đến bảng hoặc công cụ nút. Thực sự tôi cần Thing A
đáy / cuối "chặt chẽ" được căn chỉnh theo Thing B
(có chiều rộng linh hoạt và có thể có văn bản được bọc) nhưng Thing A
không thể quấn vào một dòng của chính nó.
Tôi đã cố gắng làm rối tung các flex
giá trị nhưng bất kỳ sự kết hợp nào cũng làm cho văn bản bị gói sớm hoặc không đủ sớm.