網(wǎng)站規(guī)劃之合理架構(gòu)css

2017-01-02    分類(lèi): 網(wǎng)站建設(shè)

在當(dāng)時(shí)瀏覽器普遍支撐的前提下,CSS被咱們賦予了史無(wú)前例的使命。但是依靠css越多,款式表文件就會(huì)變得越大越雜亂。與此同時(shí),文件保護(hù)和安排的檢測(cè)也隨之而來(lái)。

(曾幾何時(shí))只要一個(gè)css文件就夠了——一切規(guī)矩(rule)匯聚一堂,增修改都很便利——可這種日子早已遠(yuǎn)去。(現(xiàn)在)樹(shù)立新網(wǎng)站時(shí),有必要花點(diǎn)時(shí)刻好好籌劃怎樣安排和架構(gòu)css。

文件的安排

構(gòu)建css系統(tǒng)的第一步是綱要的擬定。(我以為)css安排規(guī)劃的重要性堪比網(wǎng)站目錄結(jié)構(gòu)。(HTMLor注:用詞夸大一點(diǎn),讓你加深回憶) 沒(méi)有哪種計(jì)劃放之四海而皆準(zhǔn),因此咱們會(huì)討論一些根本的安排計(jì)劃,以及它們各自的利弊。

主css文件

通常能夠運(yùn)用一個(gè)主css文件,來(lái)放置一切頁(yè)面同享的規(guī)矩。這個(gè)文件會(huì)包括默許的字體、鏈接、頁(yè)眉和其他等款式。有了主css文件之后,咱們開(kāi)端討論高檔安排戰(zhàn)略。

辦法一:依據(jù)原型

最根本的戰(zhàn)略是依據(jù)原型頁(yè)面(archetype page)別離css文件。假定一個(gè)網(wǎng)站的主頁(yè)、子頁(yè)面和組合頁(yè)規(guī)劃不同,就能夠采用依據(jù)原型的戰(zhàn)略。(這種戰(zhàn)略下)每個(gè)頁(yè)面都會(huì)有專(zhuān)屬的css文件。

在原型數(shù)量不多的情況下,這個(gè)辦法簡(jiǎn)略明了、行之有效。但是,當(dāng)頁(yè)面元素并不墨守成規(guī)的位于各個(gè)原型頁(yè)時(shí),問(wèn)題就出現(xiàn)了。假定子頁(yè)面和組合頁(yè)同享某些元素,而主頁(yè)卻沒(méi)有,咱們應(yīng)該怎樣做呢?

把同享元素放入主css文件。這雖不是最純粹的解決辦法,卻適用于某些具體情況。但是假定網(wǎng)站巨大,(這樣做的話)主css文件會(huì)敏捷膨脹——這就違反了別離文件的初衷:避免導(dǎo)入不必要的大文件。

在組合頁(yè)和子頁(yè)面的css文件里各放一份款式代碼。(這么做)就意味著要保護(hù)冗余代碼,很顯然咱們不想這樣。

創(chuàng)立一個(gè)新的文件,由這兩種頁(yè)面同享。這聽(tīng)起來(lái)不錯(cuò)。不過(guò)假定只要10行代碼,咱們創(chuàng)立這個(gè)文件只是是為了同享這10行代碼?(htmlor 注:殺雞用牛刀?) 這辦法很純粹,但假定網(wǎng)站巨大有很多對(duì)頁(yè)面同享很少量元素時(shí)(htmlor注:比方30對(duì)頁(yè)面別離同享10行代碼),就顯得很粗笨了。

創(chuàng)立一個(gè)單獨(dú)的css文件,包括一切同享元素的款式。這辦法可能比較簡(jiǎn)略,卻要取決于網(wǎng)站的巨細(xì)和同享元素的多少。有種情況會(huì)很煩:導(dǎo)入了一個(gè)很大的css文件,但頁(yè)面只用到一小部分款式——仍是那句話,這違反了別離文件的初衷。

這便是我所說(shuō)的重疊的兩難(overlap dilemma)。零碎css規(guī)矩的重疊不一而足,并沒(méi)有一個(gè)徹底清晰無(wú)誤的計(jì)劃來(lái)安排它們。

辦法二:依據(jù)頁(yè)面元素/塊

假定網(wǎng)站運(yùn)用服務(wù)器端include,這個(gè)辦法會(huì)很不錯(cuò)。舉例說(shuō)明,假定運(yùn)用頁(yè)眉include,它會(huì)有自己相應(yīng)的css文件。頁(yè)腳或許其他部分的include能夠如法炮制,只須導(dǎo)入自己的css文件。這個(gè)辦法簡(jiǎn)略潔凈,不過(guò)可能會(huì)發(fā)作很多小css文件。

舉例來(lái)說(shuō),假定頁(yè)腳的款式只需求20行css代碼,單獨(dú)創(chuàng)立一個(gè)文件就劃不來(lái)了。并且這個(gè)辦法會(huì)導(dǎo)致每個(gè)頁(yè)面都包括一堆css文件——由于有多少include,就得有多少css文件。

辦法三:依據(jù)符號(hào)

這個(gè)計(jì)劃直觀實(shí)際,與前一個(gè)類(lèi)似。假定網(wǎng)站共有30個(gè)頁(yè)面,其中10個(gè)含有form,那么能夠創(chuàng)立一個(gè)css文件專(zhuān)門(mén)處理form的款式,只在這10個(gè)頁(yè)面導(dǎo)入它。假定另外10個(gè)頁(yè)面含有table,就創(chuàng)立一個(gè)文件專(zhuān)門(mén)處理table款式……諸如此類(lèi)。

另外的安排技巧

除了用片面的辦法安排文件,咱們還要考慮如打印、手持設(shè)備和屏幕等多種媒體類(lèi)型。這盡管現(xiàn)已很清楚的界說(shuō)過(guò),可依舊是樹(shù)立文件結(jié)構(gòu)時(shí)應(yīng)該考慮的一個(gè)因素。一旦有必要支撐多種媒體類(lèi)型,主css文件里的某些規(guī)矩可能就得重新考慮。

另外,品牌聯(lián)合也可能是一個(gè)重要因素。(htmlor注:如google和nike聯(lián)手推出的joga) 假定觸及品牌聯(lián)合,你就得考慮哪些元素應(yīng)該調(diào)整以適應(yīng)另一品牌。比方別離運(yùn)用不同的css文件等。

還有一個(gè)常被忽略的技巧:運(yùn)用嵌套的@import句子。只包括一連串@import句子,或許再加幾句css規(guī)矩,就能創(chuàng)立一個(gè)css文件。用這個(gè)辦法徹底能夠創(chuàng)立網(wǎng)站的主css文件(用@import導(dǎo)入各部分的款式文件)。假定網(wǎng)站的每個(gè)頁(yè)面都導(dǎo)入了4到5個(gè)不同的css文件,無(wú)疑你應(yīng)該考慮運(yùn)用這個(gè)技巧。

規(guī)矩和選擇器的安排

談完了文件安排,接著討論一下怎樣安排文件里的東西吧。很自然,咱們期望在文件里四通八達(dá)的瀏覽,敏捷找到要編輯的選擇器(selector)或規(guī)矩。

冗余 vs. 隸屬

正如Dave Shea在其文章《冗余 vs. 隸屬》(Redundancy vs. Dependency)里所說(shuō)的,你有必要不斷了解級(jí)聯(lián)(casCADe)。你要決議是對(duì)選擇器編組(意味著隸屬),仍是把它們別離(意味著冗余)。編組能夠堅(jiān)持代碼簡(jiǎn)潔簡(jiǎn)明,但是會(huì)樹(shù)立隸屬聯(lián)系,導(dǎo)致保護(hù)開(kāi)銷(xiāo)添加。假定不編組,就會(huì)添加文件巨細(xì),讓類(lèi)似的選擇器堅(jiān)持一致變得困難。只要做好這種權(quán)衡、取舍,才干每次都作出正確的決議。

按相互聯(lián)系/上下文編組

已然文件安排能夠是片面的,那么顯然,按照規(guī)矩和選擇器與其他部分的相互聯(lián)系來(lái)進(jìn)行編組是最好的辦法。舉例說(shuō)明,假定你用容器、頁(yè)眉和頁(yè)腳來(lái)完成布局,就應(yīng)該把它們編成一組。

這似乎很簡(jiǎn)略,其實(shí)不然。比方,把頁(yè)眉中的導(dǎo)航參加CSS時(shí),是將它跟父元素編組仍是獨(dú)立編組?這種情況下,要視乎規(guī)矩的上下文。通常,頁(yè)眉與頁(yè)面布局相關(guān),應(yīng)該與其他布局元素一同編組。而導(dǎo)航是頁(yè)眉的一塊,應(yīng)該和頁(yè)眉的其他塊編組,而不是頁(yè)眉自身。

運(yùn)用注釋

跟大多數(shù)代碼類(lèi)似,注釋是安排良好與否的要害。應(yīng)該依據(jù)css的控制范圍,清楚的標(biāo)示每節(jié)(section)。最好確保注釋視覺(jué)杰出,以便在內(nèi)容翻滾、一目十行時(shí)快速定位。

Doug Bowman在其文章《css安排技巧之一:符號(hào)》(CSS Organization Tip #1: Flags)里把css注釋玩得高超之極。他詳細(xì)說(shuō)明了在節(jié)名之前加上等號(hào),以便運(yùn)用文本編輯器的查找功能敏捷跳到某節(jié)。

別忘了

你應(yīng)該細(xì)致仔細(xì)的了解了特異性、級(jí)聯(lián)和承繼,并善用它們。它們之中的每一項(xiàng)都能夠是你最可怕的敵人,也能夠是你最友善的朋友。當(dāng)樹(shù)立巨大的網(wǎng)站時(shí),是否理解這些細(xì)微精妙之處,決議了你所構(gòu)建的是安如磐石的系統(tǒng),仍是經(jīng)不起風(fēng)雨的豆腐渣工程。(HTMLor注:這句徹底意譯,比較爽)

特點(diǎn)的安排

現(xiàn)在咱們了解了文件的安排,也知道了文件內(nèi)規(guī)矩的安排,但還有一個(gè)重要的安排環(huán)節(jié)(沒(méi)有提到),那便是特點(diǎn)(attribute)。盡管特點(diǎn)比前兩個(gè)概念更簡(jiǎn)略,但是還有一些非常好的、能夠堅(jiān)持規(guī)矩整齊的辦法很值得一提。

按字母排序

提到特點(diǎn),假定說(shuō)需求遵循什么原則的話,那便是:按-字-母-排-序。其實(shí)這招關(guān)于特點(diǎn)瀏覽協(xié)助不大,不過(guò)能夠防止特點(diǎn)值掩蓋這種偶然事情的發(fā)作。

舉個(gè)例子吧,現(xiàn)已數(shù)不清有多少次,我為某個(gè)選擇器界說(shuō)過(guò)了margin值,之后的某天無(wú)意間又加了一個(gè)(或前或后)。(這種情況下)后一個(gè)特點(diǎn)自然會(huì)起作用。假定不知道第二個(gè)特點(diǎn)存在,不論我怎樣調(diào)整第一個(gè)特點(diǎn)值、改寫(xiě)瀏覽器,也看不到頁(yè)面變化。(htmlor注:這個(gè)問(wèn)題我深有體會(huì)) 假定按照字母順序排列,你就會(huì)發(fā)現(xiàn)margin被界說(shuō)了兩次(由于它們挨在一同),這個(gè)問(wèn)題自然能夠避免。

優(yōu)先項(xiàng)

當(dāng)網(wǎng)站雜亂、牽涉太多css文件時(shí),會(huì)樹(shù)立很多的隸屬聯(lián)系。一旦需求定制某個(gè)元素特有的款式,!important選項(xiàng)似乎是好選擇。沒(méi)錯(cuò),!important是能解一時(shí)之需,但最好搞清楚導(dǎo)致問(wèn)題的本源,然后依據(jù)級(jí)聯(lián)聯(lián)系決議是否真的需求用它。

假定你對(duì)上文提到的特異性、級(jí)聯(lián)和承繼很熟悉,大可不必抱著!important一顆樹(shù)不放。(htmlor注:整片森林等著你~) 當(dāng)然它仍是會(huì)派上用場(chǎng),不過(guò)運(yùn)用之前要對(duì)具體情況了然于胸。千萬(wàn)不要由于不知問(wèn)題的癥結(jié)所在而把!important當(dāng)作捷徑或是彌補(bǔ)計(jì)劃。

小結(jié)

當(dāng)咱們變得依靠css而使款式表日漸雜亂時(shí),就需求正確的計(jì)劃來(lái)避免犯錯(cuò),并使代碼易于保護(hù)。已然好無(wú)缺的計(jì)劃并不存在,那么了解css的工作方式以及文件、選擇器和特點(diǎn)的多種安排計(jì)劃,無(wú)疑有助于咱們寫(xiě)出優(yōu)質(zhì)的代碼,飽嘗住時(shí)刻檢測(cè)。

新聞標(biāo)題:網(wǎng)站規(guī)劃之合理架構(gòu)css
標(biāo)題URL:http://www.muchs.cn/news14/73864.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、軟件開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站、App設(shè)計(jì)、網(wǎng)站策劃、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名