我该如何选择 <li>
元素是锚元素的直接父元素?
在示例中,我的CSS将是这样的:
li < a.active {
property: value;
}
显然有一些方法可以使用JavaScript来实现这一点,但我希望CSS Level 2本身存在某种解决方法。
我尝试设置样式的菜单正在由CMS喷出,因此我无法将活动元素移动到 <li>
元素...(除非我主题菜单创建模块,我宁愿不这样做)。
有任何想法吗?
我该如何选择 <li>
元素是锚元素的直接父元素?
在示例中,我的CSS将是这样的:
li < a.active {
property: value;
}
显然有一些方法可以使用JavaScript来实现这一点,但我希望CSS Level 2本身存在某种解决方法。
我尝试设置样式的菜单正在由CMS喷出,因此我无法将活动元素移动到 <li>
元素...(除非我主题菜单创建模块,我宁愿不这样做)。
有任何想法吗?
目前无法在CSS中选择元素的父级。
如果有办法,它将在当前CSS选择器规范中的任何一个:
与此同时,如果您需要选择父元素,则必须使用JavaScript。
该 选择者4级工作草案 包括一个 :has()
与类相同的伪类 jQuery实现。截至2018年, 任何浏览器仍然不支持此功能。
运用 :has()
原来的问题可以用这个来解决:
li:has(> a.active) { /* styles to apply to the li tag */ }
我认为你不能只选择css中的父级。
但是你似乎已经有了 .active
上课,将那个班级移到后面会不会更容易 li
(而不是 a
)?这样你就可以访问了 li
和 a
仅通过css。
你可以用它 脚本。
*! > input[type=text] { background: #000; }
这将选择文本输入的任何父级。但是等等,还有更多。如果需要,可以选择指定的父级:
.input-wrap! > input[type=text] { background: #000; }
或者在它处于活动状态时选择它:
.input-wrap! > input[type=text]:focus { background: #000; }
看看这个HTML:
<div class="input-wrap">
<input type="text" class="Name"/>
<span class="help hide">Your name sir</span>
</div>
你可以选择那个 span.help
当。。。的时候 input
是活跃的并显示它:
.input-wrap! .help > input[type=text]:focus { display: block; }
还有更多功能;只需查看插件的文档。
顺便说一下,它适用于IE。
正如其他几个人所提到的那样,没有办法只使用CSS来设置元素的父/的样式,但以下工作原理 jQuery的:
$("a.active").parents('li').css("property", "value");
没有父选择器;只是没有以前的兄弟选择器的方式。没有这些选择器的一个很好的理由是因为浏览器必须遍历元素的所有子元素以确定是否应该应用类。例如,如果您写道:
body:contains-selector(a.active) { background: red; }
然后浏览器必须等到它已加载并解析所有内容,直到 </body>
确定页面是否应为红色。
本文 为什么我们没有父选择器 详细解释。
在css2中没有办法做到这一点。你可以将类添加到li并引用a
li.active > a {
property: value;
}
尝试切换 a
至 block
显示,然后使用您想要的任何样式。 a
元素将填补 li
元素,您将能够根据需要修改它的外观。别忘了设置 li
填充为0。
li {
padding: 0;
overflow: hidden;
}
a {
display: block;
width: 100%;
color: ..., background: ..., border-radius: ..., etc...
}
a.active {
color: ..., background: ...
}
据我所知,不是在CSS 2中。 CSS 3具有更强大的选择器,但并非在所有浏览器中始终如一地实现。即使使用改进的选择器,我也不相信它会完全符合您在示例中指定的内容。
我知道OP正在寻找一个CSS解决方案但是使用jQuery很容易实现。在我的情况下,我需要找到 <ul>
父标签 <span>
包含在孩子身上的标签 <li>
。 jQuery有 :has
选择器因此可以通过它包含的子节点识别父节点:
$("ul:has(#someId)")
会选择 ul
具有id的子元素的元素 someId。或者回答原始问题,类似下面的内容应该可以做到(未经测试):
$("li:has(.active)")
这是讨论最多的方面 选择者等级4 规范。 使用此选择器将能够通过在给定选择器(!)后使用感叹号根据其子项设置元素的样式。
例如:
body! a:hover{
background: red;
}
如果用户将鼠标悬停在任何锚点上,则会设置红色背景颜色。
但是我们必须等待浏览器实现:(