CSS 中能否选取父元素?
jQuery 可以实现, 想尽量避免 JS
关注者
103被浏览
405,6856 个回答
不能。你可以在这里查到 CSS3 提供的选择器(Selectors Level 3)详情: http://www.w3.org/TR/selectors/
CSS4 将很可能提供父元素选择器,但现在连语法都没定下来,更别提浏览器的实现了。
2022-07-22 更新:
CSS 父元素选择器现在已经登陆 Chrome 105、Safari 15.4,泪目!
的确是可以的:Selectors Level 4 中已经新增了「Subject 」选择器
Selectors Level 4
类似这样:
!li > p { border:1px solid #CCC; } /* 为 p 的父元素 li 设置一个边框 */
2014年5月16日 更新:
这个选择器语法一直在改动:
- 2011年,语法是 $E > F http://www.w3.org/TR/2011/WD-selectors4-20110929/#subject
- 2012-2013年,语法是 !E > F http://www.w3.org/TR/2012/WD-selectors4-20120823/#subject
- 2014年,语法改成了和 jQuery API 一样的 :has() 伪类(Relational Pseudo-class)http://dev.w3.org/csswg/selectors/#relational
相关讨论:http://lists.w3.org/Archives/Public/www-style/2014Feb/#msg408
li:has( > p){ border:1px solid #CCC; }
但是由于在实现上存在「回溯」的问题,一直迟迟没有浏览器去实现,更多关于父级选择器的讨论和实现问题参阅:如何给 W3C 组织提关于 Web 标准的建议?(父级选择器回溯问题)
其实性能和:last-child差不多,比:nth-last-child()要好,这也是为什么IE直到9才实现:last-child.
详见:
这里有一个 CSS 选择器说明和演示的网站:CSS4-Selectors
2015-07-23 更新:
:has() 选择器被推迟到 Selectors Level 5 https://lists.w3.org/Archives/Public/www-style/2015Jul/0296.html
2021-05-21