2013年6月16日 星期日

哇靠!CSS 怎越寫越多 這叫工程師情何以堪 = =


可能礙於時間或種種其他原因
專案進行最常發生的就是
Code 越寫越多 ( 這不是廢話嗎 = = ) 
咳~ 咳~ 
其實我指的是越寫越爛 !!

這是為甚麼呢?我們來看看命案現場
首先在一個風和日麗的早上
工程打開了專案系統  
發現要完成一個新項目
努力趕工後終於完成了
之後便進行下個項目

但好景不長
主管在確認後決定在舊項目上再增加或修改新功能
就增加個差件  
因為覺得改動不大或已經將功能釋出
所以需要快速改完
因此你又回到舊的工作項目

但這時候發生了個問題
新的項目已經開始開發
網頁與 CSS 還沒 CHECK IN 進 SVN
你就從目前的版本繼續修改舊項目
亦或是新項目在目前 HTML 架構下根本不適合
只好用很多奇怪的方法或大量的 CSS 來完成功能

最後雖然完成了
但這些新程式半新不舊 
或 HTML 架構與 CSS 根本就是錯的
只是外表看起來對而已
ex: 最常見的就是換一個外部容器寬度就全錯亂

這下 CSS 檔充斥了許多垃圾

長久下來便無法維護
要修也不知道從何開始修
不如重寫來的快

=============== 我是 css structure 甘巴茶 分隔線 ===============


有鑑於此   

我一直覺得把樣式寫得漂亮不如撰寫一個可維護的 CSS 來的重要
相信各位 CSS 大神們也有自己一套作法
下面分享的是我在撰寫時的作法  希望可以提出來與大家討論
也不一定這就是最佳解因為
CSS 的寫法只有適不適合沒有正不正確

我將 CSS 依功能和順序分成以下四個部分

  1. Body 與 HTML 標籤的 Normalize
  2. 網站架構
  3. 共通樣式
  4. 其他樣式部分


但這是為甚麼這樣分呢?
CSS 撰寫說白了就是一個你蓋住我,我蓋住你的過程 
畢竟它不是程式  沒有 If Than Else
為了能夠方便維護
撰寫原則是上面樣式可以在下面被覆蓋 

也因此 撰寫順序選擇器使用 便極為重要
( 不懂的話可以看這篇 ABC 狗咬豬,CSS 也有 ABCD )

只要確定了大原則
之後便不容易多寫不必要的屬性 ( 這就是寫錯啦 >< )
因為樣式有問題通常都是 
為了某個模組寫了太多不該屬於它的屬性
導致後面又寫了一堆屬性來覆蓋的無限循環
=============== 我是以下是正題分隔線 ===============

除了一開始作 標籤的 Normalize 較單純外沒甚麼問題外
style.css 上半部皆為網站主體架構
它定義了架構的欄寬、位置、邊距等等屬性

再來是通用模組樣式
基本上每個模組都該是一個 區塊 ( 我稱作 box )
而這些 box 也該有共通的樣式

這就是一個通用模組
只要定好後就可以在各個頁面輕鬆使用
為了簡化工程師的開發
會有很多種通用模組可供調用 
( ex: grid, list ... etc )

然而架構訂好了、通用樣式也訂好了
但不可能每頁都長一樣吧
可能還會有一些只屬於特定頁面的樣式

像在首頁要多一個選單  樣式是怎樣怎樣....
可能在分類頁面要怎樣怎樣...
這些便寫在最後面的部分

這邊要提一下樣式命名原則
我覺得命名才是 CSS 最難的部分
因為到底該由樣式的功能或是目的來取名
會跟容不容易作樣式覆蓋有關
這種要有點黏又不能太黏 ( 這之中的醍醐味只能靠實作來感受了 )

主體架構比較沒有命名問題
通用模組一般習慣依照樣子來命名
例如圖中所示的 ex: box, grid, list ... 等等 ( 越短越好 命名就是一切從簡啊 !! )

grid 和 list 裡面還會有子項目 
這時會都用 item 作為樣式名稱 ( 為甚麼不換一個呢,因為再怎麼換都不夠用,乾脆一樣 )
也因此 item 就變成一個保留字  
這在之後開發需要注意不要衝名

而最後的 其他樣式部分 因為跟每個頁面的功能有關
因此定名時會利用功能來定
像是 tag, player ... etc 
之後要找比較簡單

這種將 CSS 依功能分開的寫法有幾個好處

  1. 較容易針對特定模組做調整,而不會影響到其他頁面的樣式
  2. 砍掉如果模組廢棄掉要砍掉較容易
  3. 開發上不容易因調整樣式時改動到其他頁面的樣式
  4. 如果未來有時間把之前寫的爛 CODE 修好,也比較好改樣式
  5. ...( 等你來發現囉 )

當然只按照這樣來寫是不夠的
之後會依照各個部份來講解細部的撰寫原則
怎樣的寫法能夠讓 CSS 有條不紊的開發
而不會造成維護的困擾
當然這是摸索出來的結果
可能不適合你或者有更好的想法也都歡迎提出討論

=============== 我是 CSS structure Successful Mission 分隔線 ===============


余致力於網頁撰寫沒幾年
其目的在求程式與樣式開發流程之流暢

積沒幾年之經驗
深知欲達到此目的
必須喚起眾工程及美工之能者賢人,共同奮鬥以上大噓

感謝大家看完這篇 哇靠文
作為工程及美工之間的橋接
兩方工作越來越深入  越覺撰寫困難
難的不是怎樣將樣式寫得漂亮
而是怎養把架構寫得漂亮

過去 CSS 的目的是希望統一與簡化樣式撰寫
但常常網站寫完了程式就拋棄了
但 CSS 不是寫來拋棄的

按照一定的規則和規範  能相容於各個系統
才是現代優秀的 CSS 撰寫方法
















沒有留言:

張貼留言