Выберите все «tr», кроме первого


257

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

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


1
С какими браузерами это должно быть совместимо?
Пекка


Вопрос @ Pekka важен, потому что я не могу придумать, как это сделать, используя стандартный CSS, который будет работать с различными версиями IE. Если вам требуется поддержка IE, единственное работоспособное решение - это класс для первого <tr>и другой класс для остальных.
Спадли

я не беспокоюсь об IE, но он будет работать в FF и GC

Ответы:


466

Добавляя класс к первому trили последующему trs. Не существует кросс-браузерного способа выбора нужных вам строк только с помощью CSS.

Однако, если вас не волнует Internet Explorer 6, 7 или 8:

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

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

2
Я думаю, что в 2019 году мы закончили с IE (менее 0,5% пользователей IE6
IE10

227

Я удивлен, что никто не упомянул об использовании одноуровневых комбинаторов, которые поддерживаются 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

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

Просто хочу добавить, elem + elemэто отличное общее решение для случаев, когда элементы, на которые вы хотите ориентироваться, не являются единственными дочерними элементами. Например, если за a <h2>следуют несколько <p>тегов, первый <p>в этом случае не является первым дочерним.
Рассерженная шлюха

27

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

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

Вторым решением было бы стилизовать все tr и затем переопределить css для first-child:

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

10

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


3

Хотя на этот вопрос уже есть достойный ответ, я просто хочу подчеркнуть, что :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;
}

то есть, поскольку inputs являются дочерними, вы должны поместить их first-childв область ввода селектора.


1

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

Лучше описать этим примером:

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

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

/ Patrik


1

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




-1

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

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

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

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


1
Это не будет применять стиль к первому элементу, point. first-childигнорирует занятия
Фес Враста

-3

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

Это будет сделано, написав

<tr class="unselected">

а затем в вашем css есть строки (и в качестве примера используется команда text-align):

unselected {
  text-align:center;
}



selected {
  text-align:right;
}

2
пожалуйста, поймите вопрос, прежде чем ответить
Аммар Бозоргвар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.