編寫(xiě)高性能可維護(hù)的css代碼

本文主要參考MDN|編寫(xiě)高效的CSS聊记、譯文編寫(xiě)高性能高質(zhì)量的CSS代碼楼熄、《高性能網(wǎng)站建設(shè)指南》拗盒、谷歌|優(yōu)化性能础钠、《web前端最佳實(shí)踐》—高性能css等總結(jié)而出恰力。感謝前人的智慧!

[TOC]


前言

CSS代碼重構(gòu)的目的:

我們寫(xiě)CSS代碼時(shí)珍坊,不僅僅只是完成頁(yè)面設(shè)計(jì)的效果牺勾,還應(yīng)該讓CSS代碼易于管理,維護(hù)阵漏。我們對(duì)CSS代碼重構(gòu)主要有兩個(gè)目的:
1驻民、提高代碼性能
2、提高代碼的可維護(hù)性

在這里我主要講解CSS代碼性能提升的一些知識(shí)履怯。

性能優(yōu)化

性能優(yōu)化是一門做減法的藝術(shù)回还。我們首要要盡力簡(jiǎn)化頁(yè)面渲染過(guò)程,然后要使渲染過(guò)程的每一步都盡量高效叹洲。

提高CSS代碼性能主要有兩個(gè)點(diǎn)

1柠硕、提高頁(yè)面的加載性能

提高頁(yè)面的加載性能,簡(jiǎn)單說(shuō)就是減小CSS文件的大小,提高頁(yè)面的加載速度蝗柔,盡可以的利用http緩存

2闻葵、提高CSS代碼性能

不同的CSS代碼,瀏覽器對(duì)其解析的速度也是不一樣的癣丧,如何提高瀏覽器解析CSS代碼的速度也是我們要考慮的

[TOC]

1.CSS選擇器

CSS選擇器具有高效的繼承性槽畔,引用Steve Souders的話, CSS選擇器效率從高到低的排序如下:

  • ID選擇器 比如#header
  • 類選擇器 比如.promo
  • 元素選擇器 比如 div
  • 兄弟選擇器 比如 h2 + p
  • 子選擇器 比如 li > ul
  • 后代選擇器 比如 ul a 7. 通用選擇器 比如 *
  • 屬性選擇器 比如 type = “text”
  • 偽類/偽元素選擇器 比如 a:hover
    以上引用自Steve Souders的Even Faster網(wǎng)站

縱使ID選擇器很快胁编、高效厢钧,但是它也僅僅如此,,盡量不要再css里面使用id嬉橙。從Steve Souders的CSS Test我們可以看出ID選擇器和類選擇器在速度上的差異很小很小早直。

1.1組合選擇器

你可以有一個(gè)標(biāo)準(zhǔn)的選擇器比如#nav,來(lái)選擇任何在此元素下的后代元素市框。此刻霞扬,我們讀這些是從左到右的方式。我們是先找到#nav拾给,然后從它的里面找其他元素祥得。但是瀏覽器解析這些不是這樣的:瀏覽器解析選擇器是從右到左的方式。

如果想要知道更多瀏覽器這樣解析的原因蒋得,請(qǐng)看Stack Overflow上的討論

1.2關(guān)鍵選擇器

渲染樣式時(shí)重要的是選擇器的最后面的部分即為關(guān)鍵選擇器(即用來(lái)匹配目標(biāo)元素的那部分级及,而不是該元素的祖先元素)。在以下例子中將使用該術(shù)語(yǔ)講解额衙。

例如饮焦,在下面規(guī)則中:

a img, 
div > h1, 
h1 + p {
  …
}

關(guān)鍵選擇器為:imgh1窍侧、p

CSS規(guī)范并沒(méi)有明確瀏覽器如何去實(shí)現(xiàn)樣式系統(tǒng)县踢,僅僅是說(shuō)明了它們必須這樣做。有鑒于此伟件,不同的樣式系統(tǒng)引擎可能會(huì)擁有完全不同的表現(xiàn)和行為硼啤,特別是 Gecko 與 WebKit, 這兩個(gè)引擎都是開(kāi)源項(xiàng)目斧账,實(shí)現(xiàn)了類似的算法谴返,具有極其相近的優(yōu)缺點(diǎn)。接下來(lái)就讓我們一睹樣式系統(tǒng)如何工作...

[TOC]

2.樣式系統(tǒng)工作原理

2.1樣式系統(tǒng)如何拆分規(guī)則

