Выберите все «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;
}
Magnar
источник
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)
BoltClock
источник
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 ... { ... })

oezi
источник
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в область ввода селектора.

CodyBugstein
источник
1

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

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

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

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

/ Patrik

Patrik
источник
1

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

Tapos
источник
1

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

tr:nth-child(n + 2) {
    /* properties */
}
Арман Егиазарян
источник
0

Может быть, кто-то может извлечь выгоду, ниже, что я использовал

ol li:not(:first-child) {
    background: black;
    color: white;
}
Кокконда Абхилаш
источник
-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;
}
user476033
источник
2
пожалуйста, поймите вопрос, прежде чем ответить
Аммар Бозоргвар