Использование выравнивания текста по центру в colgroup
У меня есть таблица на моей странице, я использую группы для форматирования всех ячеек в этом столбце одинаково, хорошо работает для цвета фона и все. но не могу понять, почему центр выравнивания текста не работает. он не выравнивает текст по центру.
пример:
<table id="myTable" cellspacing="5">
<colgroup id="names"></colgroup>
<colgroup id="col20" class="datacol"></colgroup>
<colgroup id="col19" class="datacol"></colgroup>
<colgroup id="col18" class="datacol"></colgroup>
<thead>
<th> </th>
<th>20</th>
<th>19</th>
<th>18</th>
</thead>
<tbody>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</tbody>
</table>
CSS:
#names {
width: 200px;
}
#myTable .datacol {
text-align: center;
background-color: red;
}
4 ответа
Только ограниченный набор свойств CSS применяется к столбцам, и text-align
не один из них.
См. "Тайна того, почему только четыре свойства применяются к столбцам таблицы", чтобы узнать, почему это так.
В вашем простом примере, самый простой способ исправить это - добавить эти правила:
#myTable tbody td { text-align: center }
#myTable tbody td:first-child { text-align: left }
Это будет центрировать все ячейки таблицы, кроме первого столбца. Это не работает в IE6, но в IE6 text-align
действительно (неправильно) работает на столбце. Я не знаю, поддерживает ли IE6 все свойства или только большее подмножество.
О, и ваш HTML-код недействителен. <thead>
пропускает <tr>
,
См. Аналогичный вопрос: почему стилизация столбцов таблицы не допускается?
Вам разрешено устанавливать только свойства границы, фона, ширины и видимости, потому что ячейки не являются прямыми потомками столбцов, а только строк.
Есть несколько решений. Самое простое - добавить класс в каждую ячейку столбца. К сожалению, это означает больше HTML, но не должно быть проблемой, если вы генерируете таблицы из базы данных и т. Д.
Другое решение для современных браузеров (т.е. не IE6) состоит в использовании некоторых псевдоклассов. tr > td:first-child
выберет первую ячейку в ряду. Opera, Safari, Chrome и Firefox 3.5 также поддерживают :nth-child(n)
селектор, чтобы вы могли ориентироваться на конкретные столбцы.
Вы также можете использовать td+td
выбрать со второго столбца и далее (это на самом деле означает "выбрать все td
элементы, которые имеют один td
элемент слева). td+td+td
выбирает из третьего столбца - вы можете продолжить таким образом, переопределяя свойства. Честно говоря, это не очень хороший код.
С помощью следующего CSS вы можете просто добавить один или несколько классов к элементу таблицы, чтобы соответствующим образом выровнять его столбцы.
CSS
.col1-right td:nth-child(1) {text-align: right}
.col2-right td:nth-child(2) {text-align: right}
.col3-right td:nth-child(3) {text-align: right}
HTML
<table class="col2-right col3-right">
<tr>
<td>Column 1 will be left</td>
<td>Column 2 will be right</td>
<td>Column 2 will be right</td>
</tr>
</table>
Пример: http://jsfiddle.net/HHZsw/
В дополнение к ограничениям, упомянутым в других ответах, по состоянию на февраль 2018 года видимость: коллапс по-прежнему не работает с группами в браузерах на основе Chrome и Chromium из-за ошибки. Смотрите раздел "Видимость CSS: сворачивание не работает в Chrome". Поэтому я считаю, что используемые в настоящее время свойства - это просто рамка, фон, ширина (если только вы не используете какой-либо тип polyfill для Chrome и других браузеров на основе Chromium). Ошибка может быть отслежена на https://crbug.com/174167.