Скрыть все, кроме первого дочернего элемента элемента, используя чистый css

Я пытаюсь скрыть каждый другой дочерний элемент после первого элемента класса classa.

div.classa {
    display:none;
}
div.classa:first-child {
    display:block !important;
}
<div class="content">
    <h3>abc</h3>
    <div class="classa">some content</div>
    <h3>xyz</h3>
    <div class="classa">more content</div>
    <h3>header3</h3>
    <div class="classa">another content</div>
</div>

Ответ 1

Если вы хотите поддерживать IE8, тогда ваш единственный вариант общий селектор для роликов:

div.classa ~ .classa {
    display: none;
}
<div class="content">
    <h3>abc</h3>
    <div class="classa">some content</div>
    <h3>xyz</h3>
    <div class="classa">more content</div>
    <h3>header3</h3>
    <div class="classa">another content</div>
</div>

Ответ 2

Посмотрите здесь https://jsfiddle.net/32vw04jg/1/

<div class="content">
  <div>
    <h3>abc</h3>
    <div class="classa">some content</div>
  </div>
  <div>
    <h3>xyz</h3>
    <div class="classa">more content</div>
  </div>
  <div>
    <h3>header3</h3>
    <div class="classa">another content</div>
  </div>
</div>


.content > div:not(:first-child) {
display: none;
}

Ответ 3

Проблема в вашем коде заключается в том, что вы хотите скрыть первый .classa, но первый .classa не является первым дочерним элементом в .content, h3 является первым потомком.

Итак, в качестве альтернативы псевдо-классу :not() вы можете использовать nth-of-type(n+2). Он выберет все элементы одного типа, кроме первого.

div.classa:nth-of-type(n+2) {
    display:none;
}
<div class="content">
    <h3>abc</h3>
    <div class="classa">some content</div>
    <h3>xyz</h3>
    <div class="classa">more content</div>
    <h3>header3</h3>
    <div class="classa">another content</div>
</div>

Ответ 4

Вы можете сделать это следующим образом:

<div class="content">
    <h3>abc</h3>
    <div class="classa">some content1</div>
    <h3>xyz</h3>
    <div class="classa">more content2</div>
    <h3>header3</h3>
    <div class="classa">another content3</div>
</div>

Css:

.content > .classa:not(:nth-of-type(2)) {
    display:none;
}

Ответ 6

В вашем случае есть новый CSS3 :first-of-type: Демо

.content h3, .content div{
    display:none;
}
.content .classa:first-of-type{  
    display : block;
}

Ответ 7

Если я правильно понимаю вопрос, цель здесь состоит в том, чтобы спрятать каждого потомка (h3 и div.classa) за исключением первого h3 и div.classa рядом с ним.

Самый простой способ сделать это - комбинация селекторов :first-of-type и ~ (general siblings).

div.classa:first-of-type ~ * { display:none; }
<div class="content">
    <h3>abc</h3>
    <div class="classa">some content</div>
    <h3>xyz</h3>
    <div class="classa">more content</div>
    <h3>header3</h3>
    <div class="classa">another content</div>
</div>

Ответ 8

Вот код, он может помочь вам с тем, что вы ищете.

#style1>div:not(:first-child) {
  display: none;
}
<body>
  <div id="style1">
    <div>
      <b>ABC</b>

      <div>Some Content</div>
    </div>
    <hr/>
    <div>
      <b>XYZ</b>
      <div>More Content</div>
    </div>

    <div>
      <b>Header3</b>
      <div>Another Content</div>
    </div>

  </div>

</body>

Ответ 9

.content > *{ display: none;}
.content > *:first-child{ display: block !important; }