【发布时间】:2012-12-21 12:30:47
【问题描述】:
场景
我有一个 CSS 选择器,它应该在单击标签时显示子内容。选择器沿着input:checked + element + element 的行,为最终元素提供块显示(默认为无)。问题是它适用于除 webkit 之外的所有主要浏览器。 Chrome、Safari 和 android 的移动浏览器(v2.2 抱歉,我落后于时代)都无法显示该元素。当我在 Chrome 中检查元素时,它显示它应该是 display: block 但它没有呈现它。我可以在开发人员工具中取消选中并检查该属性,它会显示,但不是之前。
我认为这是 webkit 中的一个错误。
问题
这是一个多部分的问题:这是 webkit 中的一个已知错误吗?我的选择器有什么问题吗?以及如何解决 webkit 浏览器的问题(任何创意建议)?
代码
HTML
<input id="c1" type="checkbox">
<label for="c1">Ein</label>
<section>Content</section>
<input id="c2" type="checkbox">
<label for="c2">Zwei</label>
<section>Content</section>
<input id="c3" type="checkbox">
<label for="c3">Drei</label>
<section>Content</section>
CSS
input {
float:left;
clear:left;
visibility: hidden;
position:absolute;
}
label {
color:green;
display:block;
cursor:pointer;
}
section {
display:none;
}
label:after {
content:" +";
}
input:checked + label:after {
content:" -";
}
input:checked + label + section {
display:block;
}
演示
演示:http://jsbin.com/epibin/2
来源:http://jsbin.com/epibin/2/edit
【问题讨论】:
-
看起来像一个重新绘制的“错误”,在检查切换时不会重新绘制兄弟姐妹。如果在检查器中打开/关闭显示,它会正确绘制。 Safari (PC) 中的结果相同
-
感谢您的回复,@mdmullinax。这是有道理的,但它确实呈现了从
+到-的变化。我也尝试了一些其他属性来测试它。看这个演示:jsbin.com/epibin/6/edit -
this answer 中的 CSS 解决方案可能更适合您的需求,因为它不需要任何额外的 HTML 标记,并且可以在错误最终修复时删除
-
@MyHeadHurts:我实际上找到并发布了我认为比您链接的解决方案更好的解决方案。
-
@ScottS 这绝对是一个更整洁的 hack,我将把它添加到我的收藏中:) 谢谢!可惜 Chrome 在链式选择器上遇到了这么多麻烦!
标签: google-chrome css safari webkit