基于CSS4规范的初稿parent selectors will finally be available in CSS。我的问题是,为什么W3C在早期的CSS规范中不包括这个?为什么它不与CSS的其他选择器一起发布?
答案 0 :(得分:4)
首先:你从Selectors 4中引用的不只是“父选择器”。这是一个subject selector。这意味着它不仅涉及从一个选择器指向另一个选择器的组合子并且说“这是那个父级”,类似于子组合子>
。它需要语法说“这个特定的元素是将接收样式的元素”,即选择器的主题。这就是为什么你看到使用类似前缀或后缀的东西,而不是组合器。您只是发生才能使用它来选择元素的父级;但它的设计并没有考虑到这一功能。这就是为什么把它称为“父选择器”是不合适的。
主题选择器的语法难以理解。他们已经在这里待了十多年了,请注意;只需在public mailing list archives搜索“主题选择器”,你会发现可以追溯到1999年(!)的东西,当时CSS 2.0刚刚成为W3C推荐标准。即使在当前的Selectors 4草案中,他们还没有确定最终语法:2011年的FPWD使用$
符号,而在2012 WD中它现在是!
。
对于一般的父选择者:历史上 1 主要是从我所看到的重新绘制表现的问题。浏览器在下载页面时按顺序构建DOM,并在页面加载时立即实时应用。使用父选择器,浏览器必须等到其子项已知,然后才能决定是否应用其规则。这可能会导致重新绘制问题,尤其是在页面加载缓慢时,会进一步损害用户体验。
对于后代,子级或后续兄弟选择器,这不是问题,因为它们遵循文档的自然源顺序,特别是在HTML等声明性标记语言中。
我想,这是几个关注中最大的问题之一,它阻止了父母选择者的削减。实际上,在 very 开头,CSS1甚至没有子选择器或兄弟选择器;它只有一个后代选择器,它本身甚至没有被称为;它被简单地称为contextual selection,这是一个非常原始的概念,当时CSS刚刚从作为表现标记的开发地狱中产生。
1 现在,选择器4引入了一种将规则应用于复杂选择器中表示的任何单个元素的方法,您会想知道这些性能问题是否已得到解决或已经进行过不相关,因为整个选择器仍然必须依赖于一个完整的结构,以便浏览器确定匹配,这意味着页面加载仍然是一个主要因素。不幸的是,这对我来说是不受限制的;我没有实现CSS,所以我不能代表实现问题。
答案 1 :(得分:2)
CSS旨在以仅向前的方式应用,以便在下载该元素的源时立即知道适用于元素的样式。
父选择器会破坏该设计,因为在从服务器下载所有元素子项之前,渲染器无法知道它是否适用于元素。