溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

CSS編程中值得注意的地方有哪些

發(fā)布時間:2021-09-17 17:27:32 來源:億速云 閱讀:106 作者:柒染 欄目:web開發(fā)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)CSS編程中值得注意的地方有哪些,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

CSS即層疊樣式表,所以一層一層覆蓋其實(shí)是其本質(zhì)特征。真正的問題在于維護(hù),許多人認(rèn)為CSS僅是樣式,不是代碼,無需維護(hù),所以任意書寫,只要將自己需要的樣式的優(yōu)先級設(shè)為最高即可,才導(dǎo)致了深層級CSS的出現(xiàn),因?yàn)槊看翁砑右粋€樣式就必須比以前的優(yōu)先級高才能在頁面看到。深層級不僅造成維護(hù)性降低,可讀性也是一個問題,人不是機(jī)器,無法很優(yōu)雅的按優(yōu)先級閱讀,所以很難確認(rèn)一個樣式用于哪里,其實(shí)還存在許多的冗余樣式,在任何地方都被覆蓋的樣式。這樣的代碼在擴(kuò)展性上,一開始反而是有優(yōu)勢的,因?yàn)樘砑右粋€新class,無需擔(dān)心影響其他地方,但慢慢隨著項(xiàng)目規(guī)模的增大,頁面增多,需要復(fù)制樣式的地方也越來越多,它們之間又存在微小的差異,設(shè)計的更改,需求的變化,這一切都會將這種快餐式的CSS推進(jìn)柏油坑。因?yàn)殡y以維護(hù),所以無法響應(yīng)需求,所以無法復(fù)用,只能復(fù)制,惡性循環(huán)。

正如上面所說的,問題在于可讀性、維護(hù)性、擴(kuò)展性、復(fù)用性這幾個方面。所以只要提高它們就能解決問題, 雖然這么說,也不是如此簡單的。先來談?wù)勗贑SS中,這些概念都有著怎樣的意義。
可讀性

有人認(rèn)為CSS不是程序,不需要可讀性,有人認(rèn)為CSS只要寫出來就有可讀性,因?yàn)楹芎唵?。拋開各種預(yù)處理器不說,原生CSS結(jié)構(gòu)確實(shí)簡單,沒有需要編程的部分,但仍然可能導(dǎo)致混亂。原因有二,一是CSS可以層疊,其中涉及到了優(yōu)先級和作用范圍,如果寫的不好,人很難讀出其中的意義,二是CSS屬性眾多,加上CSS3引入了很多用法獨(dú)特的屬性,一個選擇器可能包含幾十個屬性。比如下面這段我隨便寫的CSS代碼:

CSS 

  1. span {   

  2.     -webkit-box-shadow: 6px 4px 4px red;   

  3.     -moz-box-shadow: 6px 4px 4px red;   

  4.     box-shadow: 6px 4px 4px red;   

  5. }   

  6. div span {   

  7.     border-width4px;   

  8.     border-styledotted;   

  9.     border-colorblue;   

  10. }   

  11. #box {   

  12.     border-left2px solid red;   

  13.     border-bottom2px solid red;    

  14. }  

乍一看也沒什么,都是border,大致能看出來這段CSS只是為了添加一個紅色的陰影讓box看起來比較立體。但中間的部分似乎是搗亂的,你可能會說這太傻了,看不到嗎。是的,當(dāng)這3部分散落在上萬行的CSS中時,肯定看不到。于是有人很自然的想起了我們可愛的瀏覽器,沒錯,在瀏覽器中可以快速找到作用于目標(biāo)的CSS樣式,但這也是萬惡之源。首先我假設(shè)你不知道中間那部分東西是為了什么而寫的,因?yàn)槟闶强繛g覽器找到它的。然后剩下兩種可能,不管三七二十一改了再說和看看它為什么存在。前者悲劇的可能性是100%,后者悲劇的可能性是90%,因?yàn)槟阋呀?jīng)掉坑里了,很快我們會發(fā)現(xiàn)要修改它還牽扯到了另外的地方,接著在瀏覽器中探索到另一個莫名其妙的樣式,當(dāng)你弄懂全部的時候,你應(yīng)該已經(jīng)把上萬行的代碼弄了個一清二楚了,也許最幸運(yùn)的是,浪費(fèi)了幾個小時的時間發(fā)現(xiàn)只需要修改一行就能達(dá)到目的。

當(dāng)然,我們可以天真的認(rèn)為,只要把他們寫在一起就可以了,這樣找起來很簡單。而我將繼續(xù)順著這樣的思路來嘗試曝露問題。
維護(hù)性

所謂物以類聚是很有道理的,人們習(xí)慣將事物歸類,但問題是分類標(biāo)準(zhǔn),樣式并不關(guān)心業(yè)務(wù),無論是什么文字內(nèi)容,還是功能有何不同,它在乎的只是樣式,比如文字的尺寸,間距和寬高,顏色等等。如果簡單的將一個組件的樣式放在一起,勢必帶來的就是小段代碼的重復(fù)書寫。不覺得有多嚴(yán)重?我來舉個栗子。

