中的标记的
父标记。jquery具有:has选择器,因此可以通过它包含的子级来标识父级:
将选择具有id someid子元素的ul元素。或者为了回答最初的问题,像下面这样的方法应该可以实现(未经测试的):
- 或者使用$yourSpan.closest("ul"),您将得到SPAN元素的父级ul。不过,你的回答完全是离题的。我们可以用jquery解决方案来回答所有带有CSS标签的问题。
- 如其他答案所示,使用CSS 2无法做到这一点。考虑到这一限制,我提供的答案是我所知道的有效答案,并且是使用javascript imho回答问题的最简单方法。
- 考虑到你的支持,有些人同意你。但唯一的答案仍然是被接受的答案;简单明了的"它不能按你想要的方式去做"。如果问题是如何在自行车上以60英里/小时的速度行驶,而你的答案是"简单;上车然后加油",那么这仍然不是一个答案。因此我的意见。
- 这种方法几乎完全没用。我这样寻找如何解决问题,不去寻找"唯一答案"也解决不了这个问题。这就是为什么这么棒的原因,因为总有不止一种方法可以剥猫皮。
这是选择器级别4规范中讨论最多的方面。使用此选择器,可以在给定的选择器(!)后使用感叹号,根据元素的子级设置元素的样式。.
例如:
1 2 3
| body! a:hover{
background: red;
} |
如果用户悬停在任何锚点上,将设置红色背景色。
但是我们必须等待浏览器实现:(
您可以尝试使用超链接作为父级,然后在悬停时更改内部元素。这样地:
1 2 3 4 5 6 7
| a.active h1 {color:red;}
a.active:hover h1 {color:green;}
a.active h2 {color:blue;}
a.active:hover h1 {color:yellow;} |
这样,可以根据父元素的滚动来更改多个内部标记中的样式。
- 这是正确的,但如果您希望符合XHTML标准,则仅将a标记内的标记代码限制为某些元素。例如,如果没有收到违反模式的警告,您就不能在a中使用div。
- 完全正确,伊瓦莱!""是非块元素,因此不能在其中使用块元素。
- 在HTML5中,将块元素放在链接中是非常好的。
- @Matthewjamestaylor在语义上是完全错误的
- …如果它在语义上是错误的,他们就不会允许它出现在HTML5中以前没有的地方。
伪元素:focus-within允许在子代具有焦点时选择父代。
如果元素具有tabindex属性,则可以对其进行聚焦。
浏览器支持
表索引
例子
1 2 3 4 5 6 7 8 9 10 11
| .click {
cursor: pointer;
}
.color:focus-within .change {
color: red;
}
.color:focus-within p {
outline: 0;
} |
1 2 3 4 5 6 7 8
| <p class="change" tabindex="0">
I will change color
</p>
<p class="click" tabindex="1">
Click me
</p> |
- 这对我来说很好,谢谢!只是不,如果您将颜色更改为父级,而不是兄弟级,则示例将更具说服力,这是将.color:focus-within .change替换为.color:focus-within。在我的例子中,我使用的是引导导航栏,它在活动时将类添加到子类中,并且我想将类添加到parent.nav栏中。我认为这是一个非常常见的场景,我拥有标记,但组件css+js是引导(或其他),所以我无法更改行为。尽管我可以添加tabindex并使用这个css。谢谢!
目前没有父选择器&;它甚至没有在W3C的任何讨论中讨论。您需要了解浏览器如何评估CSS,以实际了解我们是否需要它。
这里有很多技术解释。
Jonathan Snook解释了如何评估CSS。
克里斯·科伊尔谈家长选择。
哈利·罗伯茨又一次写了高效的CSS选择器。
但是尼科尔·沙利文有一些关于积极趋势的有趣事实。
这些人都是前端开发领域的一流人才。
- need是由Web开发人员的需求定义的,是否在规范中包含它取决于其他因素。
有人提出过这样的建议吗?只是一个横向菜单的想法…
HTML的一部分
1 2 3 4
| Link
<!-- submenu takes this place --> |
CSS的一部分
1 2 3 4 5 6 7 8 9 10 11
| /* hide parent backgrounds... */
.parent-background {
display: none; }
/* ... and show it when hover on children */
.item:hover + .parent-background {
display: block;
position: absolute;
z-index: 10;
top: 0;
width: 100%; } |
更新了演示和其他代码
另一个如何与文本输入一起使用的示例-选择父字段集
- 我一点也不清楚您是如何将其概括为一些/许多/大多数父选择器用例的,或者甚至不清楚这个CSS的哪些部分在做什么。你能加一个详细的解释吗?
- 我并没有尝试将其应用于现实世界中的场景,这就是为什么我说"不用于生产"。但我认为它只能应用于两级菜单,且项目宽度固定。"这个css的哪些部分在做什么?"。这里的test sibling实际上是父项(css的最后一行)的背景。
- 添加说明(JSfiddle的CSS部分,从"主要部分"开始)我错了——可能有很多次转租。
有一个扩展了CSS的插件,它包含了一些非标准的功能,这些功能在设计网站时非常有用。它叫EQCS。
eqcss添加的内容之一是父选择器。它适用于所有IE8及更高版本的浏览器。格式如下:
1 2 3 4 5
| @element 'a.active' {
$parent {
background: red;
}
} |
因此,我们在这里打开了每个元素a.active的元素查询,对于查询中的样式,像$parent这样的东西是有意义的,因为有一个参考点。浏览器可以找到父级,因为它与JavaScript中的parentNode非常相似。
这里有一个$parent的演示,另一个$parent的演示在IE8中工作,以及一个屏幕截图,以防您没有IE8测试。
eqcs还包括元选择器$prev,用于选定元素之前的元素,$this仅用于匹配元素查询的元素,等等。
然而,从技术上讲,没有直接的方法可以做到这一点,您可以使用jquery或javascript对其进行排序。
不过,你也可以这样做。
1 2
| a.active h1 {color:blue;}
a.active p {color: green;} |
JQuery
1
| $("a.active").parents('li').css("property","value"); |
如果您想使用jquery实现这一点,这里是jquery父选择器的引用
W3C排除了这样的选择器,因为它会对浏览器产生巨大的性能影响。
- 错误的。因为DOM是一棵树,所以它们必须在到达子节点之前转到父节点,所以只需返回一个节点即可。O.O
- CSS选择器是一个队列,因此将计算选择器顺序,而不是文档xpath或dom层次结构。
- @至少他们是这么告诉我们的。
简言之,在CSS的这个阶段,我们没有parent selector,但是如果您无论如何都不需要交换元素或类,第二个选项是使用javascript,如下所示:
1 2 3 4 5 6 7
| var activeATag = Array.prototype.slice.call(document.querySelectorAll('a.active'));
activeATag.map(function(x) {
if(x.parentNode.tagName === 'LI') {
x.parentNode.style.color = 'red'; //your property: value;
}
}); |
或者,如果在应用程序中使用jquery,则使用较短的方法:
1
| $('a.active').parents('li').css('color', 'red'); //your property: value; |
现在是2019年,CSS嵌套模块的最新草案实际上有类似的内容。介绍@nestAT规则。
3.2. The Nesting At-Rule: @nest
While direct nesting looks nice, it is somewhat fragile. Some valid nesting selectors, like .foo &, are disallowed, and editing the selector in certain ways can make the rule invalid unexpectedly. As well, some people find the nesting challenging to distinguish visually from the surrounding declarations.
To aid in all these issues, this specification defines the @nest rule, which imposes fewer restrictions on how to validly nest style rules. Its syntax is:
@nest = @nest { }
The @nest rule functions identically to a style rule: it starts with a selector, and contains declarations that apply to the elements the selector matches. The only difference is that the selector used in a @nest rule must be nest-containing, which means it contains a nesting selector in it somewhere. A list of selectors is nest-containing if all of its individual complex selectors are nest-containing.
(从上面的URL复制并粘贴)。
本规范下的有效选择器示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| .foo {
color: red;
@nest & > .bar {
color: blue;
}
}
/* equivalent to
.foo { color: red; }
.foo > .bar { color: blue; }
*/
.foo {
color: red;
@nest .parent & {
color: blue;
}
}
/* equivalent to
.foo { color: red; }
.parent .foo { color: blue; }
*/
.foo {
color: red;
@nest :not(&) {
color: blue;
}
}
/* equivalent to
.foo { color: red; }
:not(.foo) { color: blue; }
*/ |
虽然目前标准CSS中没有父选择器,但我正在开发一个名为axe(即增强的CSS选择器语法/acsss)的(个人)项目,在它的7个新选择器中,这两个都包括: