首页  >  文章  >  web前端  >  跳过不匹配元素时如何使用 :nth-child 替换元素颜色?

跳过不匹配元素时如何使用 :nth-child 替换元素颜色?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-07 03:48:03807浏览

How to Alternate Element Colors with :nth-child When Skipping Non-Matching Elements?

:nth-child(even/odd) 选择器,具有 Class

在 CSS 中,:nth-child(n) 选择器选择元素这是他们父母的第 n 个孩子。当 n 为奇数时,nth-child(odd) 选择器选择奇数元素,当 n 为偶数时,nth-child(even) 选择器选择偶数元素。

考虑以下 HTML 标记,我们想要应用 :nth-child 选择器来列出具有“parent”类的项目:

<ul>
    <li class="parent">green</li>
    <li class="parent">red</li>
    <li>ho ho ho</li>
    <li class="parent">green</li>
    <li class="parent">red</li>
</ul>

将以下 CSS 应用于上面的 HTML:

.parent:nth-child(odd) {
    background-color: green;
}

.parent:nth-child(even) {
    background-color: red;
}

出乎意料的是,在第一个非 .parent 元素之后重置元素的颜色。这是因为 :nth-child 选择器适用于列表中的所有元素,而不仅仅是那些具有“parent”类的元素。

为了实现所需的行为,我们需要使用通用兄弟组合器 (~) ,它选择 DOM 树中另一个元素之前的元素。通过将其与 :nth-child 选择器相结合,我们可以在每次遇到非 .parent 元素时替换“.parent”元素的颜色:

.parent:nth-child(odd) {
    background-color: green;
}
.parent:nth-child(even) {
    background-color: red;
}

/* after the first non-.parent, toggle colors */
li:not(.parent) ~ .parent:nth-child(odd) {
    background-color: red;
}
li:not(.parent) ~ .parent:nth-child(even) {
    background-color: green;
}

/* after the second non-.parent, toggle again */
li:not(.parent) ~ li:not(.parent) ~ .parent:nth-child(odd) {
    background-color: green;
}
li:not(.parent) ~ li:not(.parent) ~ .parent:nth-child(even) {
    background-color: red;
}

这种方法允许我们替换颜色“.parent”元素,同时跳过非 .parent 元素。但是,:nth-child 选择器可以向前查找的非 .parent 元素的数量是有限的,因此这种技术对于具有许多交替类的很长列表可能不实用。

以上是跳过不匹配元素时如何使用 :nth-child 替换元素颜色?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn