销毁或重新计算 CSS nth-child 选择器

Posted

技术标签:

【中文标题】销毁或重新计算 CSS nth-child 选择器【英文标题】:Destroy or recalculate CSS nth-child selector 【发布时间】:2013-12-18 15:23:57 【问题描述】:

上下文

我有一个清单。使用 jQuery,我是动态的...

    ...隐藏/显示某些列表项。 ...计算第三个和第四个列表项以应用特定类。

问题

使用第 n 个子选择器的 CSS 样式(来自样式表)被应用到每三个列表项。问题是当我动态隐藏/显示列表项时,CSS nth-child 选择器似乎没有重新计算。

由于 jQuery 已经在计算第三个列表项,我不需要重新计算 CSS nth-child 选择器,除非没有办法取消或销毁它。

代码

标记:

<ul class="teamlist">
    <li>Content</li>
    <li>Content</li>
    <li>Content</li>
    <li>Content</li>
    <li>Content</li>
    <li>Content</li>
    <li>Content</li>
    <li>Content</li>
    <li>Content</li>
    <li>Content</li>
</ul>

jQuery:

$('.teamlist li:visible').each(function (i) 
    if (i % 3 == 0) $(this).addClass('teamlist_fourth_item');
);
$('.teamlist li:visible').each(function (i) 
   if ((i+1) % 3 == 0) $(this).addClass('teamlist_third_item');
);

不需要的 CSS:

.teamlist li:nth-child(3n+3) 
    margin-right: 0;

问题

如何销毁或强制重新计算 CSS nth-child 选择器?

【问题讨论】:

我会使用 javascript 将 nth-child 类作为一个函数应用,这样它就可以工作到 IE8,然后每次运行代码来添加或删除它会重新计算的列表项跨度> nth-child 不会因隐藏元素而改变,因此除非您添加或删除 DOM 节点,否则 CSS 不会突然改变匹配的元素。 简单的答案是破坏 CSS ...所以只需将其从文件中删除 真正的问题是什么? @Danko - 删除代码(而不是销毁或覆盖它)需要我编辑一个父 WordPress 主题(升级后无法使用)。我希望找到一种快速的方法来对抗不受欢迎的样式而不删除它。 谢谢我更清楚,我猜你对所有 li 元素都有一个默认的边距,你能写一个新的 css 规则吗? 【参考方案1】:

在 cmets 之后,我认为您需要重写该类以使其与所有 li 元素的属性相等,您可以创建自己的类以更好地匹配这些元素,例如与父 ul 的 idclass

#parent .teamlist li:nth-child(3n+3) 
    margin-right:2%;

或者在您的ul 上有一个 id

<ul class="teamlist" id="lista">

#lista.teamlist li:nth-child(3n+3) 
    margin-right:2%;

还要确保你的 CSS 在另一个之后加载

您也可以使用 Jquery 并使用相同的 CSS 选择器对其进行修改:

$('.teamlist li:nth-child(3n+3)').css('margin-right','2%');

【讨论】:

太棒了。谢谢!我均衡了 nth-child 样式并允许 jQuery 处理第三个列表项的计算。当我早些时候尝试这个时,我的选择器没有更高的特异性,因此被覆盖了。

以上是关于销毁或重新计算 CSS nth-child 选择器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Selenium 的标准 CSS 选择器(nth-of-type 或 nth-child)选择嵌套元素?

CSS3 之:nth-child() 选择器

CSS 选择器不遵循 bs4 的 ':nth-child' 逻辑

CSS选择器(nth-child)

CSS选择器之:nth-child()和:nth-of-type()的使用

如何使用 CSS“nth-child”选择器选择自定义行数? [关闭]