在CSS中的第一个活动元素之后定位第一个可见元素

Kir*_*met 3 css css-selectors css3

在这里进入一些非常粗糙的CSS.在下面的场景中,我想只匹配#4.这是我发生的事情:

<ul class="tabMenu">
  <li class="hidden">1</li>
  <li class="active">2</li>
  <li class="hidden">3</li>
  <li>4</li> <!-- I want this one's blood -->
  <li class="hidden">5</li>
  <li class="hidden">6</li>
  <li>7</li>
  <li class="hidden">8</li>
  <li>9</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

以下是我的失败尝试:

/* Only matches the next immediate li (so it works if #3 is not hidden) */
.tabMenu li:not(.hidden).active + li:not(.hidden) a {
  color: red;
}

/* Matches #4 and #7, I just want #4 */
.tabMenu li:not(.hidden).active ~ li:not(.hidden) a {
  color: red;
}
Run Code Online (Sandbox Code Playgroud)

30分钟后,我决定将问题提交给你.请帮忙!

Raj*_*ani 11

利用CSS兄弟选择器的工作方式将是这里的方式.

  • 步骤1:让我们在第active一个不包含类hidden或者的元素之后执行所有元素的选择active.

    li.active ~ li:not(.hidden):not(.active) {
        color:red;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 第2步:让我们在目标元素之后删除所有兄弟姐妹的目标.CSS选择器~选择后面的所有兄弟元素,而不包括它.因此,通过将其应用于li目标之后的元素,我们成功地从步骤1中的第一个之外的所有元素中移除.

    li.active ~ li:not(.hidden):not(.active) ~ li {
        color:inherit;
    }
    
    Run Code Online (Sandbox Code Playgroud)

请参阅:http://jsfiddle.net/nJHd2/