Выбор только первого конкретно типизированного дочернего элемента - PullRequest
1 голос
/ 25 августа 2011

Я хочу выбрать первого дочернего элемента <body>, который является <div>, и только этого элемента.

У меня возникли проблемы с формулировкой правильного селектора для элементаЯ хочу.Я мог бы просто дать ему идентификатор, но теперь мне интересно, возможно ли это вообще.

В простой ситуации, подобной этой:

<body>
  <div></div>
</body>

Я могу просто использовать ребенкаселектор:

body > div {
    margin: 0 auto 0 auto;
    width: 800px;
}

Но что теперь происходит, если под <body>?

<body>
  <div></div>
  <div></div>
</body>

есть два элемента <div> Что ж, теперь я могу просто использовать псевдо- first-childкласс, чтобы сделать мой выбор.Это прекрасно работает:

body > div:first-child {
    margin: 0 auto 0 auto;
    width: 800px;
}

Но подождите секунду.Что делать, если кто-то идет и вставляет другой дочерний элемент в <body> перед моим <div>?

<body>
  <a name="top"></a>
  <div></div>
  <div></div>
</body>

Как я могу выбрать только первого <div> дочернего элемента в этом случае (в общем случае)?

Ответы [ 4 ]

7 голосов
/ 25 августа 2011

Попробуйте селектор first-of-type

body > div:first-of-type
{
    margin: 0 auto 0 auto;
    width: 800px;
}

[Редактировать] Выйти nth-of-type пока вы там.

[Редактировать] Добавлен дочерний селектор.

2 голосов
/ 25 августа 2011

Мне кажется, первый в своем роде делает свою работу.

2 голосов
/ 25 августа 2011

:first-child выберет что-то, только если это первый дочерний элемент его родителя

:first-of-type будет работать, однако поддержка этого достаточно недавняя и не будет работать в старых браузерах (читайте IE):http://reference.sitepoint.com/css/pseudoclass-firstoftype

В зависимости от того, что вы хотите поддержать, или от того, насколько сложен ваш код, вам, возможно, придется отступить, чтобы дать вашему div класс.

1 голос
/ 25 августа 2011

Если у вас есть вероятность, что «кто-то идет и засовывает другого ребенка», у вас нет других вариантов, кроме как дать ему удостоверение личности.

Например, если у вас есть <div>, и кто-то вставит другой <div> перед вашим, тогда никакие существующие селекторы CSS не будут работать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...