編寫(xiě)好的CSS代碼咧织,有助提升頁(yè)面的渲染速度嗓袱。本質(zhì)上,引擎需要解析的CSS規(guī)則越少习绢,性能越好渠抹。樣式系統(tǒng)將規(guī)則拆分成四個(gè)主要類別,如下所示,性能依次降低梧却。

  • ID規(guī)則
  • class規(guī)則
  • 標(biāo)簽規(guī)則
  • 通用規(guī)則

理解這些分類是十分關(guān)鍵的奇颠,因?yàn)樗鼈兪菢?gòu)建規(guī)則匹配塊的基礎(chǔ)。

ID規(guī)則

即包含了那些將 ID 選擇器作為關(guān)鍵選擇器的規(guī)則篮幢。

示例

#nav {.....}
a#person-intruc {.....}
#nav[href="#"] {.....}
.....

class規(guī)則

如果一個(gè)規(guī)則將一個(gè) class 明確作為它的關(guān)鍵選擇器大刊,那么它就屬于該類別。

示例

.nav {.....}
a.person-intruc {.....}
.nav[href="#"] {.....}
.....

標(biāo)簽規(guī)則

如果既沒(méi)有 class 也沒(méi)有 ID 來(lái)明確作為關(guān)鍵選擇器三椿,那么接下來(lái)的候選者就是 標(biāo)簽 類別。 如果一條規(guī)則將一個(gè)標(biāo)簽作為它的關(guān)鍵選擇器葫辐,那么這條規(guī)則就屬于該類別搜锰。

示例

li {.....}
a > img {.....}
a[href="#"]{.....}
p+ul{.....}
.....

通用規(guī)則

不屬于上面那些類別的規(guī)則都屬于這個(gè)類別。

示例

[hidden="true"] {…} /* A universal rule */  
* {…}       /* A universal rule */
tree > [collapsed="true"] {…} /* A universal rule */

2.2樣式系統(tǒng)如何匹配規(guī)則

樣式系統(tǒng)從關(guān)鍵選擇器開(kāi)始匹配規(guī)則耿战,然后左移(查找規(guī)則選擇器的任何祖先元素)蛋叼。只要選擇器的子樹(shù)(substree)一直在檢查,樣式系統(tǒng)就會(huì)持續(xù)左移剂陡,直到和規(guī)則匹配狈涮,或者是因?yàn)椴黄ヅ涠艞壴摋l規(guī)則。在這其中涉及到規(guī)則過(guò)濾的基本概念鸭栖,分類的意義恰恰在此歌馍,過(guò)濾掉無(wú)關(guān)的規(guī)則(避免浪費(fèi)時(shí)間去匹配)。


現(xiàn)在問(wèn)題來(lái)了晕鹊,那么什么樣式的CSS代碼能夠更快的匹配松却,不浪費(fèi)時(shí)間呢?

[TOC]

3.高效的CSS代碼編寫(xiě)

3.1避免使用通用規(guī)則和單個(gè)屬性選擇器作為關(guān)鍵選擇器

*溅话、[hidden="true"]等通用規(guī)則十分浪費(fèi)匹配時(shí)間晓锻。不必要時(shí)盡量不使用。

3.2避免過(guò)度約束

不要用標(biāo)簽名或 classes 來(lái)限定 ID 規(guī)則飞几,不要用標(biāo)簽名限定 class 規(guī)則

如果規(guī)則擁有 ID 選擇器作為其關(guān)鍵選擇器砚哆,則不要為規(guī)則增加標(biāo)簽名。因?yàn)?ID 是唯一的屑墨,增加標(biāo)簽只會(huì)沒(méi)必要地減緩匹配過(guò)程躁锁。

對(duì)于ID的在class這里同樣適用。標(biāo)簽可能會(huì)隨著設(shè)計(jì)改變绪钥,所以僅僅選擇嚴(yán)格語(yǔ)義化的名字作為類名并運(yùn)用是很好的選擇灿里。

【注意】定義過(guò)多id會(huì)使重用性降低,維護(hù)更困難程腹,所以不建議多用id匣吊。

盡量使用最具體的類別,即能一次搞定就一次搞定。解析速度變慢的罪魁禍?zhǔn)拙褪菢?biāo)簽類別中有過(guò)多的規(guī)則色鸳。通過(guò)增加 class 到元素上社痛,我們就可以進(jìn)一步的將這些規(guī)則劃分到 Class 類別中,這將減少用于匹配標(biāo)簽的時(shí)間命雀。

3.3避免后代選擇器

