可以使用我的ID选择器仅使用CSS触发非兄弟元素吗?

时间:2015-02-27 02:00:05

标签: css css-selectors

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作为触发选择器?< /强>


PS

HTML label tagfor 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>

1 个答案:

答案 0 :(得分:3)

~选择器称为“通用兄弟”选择器。这意味着它只能用于选择相应元素的兄弟。在您的情况下,#c21元素没有任何兄弟姐妹(兄弟姐妹)。

您要求的内容无法使用纯CSS,因为它需要父选择器(类似于CSS Selectors Level 4中的:has())。通过“父选择器”,我的意思是能够向后移动DOM到祖先元素,以便您可以移动到祖先的兄弟,然后移动到祖先的兄弟的孩子< / em>元素。

这样想:工作选择器是一个男孩选择他的妹妹。在CSS-land中这没关系。然而,不工作的选择器是一个男孩试图选择他的表弟。这在CSS-land中确定,因为它需要父选择器。男孩需要首先选择他的父母,然后选择他父母的兄弟,然后选择这位父母的兄弟的儿子。

它是一个ID而不是一个类是无关紧要的。