日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
我的CSS就是這么可愛(ài)——如何組織CSS

本文轉(zhuǎn)載自微信公眾號(hào)「微醫(yī)大前端技術(shù)」,作者許浩星 。轉(zhuǎn)載本文請(qǐng)聯(lián)系微醫(yī)大前端技術(shù)公眾號(hào)。

10年積累的成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有通遼免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

寫在前面

開局先問(wèn)大家一個(gè)問(wèn)題:前端三劍客分別是誰(shuí)?

不用說(shuō),絕大部分前端開發(fā)都會(huì)脫口而出:HTML、CSS 和 JavaScript。要是這個(gè)還需要猶豫的話,朋友自己去墻角反省一下自己[手動(dòng)狗頭]。既然被稱為三劍客,那么就意味著這三者在前端開發(fā)中起到了重要的作用。HTML 負(fù)責(zé)頁(yè)面結(jié)構(gòu)的搭建,CSS 負(fù)責(zé)頁(yè)面的布局與美化,而 JS 負(fù)責(zé)的是賦予靜態(tài)頁(yè)面以動(dòng)態(tài)的邏輯。從這個(gè)角度來(lái)看,這三者真的是缺一不可。但是隨著業(yè)務(wù)需求的緊逼,我們往往做不到“雨露均沾”,有意無(wú)意得忽略了某個(gè)角色——CSS。

就比如我自己,在日常的業(yè)務(wù)開發(fā)中,就經(jīng)常將注意力放在了 HTML 結(jié)構(gòu)和 JS 邏輯上,對(duì)于 CSS 就冷淡了很多。這樣子造成的后果就是當(dāng)頁(yè)面的交互豐富、樣式多樣的時(shí)候,我們寫的 CSS 代碼行數(shù)多的嚇人,而且再也不想再看第二遍。用高情商的話說(shuō)就是,我們寫的 CSS 代碼讓后續(xù)的開發(fā)者維護(hù)起來(lái)很有挑戰(zhàn)性。

靜下心來(lái),我仔細(xì)地剖析了一下原因,發(fā)現(xiàn)主要是因?yàn)闃邮酱a的穩(wěn)定性高。寫完了一遍 CSS,以后基本不可能再要修改了。這種“一次性”很難不讓人帶著一點(diǎn)糊弄的“心態(tài)”去開發(fā),然后留下一堆爛攤子給后面的同事罵人??。

但是!天道好輪回!如果碰到了需要去修改別人寫過(guò)的 CSS 樣式,那么這就是噩夢(mèng)??。很難不讓人改的懷疑人生,最后選擇重寫一遍(嗚嗚嗚,別罵了,別罵了)!在碰到過(guò)這種情況后,我意識(shí)到我們需要從一個(gè)整體的角度來(lái)指導(dǎo) CSS 書寫,從而讓樣式文件變得更加美麗!這也是我寫這篇文章的初衷。

一、CSS 與審美

??審美是主觀的,它受到各方面因素的影響,例如文化背景,知識(shí)體系和性格愛(ài)好等等。我們作為前端開發(fā),在編程這個(gè)領(lǐng)域內(nèi)更是經(jīng)常與審美打交道。有時(shí)候我們經(jīng)常說(shuō)某某代碼寫的垃圾,看半天也看不懂。某某大佬代碼寫的強(qiáng)無(wú)敵,條理清晰和邏輯完備。這些對(duì)于代碼的評(píng)價(jià)就是我們對(duì)于審美認(rèn)知的體現(xiàn)。

??CSS 的存在就是賦予頁(yè)面美麗,如下面動(dòng)圖所示:

上面的動(dòng)圖我想每一位用戶都更喜歡加了 CSS 文件之后的頁(yè)面吧,因?yàn)榉先说膶徝馈?/p>

既然 CSS 能夠讓頁(yè)面更加漂亮,那么對(duì)于 CSS 本身,我們更應(yīng)該讓它美起來(lái)!

二、什么樣的 CSS 是受人喜歡的?

??前面我們已經(jīng)找到了我們的目的:讓 CSS 更加好看!那么好看的目的是什么呢?是讓人喜歡。讓我們?cè)谛枨箝_發(fā)時(shí)不抗拒去修改原有的代碼。那么這就引出了一個(gè)問(wèn)題:什么樣的代碼讓人抗拒去修改?我們看看下面的兩種 CSS 代碼:

個(gè)人來(lái)說(shuō),第一眼看上去,左邊的代碼“擠”在一起,顯得亂糟糟的。而右邊的代碼更為清晰,每塊之間還有空行,讓人感覺(jué)更為舒服。那么問(wèn)題來(lái)了,為什么右邊的代碼會(huì)讓我看上去舒服點(diǎn)?我在仔細(xì)比較這兩塊代碼的區(qū)別之后,我找到了答案:

每塊代碼之間間隔有序,不至于給人一個(gè)無(wú)比龐大的概念。

層級(jí)控制不超過(guò) 3 層,避免了過(guò)多嵌套層級(jí)“惡心”人

遵循了 BEM 命名規(guī)范,潛在的傳遞了關(guān)于元素之間的層級(jí)關(guān)系

??總結(jié)起來(lái)就是:將代碼的邏輯關(guān)注點(diǎn)分割個(gè)多個(gè)開發(fā)者可以輕易消化的小塊,同時(shí)做到一定意義的自解釋。這樣的處理減少了人腦需要處理這些代碼邏輯的難度,自然會(huì)給人舒服的感覺(jué)!

那么我們下面思考的更加深入點(diǎn),抽象出 CSS 的書寫原則。

三、CSS 的一些書寫原則

??CSS 本身是沒(méi)有什么內(nèi)置的組織方式的,并且有各種書寫的方式,例如:內(nèi)聯(lián)和外鏈等等。所以我們需要自己完成建立編寫 CSS 時(shí)維持統(tǒng)一性和規(guī)則性的工作。Web 社區(qū)也已經(jīng)存在了多種工具和方法,來(lái)幫助開發(fā)者管理大的 CSS 項(xiàng)目。我們可以借鑒并調(diào)整為適合我們自己的書寫方式。但在這之前,我們需要明確幾個(gè) CSS 書寫原則。

  • 少即是多
  • 自解釋
  • 可復(fù)用