后代選擇器是 CSS 中性能耗用最大的選擇器蒜哀。它的性能開(kāi)銷相當(dāng)大——特別是當(dāng)選擇器在標(biāo)簽或通用類別中。通常我們需要的是 子選擇器吏砂。不僅性能低下而且代碼很脆弱撵儿,html代碼和css代碼嚴(yán)重耦合,html代碼結(jié)構(gòu)發(fā)生變化時(shí)狐血,CSS也得修改淀歇。

差
treehead treerow treecell {…}

略好,但還是差(查看下一條指南)
treehead > treerow > treecell {…}

3.4標(biāo)簽分類的規(guī)則不要包含子選擇器

標(biāo)簽類別的規(guī)則中避免使用子選擇器匈织。否則的話浪默,在該元素出現(xiàn)的所有地方,匹配時(shí)間都將極大延長(zhǎng)(特別是當(dāng)規(guī)則很可能會(huì)被匹配)缀匕。

差
treehead > treerow > treecell {…}
好//采用class規(guī)則
.treecell-header {…}

當(dāng)使用子選擇器時(shí)要十分謹(jǐn)慎纳决。能免則免。

3.5了解依賴?yán)^承乡小,減少代碼量

了解哪些屬性能夠繼承阔加,然后允許它們這樣做!

不可以繼承的屬性:
position劲件、z-index掸哑、top、right零远、bottom苗分、left、clip牵辣、display摔癣、

可以繼承的屬性:
color、font纬向、text-transform择浊、white-space、tab-size逾条、word-break琢岩、word-wrap、overflow-wrap师脂、text-align担孔、text-align-last江锨、text-justify、word-spacing糕篇、letter-spacing啄育、text-indent、line-height拌消、text-size-adjus挑豌、text-shadow、direction墩崩、writing-mode氓英、list-style、list-style-image鹦筹、list-style-position债蓝、list-style-type、table-layout盛龄、border-collapse、border-spacing芳誓、empty-cells余舶、quotes、cursor锹淌、zoom匿值、pointer-events

3.6避免鏈?zhǔn)剑ń患┻x擇符

// bad
.menu.left.icon {..}

// good
.menu-left-icon {..}

3.7盡可能精簡(jiǎn)規(guī)則、盡量不要在選擇符定義過(guò)多層級(jí)赂摆,層級(jí)越少挟憔,同時(shí)也降低了css和dom結(jié)構(gòu)的耦合程度,提高樣式的可維護(hù)性

定義簡(jiǎn)潔的css規(guī)則

使用復(fù)合(緊湊)語(yǔ)法

// bad
.someclass {
 padding-top: 20px;
 padding-bottom: 20px;
 padding-left: 10px;
 padding-right: 10px;
 background: #000;
 background-image: url(../imgs/carrot.png);
 background-position: bottom;
 background-repeat: repeat-x;
}

// good
.someclass {
 padding: 20px 10px 20px 10px;
 background: #000 url(../imgs/carrot.png) repeat-x bottom;
}

【特別注意】合理使用簡(jiǎn)寫(xiě)
你可能知道烟号,以下兩行 CSS 代碼并不是等價(jià)的:

background: rebeccapurple;
background-color: rebeccapurple;

前者是簡(jiǎn)寫(xiě)绊谭,它可以確保讓你得到 rebeccapurple 純色背景;但如果你用的是展開(kāi)式的單個(gè)屬性(background-color)汪拥,那這個(gè)元素的背景最終有可能會(huì)顯示為一個(gè)粉色的漸變圖案达传、一張貓的圖片、或任何東西迫筑,因?yàn)橥瑫r(shí)可能會(huì)有一條 background-image 聲明在起作用宪赶。通常在使用展開(kāi)式屬性的寫(xiě)法時(shí),會(huì)遇到這樣的問(wèn)題:展開(kāi)式寫(xiě)法并不會(huì)幫助你清空所有相關(guān)的其他屬性脯燃,從而可能會(huì)干擾你想要達(dá)到的效果搂妻。

了解更多,請(qǐng)參考 CSS 編碼技巧

避免不必要的命名空間

// bad
.someclass table tr.otherclass td.somerule {..}

//good
.someclass .otherclass td.somerule {..}

避免不必要的重復(fù)

// bad

.someclass {
 color: red;
 background: blue;
 font-size: 15px;
}

.otherclass {
 color: red;
 background: blue;
 font-size: 15px;
}

// good

.someclass, .otherclass {
 color: red;
 background: blue;
 font-size: 15px;
}

