【问题标题】:Issue with adjacent CSS Selector in Chrome and in SafariChrome 和 Safari 中相邻 CSS 选择器的问题
【发布时间】:2013-09-07 04:59:52
【问题描述】:

考虑以下(小提琴在这里找到http://jsfiddle.net/burninromz/YDuzC/8/

当您单击复选框时,应该会出现相应的标签。这不适用于 Safari 和 Chrome,但适用于 IE、Firefox 和 Opera。当您检查 chrome 和 safari 中的元素时,您会看到样式实际上已应用于元素,但未正确呈现。任何想法为什么会这样?

见下文。

html

<div>
    <input type="checkbox"></input>
    <span>Unchecked</span>
    <span>Unchecked</span>

css

    input[type="checkbox"]:checked + span {
      display:none  
    }

    input[type="checkbox"] + span {
      display:block  
    }

    input[type="checkbox"]:checked + span + span {
      display:block  
    }

    input[type="checkbox"] + span + span {
      display:none  
    }

这个选择器不起作用

input[type="checkbox"]:checked + span + span {
  display:block  
}

【问题讨论】:

标签: css google-chrome safari css-selectors


【解决方案1】:

我会使用:content psuedo-element

HTML

<div>
  <input type="checkbox" class="check" />
    <span></span>
</div>

CSS

span{
  display:block;
}

input[type="checkbox"] + span:before {
  content:"Unchecked";
}

input[type="checkbox"]:checked + span:before {
  content:"Checked";
}

Example Pen

【讨论】:

    【解决方案2】:

    您可以尝试使用兄弟组合器。 ~+ 类似,但不那么严格。虽然相邻选择器只会选择立即在前一个选择器之前的第一个元素,但这个选择器更通用。它将选择任何元素,只要它们遵循树中的前一个选择器。

    所以,你的 CSS 应该是这样的......

    input[type="checkbox"]:checked + span {
      display:none  
    }
    
    input[type="checkbox"] + span {
      display:block  
    }
    
    input[type="checkbox"]:checked ~ span ~ span {
      display:block  
    }
    
    input[type="checkbox"] + span + span {
      display:none  
    }
    

    这是一个工作示例,由@Adrift 提供,使用上面的代码:jsfiddle.net/YDuzC/10

    【讨论】:

    • 谢谢,我实际上得到了类似的解决方案,只需要 1 个通用选择器,例如'input[type="checkbox"]:checked + span ~ span' 。它仅在只有两个子元素时才有效。当您有更多时,Prolly 需要对其进行测试。 As David Thomas mentioned this prolly related to the webkit issue where chrome and safari breaks when selectors are used with pseudo properties.
    • 不错。您可能还会发现这很有用...30 CSS Selectors You Must Memorize
    • 谢谢,能够使用 ~ 解决这个问题。即使在 chrome 版本 31 中仍然存在此问题,但只有在使用大量 css 的页面上才能看到。
    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2019-05-05
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 2019-05-27
    相关资源
    最近更新 更多