2013-12-18 3 views
2

У меня есть таблица, где выделены определенные строки. Я хочу, чтобы первая строка выделенных строк имела границу, примененную к ней.Как применить стиль только к первой строке (соответствующей классу) таблицы с использованием чистого css?

Я пробую следующее, но это не работает.

.highlighted{ 
background-color: lightyellow; 
} 
table:first-child tr.highlighted td{ 
    border-top: solid 1px gray; 
} 

Вот скрипка.

http://jsfiddle.net/k2ky6/

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

Возможно ли это с чистым css?

+0

Кажется, будет хорошо в Уре скрипки. –

+0

Не для меня. В каждом браузере я тестирую его, каждая желтая строка имеет границу. Я просто хочу, чтобы в первой желтой строке была граница. – Smeegs

+0

Хорошо, я понял, извиняюсь. –

ответ

5

Вы можете сделать это следующим образом: с селектором .highlighted ~ .highlighted и с применением display:block к вашему <tr>. Here является обновленной jsFiddle

.highlighted { 
    display:block; 
    border-top:1px solid lightgrey; 
    background-color:lightyellow; 

} 
.highlighted ~ .highlighted { 
    border:0; 
} 

Что это делает это .highlighted относится и к первому, и .highlighted ~ .highlighted относится ко всему но первый

+0

Отлично, спасибо – Smeegs

1

:first-child псевдо-селектор о быть первым дочерний элемент родительского элемента. Если ваши <TR> s - все дети одного общего <TABLE>, то tr:first-child применяется только к первой строке в таблице.

То, что вы на самом деле написал - table:first-child - относится к <TABLE> элементов, которые являются первыми детьми своего конкретного родителя (первый <TABLE> в <DIV>, например).

Вы могли бы получить что-то работает, поставив каждую группу выделенных ячеек в <TBODY>, если это возможно для вас - потому что тогда <TR> действительно будет первым ребенком этой <TBODY>.

Насколько я знаю, что вы действительно просили - сначала <TR> с определенным классом - вообще не возможно в чистом CSS, даже с новыми селекторами CSS3.

+0

Спасибо за объяснение – Smeegs

+0

Хех. Еще спасибо @ scrblnrd3 за умный трюк с '~' и реальным решением! – drquicksilver

+0

Эй, решение и объяснение, почему мой метод не работает. Я считаю это успешным. Оба ценны. – Smeegs

1

Есть ли преимущество/разница в этом .highlighted ~ .highlighted?

... в отличие от создания стиля для только первого выделен один такие как

.highlighted{ 
    background-color: lightyellow; 
} 
.highlighted-2 td{ 
    border-top: solid 1px gray; 
    background-color: lightyellow; 
} 
+0

Выгода заключается в том, что вам не нужно менять исходный код :-) Если вы предполагаете, что OP не может изменить классы/структуру исходного HTML, то это чистое решение CSS. Если он способен изменить ситуацию, то, конечно, есть много способов сделать это по-другому с дополнительным или другим классом в первом элементе. – drquicksilver

+0

Я понимаю. Спасибо за уточнение. – Phlume

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