2013-04-15 2 views
24

У меня есть таблица внутри таблицы, и я хочу, чтобы заполнить фон последней строки таблицы 1 только - не таблицы 2.селектора CSS последняя строка из основной таблицы

<style> 
#test tr:last-child 
{ 
    background:#ff0000; 
} 
</style> 

<table border="1" width="100%" id="test"> 
<tr> 
<td> 
    <table border="1" width="100%"> 
    <tr> 
    <td>table 2</td> 
    </tr> 
    </table> 
</td> 
</tr> 

<tr><td>table 1</td></tr> 
<tr><td>table 1</td></tr> 
<tr><td>table 1</td></tr> 

</table> 

С моей CSS я 'm раскрашивание обеих последних строк таблицы1 и table2.

+0

Добавьте атрибут класса или уникальный идентификатор, чтобы разграничить две таблицы. –

ответ

49

Ваши столы должны иметь в качестве непосредственных детей только tbody и thead элементы со строками внутри *. Таким образом, изменить HTML быть:

<table border="1" width="100%" id="test"> 
    <tbody> 
    <tr> 
    <td> 
     <table border="1" width="100%"> 
     <tbody> 
      <tr> 
      <td>table 2</td> 
      </tr> 
     </tbody> 
     </table> 
    </td> 
    </tr> 
    <tr><td>table 1</td></tr> 
    <tr><td>table 1</td></tr> 
    <tr><td>table 1</td></tr> 
    </tbody> 
</table> 

Затем слегка изменить ваш селектор следующим образом:

#test>tbody>tr:last-child { background:#ff0000; } 

в действии here. Это делает использование child selector, который:

... отделяет два селектора и соответствует только тем элементам, согласованным с помощью второго селектора, которые являются прямыми потомками элементов соответствующих первым.

Таким образом, вы ориентируетесь только прямыми детьми tbody элементов, которые сами по себе являются прямыми потомками вашей #test таблицы.

Альтернативное решение

Выше опрятное решение, так как вам не нужно переусердствовать ездить любые стили. The alternative будет придерживаться текущей настройки, и над оседлать стиль фона для внутренней таблицы, например:

#test tr:last-child { background:#ff0000; } 
#test table tr:last-child { background:transparent; } 

* Это не является обязательным, но большинство (? Все) браузеры будут добавлять их в, поэтому лучше всего сделать это явным. Поскольку @BoltClock заявляет в комментариях:

... теперь он установлен в камне в HTML5, поэтому для того, чтобы браузер был совместим, он в основном должен вести себя таким образом.

+0

Это не работает http://jsfiddle.net/WFgvd/ – JackPoint

+1

Если вы не укажете 'TBODY', клиент вставляет его. И если вы не используете 'THEAD' или' TFOOT', селекторы '#test> tbody> tr: last-child' и' #test tr: last-child' будут выбирать одну и ту же строку, а последняя с меньшей специфичностью. – feeela

+0

@feeela: кроме внутреннего стола - прежний селектор не будет соответствовать «tr: last-child» внутри этой таблицы. Тем не менее, вы правы в том, что нет необходимости явно добавлять теги tbody в разметку. – BoltClock

Смежные вопросы