CSS 

  1. aside {   

  2.     box-shadow: 6px 4px 4px #AA3343;   

  3. }   

  4. nav {   

  5.     box-shadow: 6px 4px 4px #AB3633;       

  6. }   

  7. .item {   

  8.     box-shadow: 6px 4px 4px #AA3732;   

  9. }   

  10. .item.otherStatus {   

  11.     box-shadow: 6px 4px 4px #AA3132;   

  12. }  

繼續(xù)說上面的例子,box需要陰影,但如果這個項(xiàng)目的UI統(tǒng)一風(fēng)格,包括sidebar,navigator以及item都需要這樣的陰影呢?再如果,明天客戶或者UX一拍腦袋,這個陰影應(yīng)該是灰色的不該是紅色的呢?不要繼續(xù)天真的認(rèn)為全局替換是救命稻草。首先,沒有幾個網(wǎng)站會用red,blur做色調(diào)的,你用的應(yīng)該是#AA3333,這樣的代碼,然后你發(fā)現(xiàn)sidebar用了#A43433,而navigator是#AB3633,等等,item有兩個狀態(tài),而兩個狀態(tài)對應(yīng)的顏色是不一樣的。這怎么可能?但當(dāng)你打開瀏覽器的時候你會發(fā)現(xiàn)本來就相差無幾的顏色,在陰影中變得一模一樣了,誰看的出來呢,當(dāng)初使用的時候可能也不過是隨意的在mockup中取的一個顏色。

大量的重復(fù)帶來的不僅僅是代碼的冗余,我們必須靠人力去同步它們,而人很難保證它們的修改是完全一致的,尤其是當(dāng)它們中引入了一些不一致的獨(dú)特的東西時。不要小看CSS,其后果就是進(jìn)度和人力的壓力,后面就是PM有沒有讀過《人月神話》的事了。

肯定有人在想,誰讓你當(dāng)初要寫成這樣呢。我們在讀代碼的時候最喜歡問,當(dāng)初為什么要這么寫?但慢慢的你會讀出它的歷史,有時候它是身不由己的。這就涉及到了下一個要討論的內(nèi)容。
擴(kuò)展性

擴(kuò)展性是一個具有欺騙性的東西,所謂的擴(kuò)展性其實(shí)就是在現(xiàn)有基礎(chǔ)上再次開發(fā)新東西的性能,但我認(rèn)為它還必須有前提條件,那就是保持可讀性與維護(hù)性。

簡單的追求可維護(hù)性是自取滅亡,原因很簡單,將新舊代碼完全分離的時候擴(kuò)展性最高,因?yàn)椴槐負(fù)?dān)心對以前的部分有影響,新的樣式可以隨意發(fā)揮。是不是很神奇,這樣想的我們寫下的代碼,肯定就是前面我們追問的代碼。所以自己回答自己吧,當(dāng)初沒考慮可讀性和維護(hù)性,只想著快點(diǎn)增加新的樣式,就這么寫了。

那什么才是一個好的擴(kuò)展性呢,簡單來說,就是多功能產(chǎn)品。比如一個box,也許它的樣式就時
復(fù)用性

似乎我一直在說的就是重復(fù),那我們就來說說復(fù)用性,如何才能復(fù)用CSS代碼是一個很大的問題,比如粒度,是一兩個屬性進(jìn)行復(fù)用還是一大組選擇器進(jìn)行復(fù)用呢,再比如對象,是為了class復(fù)用屬性,還是為了html復(fù)用class呢。這些選擇不算太重要,但是帶來的影響卻很重大,可以說是整個CSS結(jié)構(gòu)的改變。下面繼續(xù)用box的陰影來討論復(fù)用。

CSS 

  1. .shadow {   

  2.     -webkit-box-shadow: 6px 4px 4px #A93334;   

  3.     -moz-box-shadow: 6px 4px 4px #A93334;   

  4.     box-shadow: 6px 4px 4px #A93334;   

  5.     border-left2px solid #A93334\9;   

  6.     border-bottom2px solid #A93334\9;    

  7. }  

這樣看起來我有了一個shadow的class可以給任意的目標(biāo)加上這個陰影了,但這導(dǎo)致了一個復(fù)用的問題,和上面那段搗亂的CSS樣式一樣,如果item已有另外2個border了,那這個class是無法去除的。所以復(fù)用時不僅要考慮需要什么,還要考慮不需要什么。另外一些必須的屬性比如display還有overflow等也是要考慮的,因?yàn)閡ser agent的原因,很多屬性是隱藏在element中的。

上述就是小編為大家分享的CSS編程中值得注意的地方有哪些了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

css
AI