根據CSS4規範的初稿,parent selectors will finally be available in CSS。我的問題是,W3C爲什麼沒有在早期的CSS規範中包含這個?爲什麼它沒有與CSS的其他選擇器一起發佈?爲什麼從一開始就沒有用父選擇器設計CSS?
回答
首先:您從選擇器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,所以我不能說實現問題。
CSS被設計爲以向前方式應用,因此只要下載該元素的源代碼,就可以知道適用於元素的樣式。
父選擇器打破了該設計,因爲渲染器無法知道它是否適用於某個元素,直到從服務器上下載了所有元素子元素。
- 1. 爲什麼沒有計時器調用選擇器?
- 2. 從一開始就爲外聯網設計?
- 3. 爲什麼CSS設計器使用display:block?
- 4. 「..」在CSS選擇器開始處的含義是什麼?
- 5. 爲什麼一開始就有線程競賽?
- 6. 爲什麼CSS選擇器:父母不工作?
- 7. 如何重複jQuery中從一開始就好像什麼都沒有發生
- 8. 有沒有一個CSS選擇器?
- 9. 爲什麼yeoman firefire生成器不是從一開始就工作的?
- 10. CSS選擇器不工作,爲什麼?
- 11. :CSS中沒有選擇器
- 12. CSS選擇器沒有選擇?
- 13. CSS:沒有選擇器另一個類
- 14. MediaPalyer seekTo()從一開始就
- 15. C,從一開始就
- 16. 爲什麼從下往上應用嵌套的CSS選擇器?
- 17. 引用父選擇器,以及:沒有
- 18. 在css中使用開始選擇器是否有效?
- 19. CSS多級父選擇器
- 20. (爲什麼)被認爲是有害的CSS星形選擇器?
- 21. 什麼是沒有CSS「 - 」選擇器的技術原因?
- 22. 爲什麼Rails沒有將選擇查詢包裝到開始提交
- 23. 爲什麼scanf一開始就要求輸入?
- 24. 爲什麼我的心跳過程一開始就會死亡?
- 25. 爲Cocos2D提供幫助。如何從一開始就開始?
- 26. 我不能能夠設置從明天日期日期選擇器開始(材料設計日期選擇器)
- 27. 爲什麼兩個計數器增量在css選擇器中不起作用
- 28. 這:懸停選擇器沒有被應用 - 爲什麼?
- 29. 爲什麼綁定沒有更新選擇器選定項目
- 30. DataGridView在開始時沒有選擇行
你爲什麼不問他們? – Daedalus