Как выбрать строку таблицы без использования классов или псевдоклассов?

#html #css #css-selectors

#HTML #css #css-селекторы

Вопрос:

Я хотел бы выбрать третью строку таблицы без использования псевдокласса или без применения класса к строке (это больше для того, чтобы использовать работу операторов siblings).

Но это также относится к четвертой и следующим строкам.

 tbody > tr   tr   tr {
    color: blue;
}  
     <table>
        <tbody>
            <tr><td>Hello</td></tr>
            <tr><td>World</td></tr>
            <tr><td>Should be blue</td></tr>
            <tr><td>Should not be blue</td></tr>
        </tbody>
    </table>  

Комментарии:

1. Почему вы не хотите использовать nth-child (3) ?

2. Я хочу лучше понять, как работает.

Ответ №1:

Без псевдо селектора? Ну, вы можете использовать color: initial on tbody > tr tr tr tr (вы можете сбросить все свойства, которые вы применили к третьему tr элементу этого селектора, используя initial — см. демонстрацию ниже:

 tbody > tr   tr   tr {
    color: blue; /* styles for the third row */
}
tbody > tr   tr   tr   tr{
    color: initial; /* reset all the styles applied in the third row here */
}  
 <table>
        <tbody>
            <tr><td>Hello</td></tr>
            <tr><td>World</td></tr>
            <tr><td>Should be blue</td></tr>
            <tr><td>Should not be blue</td></tr>
        </tbody>
    </table>  

Комментарии:

1. Я думал, что это должно быть так, все еще задаваясь вопросом, почему селектор «жадный»

2. Потому что это соответствует двум сценариям.

Ответ №2:

Используйте это, это работает, если вы не хотите использовать псевдокласс или без применения класса к строке.

 tbody > tr   tr   tr   tr {
    color: initial;
}

tbody > tr   tr   tr {
    color: blue;
}
  

Комментарии:

1. скопируйте ответ из приведенного выше

Ответ №3:

Краткий ответ

Ваше правило соответствует любой группе из трех братьев и сестер, а не только первой группе.


Объяснение

CSS смежный комбинатор родственных элементов ( ) нацелен на элемент, непосредственно следующий за родственным элементом.

Для контраста, общий комбинатор родственных элементов ( ~ ) нацелен на элемент, следующий за родственным элементом (он не обязательно должен быть следующим).

Проблема с вашим правилом в том, что оно соответствует двум сценариям.

Вот ваш код:

 tbody > tr   tr   tr {
  color: blue;
}  
 <table>
  <tbody>
    <tr><td>Hello</td></tr>    
    <tr><td>World</td></tr>    
    <tr><td>Should be blue</td></tr>    
    <tr><td>Should not be blue</td></tr>    
  </tbody>  
</table>  

tr tr tr означает: выберите строку таблицы, которая непосредственно следует за строкой таблицы, которая также непосредственно следует за строкой таблицы.У вас четыре строки, так что такая ситуация встречается в вашем коде дважды:

совпадение 1

введите описание изображения здесь

совпадение 2

введите описание изображения здесь

Другие возможные совпадения:

  • Если бы у вас была одна строка, правило совпало бы 0 раз.
  • Если бы у вас было две строки, правило совпало бы 0 раз.
  • Если бы у вас было три строки, правило совпало бы один раз.
  • Если бы у вас было пять строк, правило совпало бы три раза.
  • Если бы у вас было шесть строк, правило совпало бы четыре раза.
  • и так далее…

Идентификаторы CSS, классы и pseudo-classes существуют, чтобы помочь вам в такого рода ситуациях.

Ссылки MDN: