Элементы
th
по своей природе имеют отображаемое значение display: table-cell
, поэтому изменение их на display: flex
будет иметь драматические c последствия, как вы видели.
1. Попробуйте 'inline-flex' вместо 'flex'
Как display: block
, display: flex
элементы не будут естественно l ie рядом друг с другом.
Как display: inline-block
, однако элементы display: inline-flex
будут.
Это, вероятно, тоже не будет на 100% правильным, поскольку ячейки таблицы (включая заголовки) ведут себя иначе, чем встроенные элементы.
2. (Предпочтительно) Используйте другой элемент внутри th
<th>
<div class="header-inner">
<p>col name</p>
<ArrowDown />
</div>
</th>
.header-inner {
display: flex;
}
Хотя это добавляет еще один элемент в DOM, вероятно, это более безопасный подход. Вы не нарушаете присущие свойства макета <th>
элементов и получаете ожидаемое поведение flexbox, которое вам нужно.
В общем, если вы пытаетесь создать сложный макет с минимальными элементами , и он ведет себя не так, как вам хотелось бы, попробуйте разделить свои CSS проблемы. Позвольте заголовкам таблиц иметь свои естественно самоуверенные свойства макета и добавьте свои сложности в отдельный элемент.