Виберіть усі 'tr', окрім першого


257

Як я можу вибрати всі trелементи, крім першого, trу таблиці з CSS?

Я спробував скористатися цим методом, але виявив, що він не працює.


1
Яким браузерам це потрібно для сумісності?
Pekka


@ Питання 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
Зачекайте ... як це має бути прийнятою відповіддю? Ви не можете отримати "все, але перше" з цього твердження, про що запитує ОП. tr + tr отримає вам один елемент. Я думаю, що tr ~ tr отримає вас усіх (я думаю, щось подібне до батьків: перша дитина ~ tr), але не в синтаксичному розумінні, як ні:
hairbo

5
@hairbo: tr + tr отримає будь-яку tr, яка безпосередньо слідує за іншою tr. Якщо у вас є таблиця з трьома рядами, третій ряд безпосередньо слідує за другим рядом, тому він також буде відповідати. Один елемент ви отримаєте лише в тому випадку, якщо замість нього будете використовувати tr: first-child + tr. Єдина відмінність між + і ~ полягає в тому, що ~ допускає будь-яку кількість інших елементів між двома згаданими.
BoltClock

Просто хотів додати, elem + elem- це чудове загальне рішення, коли елементи, на які потрібно націлити, - не єдині діти. Наприклад, якщо за <h2>кодом дотримується декілька <p>тегів, то перший <p>не є в цьому випадку першою дитиною.
НезадоволенеГотування

27

ідеальне рішення, але не підтримується в IE

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

другим рішенням буде стилювання всіх tr, а потім перезапис css для першої дитини:

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

10

звучить як "перший рядок", про який ви говорите, - це ваш заголовок таблиці - тому ви дійсно повинні подумати про використання theadта tbodyрозмітку ( натисніть тут ), що призведе до "кращої" розмітки (семантично правильної, корисної для таких речей, як екранізатори ) та простіші можливості для перегляду css для веб-переглядача ( 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;   
}

/ Патрік


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
Це не стосується стилю до першого елемента, точки. first-childігнорує заняття.
Фес Враста

-3

Ви можете створити клас і використовувати його, коли визначите всі ваші майбутні, які ви хочете (або не хочете) вибирати CSS.

Це було б зроблено письмово

<tr class="unselected">

а потім у вашому css, що містить рядки (і використовує команду вирівнювання тексту як приклад):

unselected {
  text-align:center;
}



selected {
  text-align:right;
}

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.