【问题标题】:Can this JS be written in pure CSS?这个JS可以用纯CSS写吗?
【发布时间】:2015-01-17 06:45:28
【问题描述】:
jQuery('.parent:visible').each(function () {
  if (jQuery(this).find('.child-1').is(':hidden')) {
    jQuery(this).find('.child-2').css('color', '#000')
  }
});

单独选择孩子很容易,但由于 CSS 中没有 if 语句,我希望我缺少一些神奇的 CSS。

编辑:根据建议修复 js

【问题讨论】:

  • 你试过使用':hidden'吗?
  • 你的if() 条件永远不会像你写的那样失败。

标签: javascript jquery css styles


【解决方案1】:

如果您可以根据元素的可见性向元素添加类,那么您可以这样做。

.parent.visible .child-1.not-visible + .child-2 {
    color: #000
}

这将检查.parent.visible 中的.child-1 是否具有.not-visible 类——如果有,则具有.child-2 类的adjacent sibling 将继承此规则。

否则,您必须使用 JavaScript,因为 CSS 无法测试元素是否可见。

【讨论】:

    【解决方案2】:

    .parent:not(.hidden) .child-1:not(.hidden) + .child-2 或许?


    Demo

    .parent { border:1px solid red; }
    .hidden { display:none; }
    
    .parent:not(.hidden) .child-1:not(.hidden) + .child-2 {
        color:green;
    }
    
    <div class="parent">
        <div class="child-1">one</div>
        <div class="child-2">two</div>
    </div>
    
    <div class="parent">
        <div class="child-1 hidden">one</div>
        <div class="child-2">two</div>
    </div>
    
    <div class="parent hidden">
        <div class="child-1">one</div>
        <div class="child-2">two</div>
    </div>
    
    <div class="parent">
        <div class="child-1">one</div>
        <div class="child-2">two</div>
    </div>
    

    【讨论】:

    • 这并不完全等同于 JS 版本,因为 .child-1.child-2 元素不一定是兄弟姐妹(它们可以是错综复杂的,或者一个是另一个兄弟姐妹的孩子,... )
    • @SamuelCaillerie 是的。我猜OP应该发布他的HTML结构。我只是假设一些事情。
    • 虽然我没有具体说明,但他们绝对是兄弟姐妹。这也适用于 :visible:hidden 而不是您的 .hidden 类检查...您知道 IE (8+) 是否会对此有任何问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多