У меня есть «сортируемая» таблица, где в заголовке сортируемого в данный момент столбца отображается значок:
Значок сортировки должен отображаться в конце текста (т. Е. Мы поддерживаем LTR / RTL). Я сейчас пользуюсь display:flex
. Однако, если ширина таблицы уменьшается и текст заголовка столбца начинает переноситься, я сталкиваюсь с неоднозначными состояниями, когда неясно, какой столбец отсортирован:
Вместо этого я хотел бы соответствовать следующим требованиям:
- Значок всегда должен быть «тесно» выровнен с «концом» самой длинной строки текста (даже если ячейка / кнопка переноса шире).
- Значок также должен быть выровнен снизу относительно последней строки текста.
- Значок никогда не должен переноситься на собственную линию.
- Кнопка должна присутствовать и должна охватывать всю ширину ячейки. (Это внутренняя стилизация и разметка может меняться по мере необходимости.)
- CSS и HTML, только если это вообще возможно.
- Он не может полагаться на известную / установленную ширину столбца или текст заголовка.
Например:
Я экспериментировал с кучей различных комбинаций display: inline/inline-block/flex/grid
, position
, ::before/::after
и даже float
(!) , Но не может получить желаемое поведение. Вот мой текущий код, демонстрирующий проблему:
.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>
Любые идеи о том, как сделать этот интерфейс? Это, вероятно, имеет мало общего с таблицей или кнопками. На самом деле мне нужно Thing A
«плотно» нижний / конец выровнен по Thing B
(гибкой ширины и который может иметь обернутый текст), но Thing A
не могу перенести на собственную линию.
Я пробовал возиться со flex
значениями, но любая комбинация либо делает перенос текста преждевременным, либо недостаточно быстрым.