??上面 3 條原則是我在開發(fā)過(guò)程中自己總結(jié)出來(lái)的,如果大家有更多的想法??,歡迎和我一起探討。先說(shuō)說(shuō)第一條原則:少即是多(Less is more)。這句話的英文版本是建筑師凡德羅在建筑領(lǐng)域提出的觀點(diǎn)。他反對(duì)機(jī)械化生產(chǎn)的產(chǎn)品中存在的繁復(fù)的無(wú)意義的裝飾。這同樣也適用于 CSS 的編寫中。在前端三劍客中,HTML 是結(jié)構(gòu),JS 是行為,CSS 則是表現(xiàn)。換句話說(shuō),CSS 的作用是裝飾頁(yè)面。在這個(gè)前提下,去除那些冗余繁復(fù)的 CSS 代碼不僅能減小瀏覽器的性能消耗,還能讓開發(fā)者更加深入的思考表現(xiàn)與結(jié)構(gòu)之間的關(guān)系。我認(rèn)為這對(duì)于前端開發(fā)工程師的思維成長(zhǎng)是有幫助的。

 
 
 
 
  1. // 存在多余的代碼 
  2. .footer { 
  3.   margin-top: 30px; 
  4.   margin-bottom: 20px; 
  5.  
  6. // 優(yōu)化 
  7. .footer { 
  8.  margin: 30px 0 20px 0; 

上面的代碼就是最簡(jiǎn)單的少即是多的實(shí)踐,但不僅限于此。我們更需要從整體上進(jìn)行思考與實(shí)踐。那么如何做到這一點(diǎn)呢?無(wú)它,惟手熟爾。所以每次開發(fā)中,都要記住我們的口號(hào):“絕不多寫一行 CSS!”。

第 2 條原則自解釋的意思是 CSS 的書寫要盡量說(shuō)明自己是干什么的,減少額外的注釋代碼。

 
 
 
 
  1. // 存在模糊地方 
  2. .footer:first-child { 
  3.   color: #FFF; 
  4.   font-size: 18px; 
  5.  
  6. // .footer-title { 
  7.   color: #FFF; 
  8.   font-size: 18px; 

上面的代碼解釋了這個(gè)元素的目的,是 footer 部分中關(guān)于 title 的文本。這樣可以讓我們很容易定位到對(duì)應(yīng)的 html 元素,從而進(jìn)行樣式的修改。對(duì)于這條原則的實(shí)現(xiàn),社區(qū)已經(jīng)有了一套很完善的方案:BEM 命名。這套規(guī)范即避免了不同文件下的命名沖突,還很好的賦予了 CSS 類名的語(yǔ)義化。讓我們的腦子對(duì)于 CSS 那種模糊的印象變得條理清晰。

    
 
 
 
  1.  
  2.      
  3.      
  4.       王狗蛋 
  5.     
 
  •      
  •       24 
  •     
  •  
  •   
  •  
  •    
  •      
  •       確定 
  •     
  •  
  •   
  •  
  •  

    上面這段代碼就較好的使用 BEM 命名將額外的頁(yè)面結(jié)構(gòu)信息塞到了 CSS 類名上了,讓開發(fā)者不至于摸不清 CSS 的對(duì)應(yīng) DOM 結(jié)構(gòu)。再配上預(yù)處理語(yǔ)言 SASS 等,更加從心智上將消除了 CSS 的信息缺少與模糊性,保證了頁(yè)面結(jié)構(gòu)、表現(xiàn)和行為的統(tǒng)一性。

    最后一條可復(fù)用的原則就不多說(shuō)了,懂得都懂。這條原則的基礎(chǔ)是 CSS 預(yù)處理語(yǔ)言的使用。因?yàn)?CSS 本身是一種描述語(yǔ)言,本身是沒(méi)有邏輯的。但是隨著業(yè)務(wù)的越來(lái)越復(fù)雜,我們渴望將邏輯代碼加入 CSS 中。這也是 SASS 預(yù)處理語(yǔ)言興起的原因之一。加入邏輯的 CSS 預(yù)處理語(yǔ)言中,我們可以定義變量、使用循環(huán)和條件判斷,從而復(fù)用 CSS 代碼。

    四、保持 CSS 整潔的技巧

    在了解了書寫 CSS 的原則之后,我們還需要在實(shí)踐中運(yùn)用它們。在這個(gè)過(guò)程,一些保持 CSS 整潔的技巧對(duì)我們實(shí)踐是很有幫助的。

    1. 確定項(xiàng)目的代碼規(guī)范

    ??在和多人進(jìn)行項(xiàng)目的開發(fā)時(shí),第一時(shí)間需要檢查該項(xiàng)目是否有了 CSS 的代碼規(guī)范。遵循項(xiàng)目的代碼規(guī)范進(jìn)行開發(fā),是保持 CSS 整潔的基礎(chǔ),也是不讓別人吐槽的護(hù)盾。如果你的個(gè)人喜好跟規(guī)范相沖突,那么還是請(qǐng)遵守規(guī)范,因?yàn)閯e人或許不喜歡你的風(fēng)格。

    2. 保持統(tǒng)一

    ??當(dāng)你開始進(jìn)行需求開發(fā)并書寫 CSS 代碼時(shí),最重要的是保持各方面的統(tǒng)一。例如之前的代碼使用的是 rem 單位,并且在代碼開頭進(jìn)行了換算和變量定義。那么你需要做的就是跟隨!!而不是標(biāo)新立異的使用另一套自己的方式。

    統(tǒng)一在所有的地方都會(huì)起到實(shí)際作用,例如對(duì)類使用相同的命名常規(guī),選擇一種描述顏色的方式,或者維護(hù)一個(gè)統(tǒng)一的格式化方式(例如你是使用 Tab 還是空格來(lái)縮進(jìn)代碼?如果是代碼,用多少個(gè)?)

    一直遵守一系列規(guī)則,你會(huì)在編寫 CSS 的時(shí)候省去不少精神上的預(yù)負(fù)擔(dān),因?yàn)橐恍Q定已經(jīng)定型了。要知道代碼是寫給人看的,順帶著可以在機(jī)器上運(yùn)行。在這里給我們團(tuán)隊(duì)的開發(fā)規(guī)范打個(gè)廣告:微醫(yī)前端開發(fā)手冊(cè) 1.1(修訂中),歡迎大家提出意見(jiàn),共同進(jìn)步。

    3. 將 CSS 格式化成可讀的形式

    你可以看到很多 CSS 格式化的方式,一些開發(fā)者將所有的規(guī)則放在一行里面,像是這樣:

     
     
     
     
    1. .box { background-color: #567895; } 
    2. h2 { background-color: black; color: white; } 

    ??還有的開發(fā)者更喜歡將所有的東西放在新的一行,并且不同元素之間空行:

     
     
     
     
    1. .person-center { 
    2.   &-wrap { 
    3.         width: 100%; 
    4.   } 
    5.    
    6.   &-main { 
    7.         color: #FFF; 
    8.     font-size: 16px; 
    9.     font-weight: 500; 
    10.   } 

    ??CSS 不會(huì)管你使用哪種方式來(lái)進(jìn)行格式化,我的看法是在遵循代碼規(guī)范的前提下讓 CSS 代碼更加具有可讀性。保證了你自己還愿意下次看,才能保證其他開發(fā)者能夠看的下去你的代碼。

    4. 為你的 CSS 加上注釋

    代碼自解釋為前提,但是在某些定制需求時(shí)需要加上注釋,表明相關(guān)業(yè)務(wù)背景和其他信息。這樣做不僅可以幫任何未來(lái)的開發(fā)者處理你的 CSS 文件,也可以在你離開項(xiàng)目一段時(shí)間后,幫你在回來(lái)時(shí)重新上手。

     
     
     
     
    1. /* 這是一條 CSS 注釋, 
    2. 它可以分成好幾行。*/ 

    在你的樣式表里面的邏輯段落之間,加入一塊注釋,是個(gè)好技巧。在你快速掠過(guò)的時(shí)候,這些注釋可以幫你快速定位不同的段落,甚至給了你搜索或者跳轉(zhuǎn)到那段 CSS 的關(guān)鍵詞。如果你使用了一個(gè)不存在于代碼里面的字符串,你可以從段落到段落間跳轉(zhuǎn),只需要搜索一下,下面我們用的是||。

     
     
     
     
    1. /* || General styles */ 
    2.  
    3. ... 
    4.  
    5. /* || Typography */ 
    6.  
    7. ... 
    8.  
    9. /* || Header and Main Navigation */ 
    10.  
    11. ... 

    或許你是照著一個(gè)社區(qū)教程來(lái)做事的,CSS 有些不夠直觀。此時(shí),你應(yīng)該在注釋里面加入教程的 URL。你應(yīng)該在你一年或者更長(zhǎng)時(shí)間以后重新審視你的項(xiàng)目,但只是模模糊糊地想起來(lái)之前有個(gè)優(yōu)秀的教程,不知道它在哪里的時(shí)候,感謝之前加入注釋的自己。

    5. 在你的樣式表里面加上邏輯段落

    ??在樣式表里面先給一般的東西加上樣式是個(gè)好想法。這也就是除了你想特定對(duì)某個(gè)元素做點(diǎn)什么以外,所有將會(huì)廣泛生效的樣式。典型地,你可以為以下的元素設(shè)定規(guī)則:

    • body
    • p
    • h1, h2, h3, h4, h5
    • ul 和 ol
    • table 屬性
    • 鏈接

    在這段樣式表里面,我們提供了用于站點(diǎn)類型的默認(rèn)樣式,為數(shù)據(jù)表格、列表等設(shè)立了一份默認(rèn)的樣式。

     
     
     
     
    1. /* || GENERAL STYLES */ 
    2.  
    3. body { ... } 
    4.  
    5. h1, h2, h3, h4 { ... } 
    6.  
    7. ul { ... } 
    8.  
    9. blockquote { ... } 

    ??在這段之后,我們可以定義一些實(shí)用類,例如一個(gè)用來(lái)移除默認(rèn)列表樣式的類,我們打算將其展示為靈活樣式或者其他樣式。如果你知道你想要在許多不同的元素上應(yīng)用的東西,那么你可以把它們加到這里。

     
     
     
     
    1. /* || UTILITIES */ 
    2.  
    3. .nobullets { 
    4.   list-style: none; 
    5.   margin: 0; 
    6.   padding: 0; 
    7.  
    8. ... 

    然后我們可以加上在整個(gè)站點(diǎn)都會(huì)用到的所有東西,這可能是像基礎(chǔ)頁(yè)面布局、抬頭或者導(dǎo)航欄樣式之類的東西。

     
     
     
     
    1. /* || SITEWIDE */ 
    2.  
    3. .main-nav { ... } 
    4.  
    5. .logo { ... } 

    最后我們可以在 CSS 里面加上特指的東西,將它們分成上下文、頁(yè)面甚至它們使用的組件。

     
     
     
     
    1. /* || STORE PAGES */ 
    2.  
    3. .product-listing { ... } 
    4.  
    5. .product-box { ... } 

    通過(guò)使用這種方式排布代碼,我們至少能大致了解,我們能在樣式表的哪個(gè)部分尋找想要更改的東西。

    6. 避免太特定的選擇器

    如果你創(chuàng)建了很特定的選擇器,你經(jīng)常會(huì)發(fā)現(xiàn),你需要在你的 CSS 中復(fù)用一塊代碼,以將同樣的規(guī)則應(yīng)用到其他元素上。例如,你也許會(huì)有像是下面的選擇器那樣的代碼,它在帶有main類的

    里面的帶有box類的

    上應(yīng)用了規(guī)則。

      
     
     
     
    1. article.main p.box { 
    2.   border: 1px solid #ccc; 

    如果你之后想要在main外的什么地方上應(yīng)用相同的規(guī)則,或者在

    外的其他地方,你可能必須在這些規(guī)則中加入另一個(gè)選擇器,或者直接新建個(gè)規(guī)則?;蛘撸阋部梢越⒁粋€(gè)名為box的類,在任何地方應(yīng)用。

      
     
     
     
    1. .box { 
    2.   border: 1px solid #ccc; 

    將東西設(shè)置的更為特定,有時(shí)也有意義,但是這一般與其說(shuō)是通常實(shí)踐,倒不如說(shuō)是例外。

    7. 分割大樣式表為多個(gè)小樣式表

    這個(gè)技巧可以說(shuō)是我們已經(jīng)做到很好了。一般項(xiàng)目中都會(huì)有一個(gè) styles,里面存儲(chǔ)一些全局共用的樣式文件。根據(jù)這些文件的作用,一般又會(huì)被細(xì)分為reset.csss、variables.less等文件。搭配上預(yù)處理語(yǔ)言的 mixin 功能,我們就可以維護(hù)一份常用的樣式文件,避免在具體的頁(yè)面書寫冗雜的 CSS 代碼。

    這可以讓你更容易保持 CSS 的組織性,也意味著如果有多人在寫 CSS,你會(huì)更少遇到有兩個(gè)人需要同時(shí)編寫相同的樣式表的情況,防止在源代碼的控制上產(chǎn)生沖突。

    8.善用工具

    人區(qū)別于大猩猩的一處就是善于使用工具解決我們遇到的困難。身處于互聯(lián)網(wǎng)的浪潮中,我們更應(yīng)該擁抱那些有幫助的工具??。使用 stylelint + githook 來(lái)規(guī)范我們的 CSS 代碼,使用 Less/Sass 預(yù)處理語(yǔ)言讓 CSS 更加有“邏輯” 。它們解放了我們的大腦,也在潛移默化中培養(yǎng)我們的編碼規(guī)范。

    9. 學(xué)習(xí)與模仿

    沒(méi)有人是完美的,人的一個(gè)優(yōu)勢(shì)就是可以通過(guò)學(xué)習(xí)來(lái)提升自己。那么我們作為程序員,更需要與厲害的同行交流經(jīng)驗(yàn),學(xué)習(xí)別人好的編碼規(guī)范融入自己的日常開發(fā)中。每個(gè)人都是獨(dú)立的個(gè)體,每個(gè)人也都有著自己的想法,身處于這行,開放思想,用于承認(rèn)自己的不足,才是能夠永遠(yuǎn)進(jìn)步的源泉!!

    ??這包括了線下團(tuán)隊(duì)之間開展專題討論和線上參與社區(qū)討論等等措施,多與人溝通才能開拓我們的技術(shù)視野。

    五、寫代碼是與自己的對(duì)話

    原諒我在最后的小結(jié)起了一個(gè)很文藝的標(biāo)題。我最近在看一部蠻老的日劇:《龍櫻》,劇中男主阿部寬跟備考東大的幾個(gè)“笨蛋”說(shuō)考試是一場(chǎng)與自己的對(duì)話,也是一場(chǎng)與競(jìng)爭(zhēng)對(duì)手的對(duì)話。

    走上職場(chǎng)的我們,無(wú)論是初入職場(chǎng)的激情滿滿還是磨練了幾年后的波動(dòng)如山,限制著影響著我們的只有自己。但是信息繭房不僅封閉了我們對(duì)外界的認(rèn)知,更剝奪了我們對(duì)自己的認(rèn)知。

    將時(shí)間尺度拉到,拉到 1 年、3 年、5 年乃至 10 年。你寫的代碼作為時(shí)間的錨點(diǎn)一直存在于那里,這又不是一種另類的未來(lái)與現(xiàn)在的對(duì)話嗎?所以如何組織 CSS 呢?第一原則就是當(dāng)成與自己的對(duì)話,做到你不嫌棄自己。在這基礎(chǔ)上,掌握并找到適合自己的編碼原則,使用規(guī)范和工具來(lái)糾正監(jiān)督自己,剩下的就是實(shí)踐 => 修改 => 再實(shí)踐 => 再修改的無(wú)限循環(huán)。

    整潔的代碼是由整潔的人寫出來(lái)的,寫出可愛(ài)的代碼也一定是個(gè)可愛(ài)的人。我最開始寫代碼的理想的想通過(guò)虛擬世界來(lái)幫助我理解現(xiàn)實(shí)世界的復(fù)雜性。我們?cè)趯?fù)雜、錯(cuò)亂的 CSS 代碼進(jìn)化為整潔、邏輯關(guān)注點(diǎn)清晰的代碼。這一過(guò)程同時(shí)也是一場(chǎng)與自己的對(duì)話,問(wèn)自己喜歡什么,問(wèn)自己想要什么。在這種潛意識(shí)的一個(gè)個(gè)疑問(wèn)中,我們整理著內(nèi)心。

    我們?cè)?0 和 1 的世界里,思考著物理世界的喜怒哀樂(lè),希望朋友們能夠撇去浮燥世界帶來(lái)的浮沫,都能找到生活的真諦!畢竟努力工作只是手段,我們的目標(biāo)是未來(lái)的幸??鞓?lè)生活!諸君共勉!


    新聞標(biāo)題:我的CSS就是這么可愛(ài)——如何組織CSS
    網(wǎng)頁(yè)網(wǎng)址:http://m.5511xx.com/article/cddcohd.html