Как вертикально выровнять значок в центре заголовка таблицы - PullRequest
4 голосов
/ 11 марта 2019

У меня есть динамическая таблица, с динамическим числом столбцов и строк ... В заголовке таблицы мне нужно исправить значок сортировки вертикально по центру. Даже размер текста заголовка таблицы является динамическим, и ни одна из строк не растет ... как выровнять значок сортировки по вертикали при увеличении размера текста?

jsfiddle

<table style="width:100%">
  <tr>
    <th><div class='filter-container header-container'> <div class='header-text'>  Firstname Firstname Firstnam eFirstnam eFirstname Firstname Firstname Firstname Firstname</div><div class='icon-right'> <span    class= "fa fa-sort-asc fa-lg sort-icon "></span><span   class= "fa fa-sort-desc fa-lg sort-icon  "></span></div></div></th>
    <th>Lastname</th> 
    <th>Age</th>
  </tr>
  <tr>
    <td>Jill</td>
    <td>Smith</td>
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td>
    <td>94</td>
  </tr>
  <tr>
    <td>John</td>
    <td>Doe</td>
    <td>80</td>
  </tr>
</table>

CSS:

table, th, td {
  border: 1px solid black;
  border-collapse: collapse;
}

th, td {
  padding: 5px;
}

.filter-container {
  width: 100%;
  height: 100%;
  position: relative;
  padding: 0px !important;
  margin: 0px !important;
}

.header-container {
  height: 100%;
  vertical-align: middle;
  text-align: center;
}

.header-text {
  font-size: 22px;
  line-height: 24px;
  color: #000000;
  font-weight: normal;
  width: 90%;
  float: left;
  letter-spacing: 0;
  text-align: left;
}

.sort-icon {
  float: right !important;
  clear: right;
  height: 1px !important;
}

Ответы [ 7 ]

3 голосов
/ 11 марта 2019

Использовать оболочку содержимого ячейки заголовка таблицы. Внутри него используйте два элемента. Текст и значок:

<th>
  <div class="aligner">
    <div class="text">any text here can be as long as you want</div>
    <div class="icon">your icon here</div>
  </div>
</th>

и использование:

th .aligner {
  display: flex;
  align-items: center;
}

Очевидно, что оба выровненных элемента должны иметь одинаковые вертикальные padding, border и margin с.


Используя пример, который вы только что добавили, вот стартер: https://jsfiddle.net/websiter/h94yen82/

Я удалил ваши стили для сортировщика и добавил:

.header-container {
  justify-content: space-between;
}
.sort-icon {
  display: flex;
  flex-direction: column;
  justify-content: center;
  height: 0;
}
2 голосов
/ 11 марта 2019

Быстро / просто исправить, добавьте это к .icon-right:

.icon-right {
    ...
    top: calc(50% - 8px);
    position: relative;
}

Редактировать

Поскольку вы хотите применить это ко всем столбцам, попробуйте это:

.icon-right {/* Add this new class */
    top: calc(50% - 8px);
    position: absolute;
    right: 5px;
}

th {/* Add this new class */
    position: relative;
}

.filter-container {
    ...
    /*position: relative;*/ /* remove this line */
    ...
}

Попробуйте jsfiddle .

0 голосов
/ 11 марта 2019

Высота ответа почти для двух значков равна 0px или 1px, чтобы сделать два значка почти, поэтому не можете щелкнуть для сортировки. Я думаю, что вы должны использовать другой значок (или изображение) ширину расстояния до верхней и нижней рациональной (например, fa-caret). Как насчет этого?

https://jsfiddle.net/2merngco/

0 голосов
/ 11 марта 2019

вы можете использовать преобразование для выравнивания div по вертикали

.icon-right{
  top: 40%;
  transform: translateY(-40%);
  position: relative;
  line-height: 1.8em;
}
0 голосов
/ 11 марта 2019

Попробуйте эти свойства, я думаю, это полезно для вас.

.header-container {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.icon-right {
  margin-top: -15px;
}

table, th, td {
  border: 1px solid black;
  border-collapse: collapse;
}
th, td {
  padding: 5px;
}

.filter-container {
	width: 100%;
	height: 100%;
	position: relative;
	padding: 0px !important;
	margin: 0px !important;
}
.header-container {
	height: 100%;
	vertical-align: middle;
	text-align: center;
}

.header-text {
    font-size: 22px;
    line-height: 24px;
}
.header-text {
    color: #000000;
    font-weight: normal;
}

.header-text {
	width: 90%;
	float: left;
	text-align: start;
	letter-spacing: 0;
	text-align: left;
}
.sort-icon {
	float: right !important;
	clear: right;
  height: 1px !important;
}

 .header-container {
        display: flex;
        align-items: center;
        justify-content: space-between;
    }

.icon-right {
    margin-top: -15px;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<table style="width:100%">
  <tr>
    <th><div class='filter-container header-container'> <div class='header-text'>  Firstname Firstname Firstnam eFirstnam eFirstname Firstname Firstname Firstname Firstname</div>
      <div class='icon-right'> <span    class= "fa fa-sort-asc fa-lg sort-icon "></span><span   class= "fa fa-sort-desc fa-lg sort-icon  "></span></div></div></th>
    <th>Lastname</th> 
    <th>Age</th>
  </tr>
  <tr>
    <td>Jill</td>
    <td>Smith</td>
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td>
    <td>94</td>
  </tr>
  <tr>
    <td>John</td>
    <td>Doe</td>
    <td>80</td>
  </tr>
</table>

это мой код, ссылка на ручку

https://codepen.io/arshiyakhanam_786/pen/JzyvKe

0 голосов
/ 11 марта 2019

попробуйте

 .header-container {
        height: 100%;
        display: flex;
        align-items: center;
        justify-content: space-between;
    }
0 голосов
/ 11 марта 2019

Как насчет этого?

.header-container {
  height: 100%;
  vertical-align: middle;
  text-align: center;
  overflow: hidden;
}

.icon-right {
  position: absolute;
  top: 50%;
  right: 0;
  margin-top:-10px;
}

https://jsfiddle.net/56y4wmkz/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...