Таблица CSS — сочетание выравнивания по центру и по левому краю в таблице, состоящей из строк

Вот моя текущая скрипка:

http://jsfiddle.net/UjAQf/106/

  • Для заголовков и столбцов «Спорт», «Статус» и «Результат» я хочу выровнять по центру.
  • Для заголовков и столбцов Pick, Genius и Genius Credential я хочу выровнять по левому краю.
  • Для «picksHeading» я хочу выровнять по левому краю.

Каков наиболее эффективный способ сделать это?

-- Код:

<div class="geniusPicks">

    <table cellpadding="1" cellspacing="0">

        <thead>
            <tr id="picksHeading">
                <th>Sport</th>
                <th>Status</th>
                <th colspan="2">Pick</th>
                <th>Genius</th>
                <th>Genius Credential</th>
                <th>Result</th>
            </tr>
        </thead>

        <tbody>

            <tr class="bigGap">
                <td colspan="7"></td>
            </tr>

            <tr class="pickHeading">
                <td colspan="7">blah</td>
            </tr>
            <tr class="pickBody">
                <td rowspan="4">plah</td>
                <td rowspan="4">flah</td>
                <td rowspan="4">glah</td>
                <td>vlah</td>
                <td>mlah</td>
                <td>nlah</td>
                <td rowspan="4">jlah</td>
            </tr>
            <tr class="pickBody">
                <td>clah</td>
                <td>dlah</td>
                <td>xlah</td>
            </tr>
            <tr class="pickBody">
                <td>plah</td>
                <td>slah</td>
                <td>klah</td>
            </tr>
            <tr class="pickBody">
                <td>qlah</td>
                <td>wlah</td>
                <td>zlah</td>
            </tr>

            <tr class="smallGap">
                <td colspan="7"></td>
            </tr>

            <tr class="pickHeading">
                <td colspan="7">blah</td>
            </tr>
            <tr class="pickBody">
                <td rowspan="4">plah</td>
                <td rowspan="4">flah</td>
                <td rowspan="4">glah</td>
                <td>vlah</td>
                <td>mlah</td>
                <td>nlah</td>
                <td rowspan="4">jlah</td>
            </tr>
            <tr class="pickBody">
                <td>clah</td>
                <td>dlah</td>
                <td>xlah</td>
            </tr>
            <tr class="pickBody">
                <td>plah</td>
                <td>slah</td>
                <td>klah</td>
            </tr>
            <tr class="pickBody">
                <td>qlah</td>
                <td>wlah</td>
                <td>zlah</td>
            </tr>

            <tr class="smallGap">
                <td colspan="7"></td>
            </tr>

        </tbody>

    </table>

</div>

CSS:

.geniusPicks {}

.geniusPicks table {width:100%; font-size:12px;}

.geniusPicks table tr#picksHeading {border:1px solid; background-color:red; height:30px;}

.geniusPicks table tr.pickHeading {border:1px solid;}

.geniusPicks table tr.pickBody td {border:1px solid;}

.bigGap td {height:19px;}

.smallGap td {height:10px;}

person keruilin    schedule 10.06.2011    source источник
comment
Это форум вопросов и ответов. Какой у вас не субъективный вопрос? Как мы определяем эффективность? Время разбора CSS? Количество символов, используемых для кодирования результата? Уровень теплоты при просмотре кода/результата?   -  person colinross    schedule 11.06.2011
comment
вы имеете в виду горизонтальное выравнивание для тех, которые вы хотите слева?   -  person kinakuta    schedule 11.06.2011
comment
Кроме того, что именно означают vertical-center и vertical-left? Это очень двусмысленные фразы.   -  person thirtydot    schedule 11.06.2011
comment
Вы имеете в виду горизонтально слева и вертикально посередине?   -  person Victor    schedule 11.06.2011


Ответы (1)


вы можете добавить классы к ячейкам, которые вы хотите центрировать, или это может сработать для вас,

Рабочий пример

Добавлен CSS:

.geniusPicks table th,
.geniusPicks table th+th+th+th+th+th,
.geniusPicks table .pickHeading+tr td,
.geniusPicks table .pickHeading+tr td+td+td+td+td+td+td {
    text-align: center;
}

.geniusPicks table th+th+th,
.geniusPicks table .pickHeading+tr td+td+td {
    text-align: left;
}

Этот CSS использует селектор соседнего элемента в двух местах.

  1. .pickHeading+tr — это нацелено только на ячейки, которые входят в строку tr, которая является непосредственным братом строки pickHeading — это ваша 7-ячеечная строка, это означает, что меньшие строки, в которых только 3 ячейки, никогда не становятся целевыми и оставляются по умолчанию для слева

  2. td - нацелен на каждую ячейку

    td+td+td+td+td+td+td — нацеливается на каждую ячейку, которой предшествуют 6 других (7)

    td+td+td - нацеливается на каждую ячейку, которой предшествуют 2 другие (3,4,5,6,7)

поэтому последний пример в № 2 выше имеет приоритет над ячейками 3, 4, 5 и 6, но не 7, поскольку второй пример выше более конкретен.

Вероятно, это можно было бы сделать с помощью :nth-child to, но этот способ поддерживается IE7 и требует на одно правило меньше!

person clairesuzy    schedule 11.06.2011
comment
Я сам не мог понять vertical-center + vertical-left. - person thirtydot; 12.06.2011