This example详细说明......问题始于:
.h:hover { background:red }
.h:hover ~ td { background:blue }
工作正常::hover
事件选择器触发以下兄弟td
元素。因此,我们可以说“.h:hover
触发 ~ td
”......但是,如果td
元素有向后发生,则没有选择。
PS:请注意the example中的rolspan
会导致“布局中包含td
后续兄弟”,其中结构的td
未跟随。{ / p>
唯一的可能性是#id
选择器。那么,为什么CSS不提供某些操作符或构造来在该约束中使用#id
?
子问题#1:有没有纯CSS解决方案?
(编辑)感谢@TylerH表明子问题#1 不重复(!)。
这里的要点是触发事件上下文中的#id
选择器。
为什么选择CSS3或CSS4或“?”标准没有使用#id
这种应用程序。是否有一些关于CSS事件的标准和更好的控制来管理它们?
我们知道没有“上一个兄弟”选择器,这是解析algorthims的一个可以理解的问题。但是“找#id
”算法(无论是下一个还是之前的!)是如此简单和如此之快,在一种情况下采用#id
没有“解析问题” “触发选择器”。
子问题#2:有一个标准化的启发(at CSS WG?)来解决问题,使用#id
作为触发选择器?< /强>
HTML label
tag和for
attibute处理类似的问题。一个<label for="for">
不需要Javascript来触发(通过点击事件)其对应的<input type="checkbox" id="for">
已经检查过...所以,我们可以想象一个 on-mouse-over 对应事件触发同样的,
label#from1:hover <OPERATOR> #for1 { ...do something... }
在这样的典型HTML表单中,
<div id="for1">
<input type="checkbox" id="mycheck"/>
<span></span>
</div><!-- tag input BEFORE tag label-->
<label id="from1" for="mycheck">Label for my styled "checkbox"</label>
答案 0 :(得分:3)
~
选择器称为“通用兄弟”选择器。这意味着它只能用于选择相应元素的兄弟。在您的情况下,#c21
元素没有任何兄弟姐妹(兄弟姐妹)。
您要求的内容无法使用纯CSS,因为它需要父选择器(类似于CSS Selectors Level 4中的:has()
)。通过“父选择器”,我的意思是能够向后移动DOM到祖先元素,以便您可以移动到祖先的兄弟,然后移动到祖先的兄弟的孩子< / em>元素。
这样想:工作选择器是一个男孩选择他的妹妹。在CSS-land中这没关系。然而,不工作的选择器是一个男孩试图选择他的表弟。这在CSS-land中不确定,因为它需要父选择器。男孩需要首先选择他的父母,然后选择他父母的兄弟,然后选择这位父母的兄弟的儿子。
它是一个ID而不是一个类是无关紧要的。