高效的CSS(2023年7月4日更新)

2021-09-08 06:33:48 字數 3147 閱讀 8299

本文將介紹 mozilla ui 在用的一些 css 優化規則。第一部分是關於 mozilla 樣式系統如何分類選擇器的一般討論,在理解了這些的基礎上,第二部分則羅列了 mozilla 樣式系統書寫 css 的規則指南。

********************=2023年7月4日更新********************==

十六進製制的顏色值對位數與大小寫

編寫十六進製制顏色值時你可能會用小寫字母或省略成3位數,關於這寫法沒找到確實的資料證明對瀏覽器的渲染效率是否有影響,但十六進製制的顏色值預設標準是大寫及6位數標註。在未知情況下不希望冒險而降低了渲染的效率。

不贊成 -color:#f3a;

display與visibility的差異

他們用於設定或檢索是否顯示物件。display隱藏物件不保留物理空間,visibility為隱藏物件保留佔據的物理空間。當瀏覽器渲染被佔據的物理空間時,會有所消耗資源。

不贊成 -visibility:hidden;

border:none;與border:0;的區別

和display與visibility的關係類似,分別不保留與保留空間。更多的是border:0;儘管可以隱藏掉邊框,但它會為你保留border-color/border-style的使用權。

不贊成 -border:0;

不宜過小的背景平鋪

一張寬高1px的背景,雖然檔案體積非常之小,但渲染寬高500px的板塊需要重複平鋪2500次。提高背景渲染效率跟尺寸及體積有關,最大的檔案體積保持約70kb。

不贊成 -寬高8px以下的平鋪背景

ie的濾鏡

ie的濾鏡除了比較消耗資源外也有相容性問題。當中有令png透明的濾鏡,可採用gif或jpg似透非透的辦法來避免使用此濾鏡。建議只在ie6應用gif透明,因為ie7以上已經支援了png透明。

不贊成,濫用ie濾鏡因為消耗資源外也有相容性問題。

*避免瀏覽器樣式差異

*號萬用字元把所有標籤都初始化一遍,瀏覽器的渲染消耗一定的資源。有部分在標籤在不同瀏覽器上幾乎無差異,或是某些已經不推薦使用的標籤(因為你不會去用它),它們不需萬用字元要重新初始化一遍這樣做能節省一點資源。

不贊成,使用*號萬用字元

mozilla 樣式系統將規則主要分成四類。理解這個分類非常的重要,他是你了解規則匹配的第一步。下面我用了乙個術語:關鍵選擇符,指的是位於最右邊的選擇符。他可以是 id 選擇符,class 選擇符或者標籤選擇符。

id 選擇符作為關鍵選擇符

例:

button#backbutton  /* id 類 */

#urlbar[type="autocomplete"] /* id 類 */

treeitem > treerow > treecell#mycell :active /* id 類 */

class 選擇符作為關鍵選擇符

例:

button.*******button  /* class 類 */

.fancytext /* class 類 */

menuitem > .menu-left[checked="true"] /* class 類 */

標籤選擇符作為關鍵選擇符

例:

td  /* 標籤類 */

treeitem > treerow /* 標籤類 */

input[type="checkbox"] /* 標籤類 */

所有其他的都屬於此類

例:

:table  /* 通用類 */

[hidden="true"] /* 通用類 */

* /* 通用類 */

tree > [collapsed="true"] /* 通用類 */

mozilla 樣式系統先從最右邊的選擇符開始匹配,然後由右及左,依次匹配。只要子樹(?)繼續檢查,樣式系統就會繼續向左進行匹配,直到匹配成功或者因不匹配而退出。

你的第一步就是根據關鍵選擇符的型別過濾選擇器分類。目的就是過濾掉部分選擇器,而不需要浪費時間去嘗試匹配他們。這是增強效能的關鍵。你用來檢查元素用的選擇器類越少,樣式系統解析地就越快。例如,如果你的元素有乙個id,那麼只有符合元素id的id類會被檢查;只有符合元素class的class類會被檢查;只有符合元素標籤的標籤類會被檢查;而通用類則總是會被檢查。

確保選擇器不是以通用類結束。 

和上一條類似,所有的 class 也是唯一的。你應該把標籤名包含在 class 名中。

降低系統效率的乙個最大原因是我們在標籤類中用了過多的選擇符。通過新增 class 到元素,我們可以將類別進行再細分為 class 類,這樣就不用為了乙個標籤浪費時間去匹配過多的選擇符了。

子孫選擇符是css中最耗資源的選擇符。他真的是非常的耗資源,尤其是在選擇器使用標籤類或通用類的時候。很多情況中,我們真正想要的是子選擇符。除非有明確說明,在 ui css 中是嚴禁使用子孫選擇符的。

不要在標籤類中使用子選擇符。否則,每次元素的出現,都會額外地增加匹配時間。(特別是當選擇器似乎多半會被匹配的情況下)

小心地使用子選擇符。如果你能想出乙個的不使用他的方法,那麼就不要使用。特別是在 rdf 樹和選單會頻繁地使用子選擇符,像這樣。

請記住 rdf 的屬性是可以在模板中被複製的!利用這一點,我們可以複製那些想基於該屬性改變的子 xul 元素上的 rdf 屬性。

理解哪個屬性會繼承,並允許他們這麼做!我們已經清楚地建立了 xul widgetry(?) ,所以你可以把 list-style-image 或 font 屬性設定在父標籤上,然後他會滲透到匿名內容裡。這樣,你就不需要浪費時間在匿名內容上直接寫宣告了。

在上面的例子中,定義匿名內容樣式的需求(不用去搞明白 list-style-image 是如何繼承的)導致需要乙個 class 類的選擇器,而這條規則實際上更應該以最唯一的 id 類結尾。

請記住,特別是在匿名內容中,他們都擁有相同的 class 。上面那條不好的選擇器寫法導致每個選單的圖示都會被檢查是否包含在收藏夾選單欄目中。這是非常耗資源的(因為有很多選單);這個選擇器應該不要被收藏夾以外的選單檢查。

把很多組合在一張裡,然後用 -moz-image-region 來選擇他們,會比每張分開儲存,執行效率上高很多。

2023年7月4日隨筆

今天休假,其實休休假無非就是在家做做大掃除,做做自己喜歡 吃的飯,聽聽周杰倫的哥而已,過得很簡單,也很幸福,就像幾個月前的那樣。本來好早就想寫寫來上海一年的總結,一直忙於加班,也就淡忘了。沒有精彩的文筆,只有內心最真的獨白。人們在忙碌的腳步中忘記了思考,我也一樣。荒野 中的人生 影評 在漫長而短暫的...

2023年7月16日 給老婆寫的話

2008年7月16日 給老婆寫的話 2008年07月16日 星期三 12 44 p.m.現在好怕給你打 給你發簡訊。有時候聽著你的聲音我感覺我打 也是錯,發資訊我也不知道哪一條會有回音。我現在感覺不到我還重要,好難過。我們的距離好像比以前在一起的時候疏遠了許多。每次看到你我都不知道該如何讓你高興些,...

2023年4月7日星期三

2010年4 月7日星期三 今天,我也沒有什麼要跟大家說的,讓他們各自做自己的,我呢,答應陸老師要把我們目前已經進展的情況發給她看看,所以我今晚就和 sofing 在一起整合,可是資料庫不對,難住我了,她的資料發給我了,但是我讀不出來。盡快解決掉,那是乙個關鍵之一!在給陸老師的回信中寫得並不是很詳盡...