在这个问题中,“像jQuery的.click()一样工作的CSS3选择器?”我使用的状态发布了一个答案],以切换元素的显示。:checked``input``type="checkbox"
这是我在该答案中发布的演示的HTML:
<input type="checkbox" id="switch" />
<nav>
<h2>This would be the 'navigation' element.</h2>
</nav>
<label for="switch">Toggle navigation</label>
和CSS(为简洁起见,省略了过渡):
#switch {
display: none;
}
#switch + nav {
height: 0;
overflow: hidden;
/* transitions followed */
}
#switch:checked + nav {
height: 4em;
color: #000;
background-color: #ffa;
/* transitions followed */
}
label {
cursor: pointer;
}
有一次,我张贴发生,我认为我们可以在答案 也 拨动的文本label
用于触发复选框的状态变化,使用下面的选择(已修订label
的文本‘导航’):
label {
display: inline-block;
cursor: pointer;
}
#switch + nav + label::before {
content: 'Show ';
}
#switch:checked + nav + label::before {
content: 'Hide ';
}
这不起作用,因为当处于input
未检查状态(和label
显示的Show navigation
)时选择器匹配时,选择器在更改状态时 _无法_匹配input
。请注意,过渡仍然对nav
元素起作用,并且原始匹配选择器指示下一个同级组合器原始匹配。上面的链接显示了不起作用的选择器的简化演示(在Chrome27 / Windows XP中)。
然后我想到尝试使用通用同级组合器,以减少选择器链。这导致了以下CSS(为简洁起见,再次删除了转换):
#switch:checked + nav {
background-color: #ffa;
}
label {
display: inline-block;
cursor: pointer;
}
#switch ~ label::before {
content: 'Show ';
}
#switch:checked ~ label::before {
content: 'Hide ';
}
有点出乎我的意料,这个工作(在content
该的label
响应的改变的状态改变input
)。
所以,问题是:为什么通用同级组合器不允许更新后一个同级链,而链接的下一个同级组合器(匹配DOM的元素和结构)却不允许呢?
此外,这似乎在Firefox(Windows XP上为21)上 确实 有效;所以我想这个问题会稍作更改,包括:这是Chrome /
Webkit中的错误还是预期的行为?
而且,甚至 更进一步 ,虽然这是Chrome中的错误(感谢@Boltclock),但还是有些荒唐的“不做任何事情”动画修复了无法正常工作的演示(尽管存在其他更好的替代方法,如Scott的答案显示):
body {
-webkit-animation: bugfix infinite 1s;
}
@-webkit-keyframes bugfix {
from {
padding: 0;
}
to {
padding: 0;
}
}
#switch {
}
#switch + nav {
-moz-transition: all 1s linear;
-ms-transition: all 1s linear;
-o-transition: all 1s linear;
-webkit-transition: all 1s linear;
transition: all 1s linear;
}
#switch:checked + nav {
background-color: #ffa;
-moz-transition: all 1s linear;
-ms-transition: all 1s linear;
-o-transition: all 1s linear;
-webkit-transition: all 1s linear;
transition: all 1s linear;
}
label {
display: inline-block;
cursor: pointer;
}
#switch + nav + label::before {
content:'Show ';
}
#switch:checked + nav + label::before {
content:'Hide ';
}
注意: 之所以用此“修复”更新问题,而不是将其发布为答案,是因为问题 不是 “我该如何解决?” 但是(基本上)“为什么不起作用?”
这是WebKit浏览器中的一个长期错误,与将某些动态伪类与下一个同级组合器一起使用有关。无论您是将样式应用于兄弟元素本身还是该兄弟元素的伪元素,都会发生这种情况。
所以要么是固定的,要么是其他触发/触发了它。
问题内容: 举个例子 是在HTML5有效吗? 问题答案: 是的,您编写的内容在HTML5中有效,但并非所有内联元素,我认为这只是适用于.. 参考:HTML5中的“块级”链接 提示:如果使用此设置,则to 或可能会有意外的视觉样式结果 更新: 对于“默认样式可能会导致混淆”的其他“内联代码块”组合,则“不允许”使用-说明在这里 ### 默认样式可能导致混淆的情况 某些元素具有默认样式或行为,这些默认
下面的泛型代码无法编译,我可以理解原因:这是为了阻止可能不兼容的类型添加到集合中: 然而,我可以对数组做同样的事情,并且不会得到编译器错误。当我运行它时,我会得到一个 为什么编译器不阻止我上传数组,因为它会麻烦地阻止我上传泛型?
问题内容: 我有一个基于Java的Web服务客户端,该客户端连接到Java Web服务(在Axis1框架上实现)。 我的日志文件中出现以下异常: 问题答案: 这通常是由XML声明前的空白引起的,但是它可以是任何文本,例如破折号或任何字符。我说这通常是由空白引起的,因为人们认为空白始终是可忽略的,但事实并非如此。 经常发生的另一件事是UTF-8 BOM(字节顺序标记),如果将文档作为字符流传递给XM
为什么会这样?最后,还有其他类似的功能我应该知道是不允许的。
我一直在使用Android Studio和Ubuntu13.10没有问题。我决定更新到14.04,现在我无法让Android工作室工作。Gradle无法构建并不断地说错误:Prolog中不允许内容。我所做的只是从头开始创建一个新项目。 > Ubuntu 14.04是从刚擦除的分区安装的 使用Android Studio V5.7,但我也尝试了V4.6 我安装了Oracle JDK,并相应地设置了$
问题内容: 我运行Intellij,当我尝试运行android应用程序时,总是出现内部错误:序言中不允许内容。我认为我已经尽力修复了所有问题,但没有任何效果。之前,我在AndroidManifest中没有做任何特别的事情,所以我不知道为什么它不起作用。 问题答案: 关闭Intellij想法 去你的工作区 删除.idea文件夹 打开您的项目并导入。