2010-10-25 4 views
206

Как выбрать все элементы tr, за исключением первых tr в таблице с CSS?Выбрать все элементы 'tr', кроме первого 'tr' в таблице с CSS

Я попытался с помощью этого метода, но обнаружил, что он не работает:

http://www.daniel-lemire.com/blog/archives/2008/08/22/how-to-select-even-or-odd-rows-in-a-table-using-css-3/

+1

Какие браузеры это нужно быть совместимы? –

+0

@ Вопрос Пекки важен, потому что я не могу придумать никакого способа сделать это, используя стандартный CSS, который будет работать с различными версиями IE. Если вам необходимо поддерживать IE, единственное работоспособное решение - это класс для первого '' и другого класса для остальных. – Spudley

+0

Я не беспокоюсь об IE, но он будет работать в FF и GC – 2010-10-25 10:47:18

ответ

376

Путем добавления класса или первого tr или последующих tr с. Существует не crossbrowser способ выбора строк, которые вы хотите с помощью CSS.

Однако, если вы не заботитесь о Internet Explorer 6, 7 или 8:

tr:not(:first-child) { 
    color: red; 
} 
+13

Я также хотел бы указать «tr: not (: first-of-type) 'как потенциальное решение, если вы ищете первый экземпляр определенного селектора, а не первый обобщенный ребенок. –

25

идеальное решение, но не поддерживается в IE

tr:not(:first-child) {css} 

вторым решением было бы стилизовать все ТР а затем переопределить css для первого ребенка:

tr {css} 
tr:first-child {override css above} 
+1

CSS3 селектора для IE - http://selectivizr.com/ –

+1

Ваше второе решение - лучшее, что я думаю. Благодарю. –

-3

Вы можете создать класс и использовать класс, если вы определите e все ваше будущее, которое вы хотите (или не хотите), выбрать CSS.

Это будет сделано в письменной форме

<tr class="unselected"> 

, а затем в вашем CSS, имеющих строки (и с помощью выравнивания текста команды в качестве примера):

unselected { 
    text-align:center; 
} 



selected { 
    text-align:right; 
} 
+2

пожалуйста, поймите вопрос перед ответом –

9

звучит как «первый строка ', о которой вы говорите, это ваш заголовок таблицы, поэтому вы должны подумать об использовании thead и tbody в вашей разметке (click here), что приведет к «лучшей» разметке (семантически корректной, полезной для таких вещей, как прошивки) и проще, пересекать- (table thead ... { ... })

0

С tr:not(:first-child) не поддерживается IE 6, 7, 8. Вы можете воспользоваться помощью jQuery. here

1

Извините, что знаю, что это старый, но почему бы не стилизовать все элементы tr так, как вы хотите, кроме первого, и использовать класс psuedo: first-child, где вы отменяете то, что вы указали для всех tr элементы.

Лучше descriped на этом примере:

http://jsfiddle.net/DWTr7/1/

tr { 
    border-top: 1px solid; 
} 
tr:first-child { 
    border-top: none; 
} 

/Patrik

214

Я удивлен, что никто не упомянул использование двойников комбинаторов, которые поддерживаются IE7 и позже:

tr + tr /* CSS2, adjacent sibling */ 
tr ~ tr /* CSS3, general sibling */ 

Оба они функционируют точно у таким же образом (в контексте HTML-таблиц в любом случае), как:

tr:not(:first-child) 
+1

Подождите ... как это должен быть принятый ответ? Вы не можете получить «все, кроме первого», из этого утверждения, о котором спрашивает OP. tr + tr даст вам один элемент. Я предполагаю, что tr ~ tr доставит вас всем (я думаю, что-то вроде parent: first-child ~ tr), но не в синтаксически читаемом виде, а не: – hairbo

+4

@hairbo: tr + tr получит вам любой tr, который непосредственно следует за другим тр. Если у вас есть таблица с тремя строками, третья строка непосредственно следует за второй строкой, поэтому она также будет соответствовать. Вы получите только один элемент, если вместо этого вы используете tr: first-child + tr.Единственная разница между + и ~ состоит в том, что ~ разрешает любое количество других элементов между двумя упомянутыми. – BoltClock

-1

Вы также можете использовать селектор класса псевдо в вашем CSS так:

.desc:not(:first-child) { 
    display: none; 
} 

Это не будет применять класс первый элемент с классом .desc.

Вот JSFiddle с примером: http://jsfiddle.net/YYTFT/, и это является хорошим источником для объяснения класса псевдо-селекторов: http://css-tricks.com/pseudo-class-selectors/

+1

Это не применит стиль к первому элементу, точке. 'first-child' игнорирует классы. –

2

Хотя вопрос имеет достойный ответ уже, я просто хочу подчеркнуть, что :first-child тега продолжается тип элемента, который представляет детей.

Например, в коде:

<div id"someDiv"> 
    <input id="someInput1" /> 
    <input id="someInput2" /> 
    <input id="someInput2" /> 
</div 

Если вы хотите, чтобы повлиять только вторые два элемента с запасом, но не первый, вы могли бы сделать:

#someDiv > input { 
    margin-top: 20px; 
} 
#someDiv > input:first-child{ 
    margin-top: 0px; 
} 

что , так как input s являются дочерними, вы должны разместить first-child на входной части селектора.

1

Другой вариант:

tr:nth-child(n + 2) { 
    /* properties */ 
} 
Смежные вопросы