此示例详细显示了。。。问题开始于:
.h:hover { background:red }
.h:hover ~ td { background:blue }
这很好::hover
事件选择器触发以下同级td
元素。因此,我们可以说;.h:hover
触发~ td
";。。。但是,如果td
元素向后出现,则没有选择。
PS:注意,示例中的CCD_;具有CCD_ 7跟随同级的布局";其中结构具有不跟随的CCD_ 8。
唯一的可能性是#id
选择器。那么,为什么CSS不提供一些运算符或构造来在该约束中使用#id
呢?
子问题#1:有任何纯CSS解决方案吗
(编辑)感谢@TylerH表明子问题#1不是重复的(!)。
这里的重点是触发器事件上下文中的#id
选择器。
为什么是CSS3或CSS4或"标准没有将CCD_ 12用于这种应用。是否有一些关于CSS事件的标准和更好的管理控制?
我们知道不存在";先前的兄弟姐妹";选择器,这是解析算法的一个可以理解的问题。但是";找到CCD_ 13";算法(无论是下一个还是上一个!)是如此简单和快速;解析问题";采用CCD_ 14;触发选择器";。
子问题2:有一个标准化的解决方案(在CSS WG?)来解决这个问题,使用#id
作为触发选择器
PS
HTML label
标记和for
属性处理了类似的问题。<label for="for">
不需要Javascript来触发(点击事件)其对应的<input type="checkbox" id="for">
检查。。。因此,我们可以想象一个鼠标悬停在通讯器上的事件以同样的方式触发,
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>
~
选择器被称为"通用同级"选择器。这意味着它只能用于选择适当元素的兄弟。在您的情况下,#c21
元素没有任何兄弟姐妹(兄弟姐妹)。
您所要求的内容不能用纯CSS来完成,因为它需要一个父选择器(类似于CSS Selectors Level 4中的:has()
)。所谓"父选择器",我指的是在DOM中向后移动到祖先元素的能力,这样您就可以移动到祖先的兄弟元素,然后移动到祖先的兄弟元素的子元素。
这样想吧:工作选择器是一个男孩选择他的妹妹。这在CSS领域是可以的。然而,不起作用的选择者是一个男孩,他试图选择他的堂兄。这是不在CSS领域的OK,因为它需要父选择器。男孩需要先选择他的父母,然后是他父母的兄弟,然后是这个父母兄弟的儿子。
事实上,它是一个ID而不是一个类是无关紧要的。