在上面規(guī)則的基礎(chǔ)上辕棚,合并相同定義(進(jìn)一步合并不同類里的重復(fù)的規(guī)則)欲主,刪除無(wú)效的定義

3.8避免 !important

更多關(guān)于邓厕!important請(qǐng)仔細(xì)閱讀該篇文章!important 的重要性:CSS 不變性。建議閱讀英語(yǔ)版本岛蚤,該篇中文翻譯某些地方感覺(jué)不太恰當(dāng)邑狸。僅僅在不得不使用它的時(shí)候輔助規(guī)則

3.9避免使用CSS表達(dá)式和濾鏡

使用CSS 的expression()通常會(huì)造成多次運(yùn)算。實(shí)際上涤妒,需要用到CSS表達(dá)式的地方单雾,通常能夠找到其他替代方案,所以避免使用CSS表達(dá)式她紫。

那么什么是css expression硅堆?

IE5及其以后版本支持在CSS中使用expression,用來(lái)把CSS屬性和Javascript腳本關(guān)聯(lián)起來(lái)贿讹,這里的CSS屬性可以是元素固有的屬性渐逃,也可以是自定義屬性。就是說(shuō)CSS屬性后面可以是一段Javascript表達(dá)式民褂,CSS屬性的值等于Javascript表達(dá)式計(jì)算的結(jié)果茄菊。在表達(dá)式中可以直接引用元素自身的屬性和方法,也可以使用其他瀏覽器對(duì)象赊堪。

3.10關(guān)于@import

import規(guī)則一定要先于除了@charset的其他任何CSS規(guī)則面殖,盡可能少用該方法引進(jìn)。在編寫(xiě)scss時(shí)如果引進(jìn)文件需要合并需采用@import "xxx.scss"哭廉。

示例:

#myDiv {
position: absolute;
width: 100px;
height: 100px;
background:#c00;
left: expression(document.body.offsetWidth - 180   "px");//這兒
top: expression(document.body.offsetHeight - -80   "px");//這兒
text-align:center;
line-height:90px;
color:#fff;
}

[TOC]

4.CSS中的圖片處理

4.1不給圖片設(shè)置不符合自身的尺寸(即縮放)

【解釋】:脊僚、同一張圖片可能會(huì)在頁(yè)面不同地方多次使用,比如縮略圖遵绰、正常圖辽幌、大圖。問(wèn)題來(lái)了椿访,如果圖片原始尺寸和實(shí)際需求不同乌企,在使用過(guò)程中就會(huì)存在性能問(wèn)題,利用樣式縮放會(huì)帶來(lái)cpu的額外計(jì)算過(guò)程赎离,增加了圖片在瀏覽器的渲染時(shí)間逛犹,網(wǎng)絡(luò)傳輸過(guò)程也會(huì)占更多帶寬,增加下載時(shí)間梁剔。因此虽画,最佳做法是,為需要的部分單獨(dú)做一套圖片荣病,初始頁(yè)面加載時(shí)就能更快展示码撰。

4.2使用css"雪碧圖"

是將零散的圖片合并成一張大圖,在利用css進(jìn)行背景定位个盆。好處是減少請(qǐng)求數(shù)脖岛,提高了圖片整體的加載速度朵栖。
但它也存在一些缺點(diǎn):

比如,多張圖片合并成大圖柴梆,需要精確計(jì)算陨溅,仔細(xì)的調(diào)整位置,單純手工制作是一件很復(fù)雜的事情绍在。(所幸現(xiàn)在有一些工具可以幫我們做)

另外门扇,維護(hù)過(guò)程復(fù)雜,要盡量讓已有的圖片保持原來(lái)的位置不變偿渡,如果是背景圖的尺寸發(fā)生變化導(dǎo)致原有區(qū)域無(wú)法放置臼寄,那就只好放棄,如果非要在原有位置修改溜宽,則剩余的圖片樣式都需要修改吉拳,是很繁瑣的過(guò)程。新加的圖片最好放在最后面适揉。

使用不當(dāng)會(huì)導(dǎo)致性能問(wèn)題留攒,最大的問(wèn)題就是內(nèi)存消耗。如果制作過(guò)程不做任何的規(guī)劃嫉嘀,隨意擺放稼跳,則可能會(huì)使圖片變得相當(dāng)大,從而很占內(nèi)存吃沪。

