只使用CSS就可以用我的ID选择器触发非同级元素



此示例详细显示了。。。问题开始于:

.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而不是一个类是无关紧要的。

最新更新