2012-12-30 16 views

回答

4

首先:您從選擇器4引用的內容不僅僅是「父選擇器」。這是一個subject selector。這意味着它不僅僅涉及一個組合器,該組合器從一個選擇器指向另一個並且說「這是它的父」,類似於子組合器>。它需要說「這個特定的元素是接收樣式的元素」的語法,即選擇器的主題。這就是爲什麼你看到使用諸如前綴或後綴之類的東西,而不是組合器。你只需要發生就可以用它來選擇一個元素的父親;但它並沒有單獨設計這種功能。這就是爲什麼把它稱爲「父母選擇器」是不恰當的。

而對於主題選擇器的語法卻非常難以正確。他們已經在這裏超過10年了,關注你;只需在public mailing list archives中搜索「主題選擇器」,就可以找到可追溯到1999年(!)的內容,當時CSS 2.0已經成爲W3C推薦標準。即使在目前的Selectors 4草案中,他們還沒有確定最終語法:2011年的FPWD使用$符號,2012年的WD現在是!

至於父母選擇一般:這是歷史上主要是一個問題,從我所看到的重新繪製性能。瀏覽器在頁面被下載時依次構建DOM,並且在頁面加載時立即實時應用CSS 。通過父母選擇器,瀏覽器必須等到其孩子知道後才能決定是否應用其規則。這可能會導致重新繪製問題,特別是在頁面加載速度較慢時,這會進一步導致用戶體驗的損害。

這對於後代,孩子或兄弟姐妹選擇器不是問題,因爲它們遵循文檔的自然源順序,尤其是像HTML這樣的聲明性標記語言。

這是我認爲的幾個關注點中最大的一個,它阻止了父母選擇者進行切割。其實,在非常開始,CSS1甚至沒有孩子或兄弟姐妹選擇器;它只有一個後代選擇器,它本身甚至不被稱爲;它被簡單地稱爲contextual selection,這是一個非常原始的概念,當時CSS剛剛從顯示標記的發展地獄中誕生。


既然選擇器4引入了一種規則適用於複雜的選擇表示的任何單獨的元素,你會想,如果這些性能問題已得到解決或以其他方式作出無關緊要的,因爲整個選擇器仍然必須依賴完整的結構以便瀏覽器確定匹配,這意味着頁面加載仍然是一個主要因素。不幸的是,這對我來說是有限的。我沒有實現CSS,所以我不能說實現問題。

2

CSS被設計爲以向前方式應用,因此只要下載該元素的源代碼,就可以知道適用於元素的樣式。

父選擇器打破了該設計,因爲渲染器無法知道它是否適用於某個元素,直到從服務器上下載了所有元素子元素。

相關問題