建議

  • 雪碧圖的尺寸要優(yōu)化好,空白盡可能少什猖;
  • 及時(shí)清理不再使用的圖片票彪;
  • 將雪碧圖權(quán)重做分離,全局/框架級(jí)的和局部/模塊級(jí)的分離開(kāi)不狮;
  • 緩存設(shè)定和更新頻率匹配降铸,如果將每天更新的雪碧圖的緩存設(shè)置到一個(gè)月很容易出問(wèn)題的。

4.3最佳實(shí)踐

1摇零、在項(xiàng)目后期應(yīng)用css sprite技術(shù)

因?yàn)橐话阍陂_(kāi)發(fā)過(guò)程中推掸,會(huì)比較頻繁的修改或者更換圖片,如果這個(gè)時(shí)候使用sprite技術(shù)驻仅,就會(huì)增加很多開(kāi)發(fā)成本谅畅。

2、合理組織“雪碧”圖

如果要把所有的圖片放在一張圖上面噪服,也會(huì)有不妥毡泻,維護(hù)方面也不會(huì)很方便。組織背景圖主要按照模塊和背景圖的風(fēng)格來(lái)劃分粘优。比如仇味,作為展示的縮略圖放在一起呻顽,評(píng)論、點(diǎn)贊丹墨、上下箭頭等圖標(biāo)放在一起等廊遍。

3、控制“雪碧”圖的尺寸和大小

因?yàn)榇蟪叽绲膱D片會(huì)占用大量的內(nèi)存贩挣,所以要控制在合理尺寸喉前,推薦長(zhǎng)寬相乘不超過(guò)2500,大小在200kb內(nèi)

4揽惹、合理控制背景圖單元間的距離及背景圖位置

這個(gè)原則是為了防止在背景圖比元素大小更小的時(shí)候被饿,區(qū)域出現(xiàn)別的無(wú)關(guān)背景圖

5、借助相關(guān)工具處理sprite

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末搪搏,一起剝皮案震驚了整個(gè)濱河市狭握,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疯溺,老刑警劉巖论颅,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異囱嫩,居然都是意外死亡恃疯,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門墨闲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)今妄,“玉大人,你說(shuō)我怎么就攤上這事鸳碧《芰郏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵瞻离,是天一觀的道長(zhǎng)腾仅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)套利,這世上最難降的妖魔是什么推励? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮肉迫,結(jié)果婚禮上验辞,老公的妹妹穿的比我還像新娘。我一直安慰自己喊衫,他們只是感情好受神,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著格侯,像睡著了一般鼻听。 火紅的嫁衣襯著肌膚如雪财著。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天撑碴,我揣著相機(jī)與錄音撑教,去河邊找鬼。 笑死醉拓,一個(gè)胖子當(dāng)著我的面吹牛伟姐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亿卤,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼愤兵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了排吴?” 一聲冷哼從身側(cè)響起秆乳,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钻哩,沒(méi)想到半個(gè)月后屹堰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡街氢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年扯键,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片珊肃。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荣刑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伦乔,到底是詐尸還是另有隱情嘶摊,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布评矩,位于F島的核電站,受9級(jí)特大地震影響阱飘,放射性物質(zhì)發(fā)生泄漏斥杜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一沥匈、第九天 我趴在偏房一處隱蔽的房頂上張望蔗喂。 院中可真熱鬧,春花似錦高帖、人聲如沸缰儿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乖阵。三九已至宣赔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞪浸,已是汗流浹背儒将。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留对蒲,地道東北人钩蚊。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蹈矮,于是被迫代替她去往敵國(guó)和親砰逻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案泛鸟? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,754評(píng)論 1 92
  • 簡(jiǎn)介網(wǎng)絡(luò)瀏覽器很可能是使用最廣的軟件蝠咆。在這篇入門文章中,我將會(huì)介紹它們的幕后工作原理谈况。我們會(huì)了解到勺美,從您在地址欄輸...
    wengjq閱讀 2,030評(píng)論 2 15
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,187評(píng)論 25 707
  • 《詩(shī)經(jīng)·召南·野有死麋》 野有死麕赡茸,白茅包之。有女懷春祝闻,吉士誘之占卧。 林有樸樕,野有死鹿联喘。白茅純束华蜒,有女如玉。 舒而...
    七徽閱讀 11,246評(píng)論 16 31
  • #卷毛佟的視界# 2017年攝于北京:一個(gè)工地的工人正在施工中豁遭。這個(gè)城市華麗的外表叭喜,離不開(kāi)背后默默無(wú)聞的工人,他們...
    卷毛佟閱讀 365評(píng)論 1 3