回答
當涉及到性能,史蒂夫Souders的是的人:
的:
從報告一個無恥報價優化CSS選擇器的關鍵是 專注於最右邊的選擇器, 也被稱爲密鑰選擇器 (重合?)。這裏有更多 昂貴的選擇器:A.class0007 * {}。 雖然此選擇器可能看起來更簡單,但 瀏覽器的價格更高。因爲瀏覽器 從右向左移動,它開始於 檢查所有匹配 鍵選擇器「*」的元素。這意味着 瀏覽器必須嘗試將此 選擇器與 頁面中的所有元素進行匹配。
[大膽重點煤礦]
我也引用「很明顯,CSS選擇器與一個與許多元素相匹配的按鍵選擇器會顯着減慢網頁速度。」有趣的閱讀,謝謝。 – gpilotino 2009-11-11 10:46:14
我更喜歡這句話「基於這些測試,我有以下假設:對於大多數網站來說,優化CSS選擇器可能帶來的性能收益會很小,並且不值得花費。」 – arkanciscan 2015-10-18 04:22:25
@arkanciscan這是idd非常真實。優化CSS選擇器可能是過早優化的最佳案例之一。 – anddoutoi 2015-10-19 07:38:03
由於我使用的是在每一個我的項目完全相同的規則,並沒有產生嚴重的性能比較的問題,我會說:不,不是因爲據我所知。
一種觀點認爲,它不是那麼多*是一個性能問題,這是很好的舊喜歡 - 它有一個IE問題。它影響IE 5,5.5和6以及Macintosh變體。基本上,有一些所謂的HTML明星選擇錯誤,這適用如下:
* html
這應該被理解爲沒有元素匹配,因爲HTML是根,不能是一個子元素。 IE將此解釋爲html。
* * body
再一次,應該匹配到沒有元素,因爲身體不能是孫子元素 - 即使它是HTML的子元素。 IE將此解釋爲* body。
* html body
這應該不匹配任何元素,但IE將此解釋爲html正文。
性能方面通常認爲應用*僅意味着該樣式適用於頁面中的每個元素。我很少發現這本身就是一個問題 - 它將成爲一個問題的意義在於,無論如何你可能在這方面有太多的標記。同樣,它適用於所有內容,這意味着您需要增加代碼來處理不應該擁有該風格的元素。和其他一切一樣,決定什麼是權衡和平衡應該由您決定。
我不會說這是一個錯誤,但在這種情況下的開發人員錯誤 – Jonathan 2015-11-04 12:51:47
對於一些使用*
的屬性可能會產生意想不到的結果。
* { color: blue }
li { color: red }
現在給出<li><i>text</i></li>
,文本將是藍色!
是的,但是當你設置'*'的屬性時,你可能不會想到它*。用'*'和你很少使用的界面元素或元素,這是更真實的。 – Boldewyn 2009-11-11 10:15:54
@ ApoY2K:僅僅因爲它的運作方式應該是這樣,並不意味着它是預期的。當你有一個*選擇器時很容易忘記它。當你記得時,你必須仔細考慮**每次你添加一個新的元素**來檢查你是不是應用你不想要的樣式。 – DisgruntledGoat 2009-11-11 10:40:45
@ApoY2k:當然,如果你是完美的,永遠不會犯錯誤,你永遠不會寫出不符合預期的代碼。否則,認爲該顏色是從父代繼承是合理的,這就是紅色以外的文本是意外的。 – 2009-11-11 10:50:49
- 1. 爲什麼邪惡的合併被認爲是有害的?
- 2. 爲什麼多線程環境被認爲是有害的?
- 3. 字母O被認爲是有害的?
- 4. SQLite「COUNT(*)」被認爲是有害的?
- 5. 'make install'被認爲是有害的嗎?
- 6. org.hibernate.Session.clear()認爲是有害的?
- 7. 爲什麼我的CSS選擇器被轉換爲大寫IE
- 8. 什麼是這些CSS ...'標題/選擇器'被稱爲?
- 9. NSCopyObject認爲有害?
- 10. PKG_CHECK_MODULES認爲有害?
- 11. CSS選擇器不工作,爲什麼?
- 12. 究竟選擇這個CSS選擇器是什麼?爲什麼我有這種行爲?
- 13. 爲什麼Redis被認爲是CP?
- 14. 爲什麼'\\'被認爲是int?
- 15. 分配jQuery功能被認爲是有害的?
- 16. 使用「break」打破「for」循環被認爲是有害的?
- 17. jQuery選擇器中的變量和字符串連接 - 它被認爲是有害的嗎?
- 18. PHP sprintf認爲有害?
- 19. 風格認爲有害?
- 20. atexit認爲有害嗎?
- 21. JQuery CSS選擇器奇怪的行爲,爲什麼?
- 22. REST:HTTP 303是否被認爲對異步操作有害?
- 23. 爲什麼「TypeToken集合」被認爲是Typesafe? (有效的Java#29)
- 24. 什麼是CSS選擇器':'和'::'?他們有什麼區別?
- 25. 爲什麼選擇不被識別爲XElement的有效方法?
- 26. 爲什麼使用TransactionScope的默認構造函數有害?
- 27. 這:懸停選擇器沒有被應用 - 爲什麼?
- 28. Mac OSX? Linux呢? X?侏儒? KDE?爲什麼osx被認爲是linux,爲什麼它不被認爲是linux?
- 29. 這是否被認爲是上下文選擇器?
- 30. 選擇/選項元素的默認「搜索」行爲是什麼?
在你聽到什麼情況下,這是「有害」?以某些方式使用時,根據瀏覽器的不同可能會有不同的表現(例如,考慮'* html {}')。 – Blixt 2009-11-11 09:42:14
我問這也是因爲我看到「標準事實上」的CSS重置方法避免使用它。 – gpilotino 2009-11-11 10:42:43