CSS模塊化編碼 讓開發事半功倍

原生Js因jQuery的"write less,do more"變得極簡, Html因語義化編碼變得簡明, 那麼, 有沒有一種方式讓Css也更加的高效精緻呢? 固然有, 那即是模塊化編碼.css

Css的模塊化,咱們能夠理解成(抑或自己就是)OOP思想, 重用性、靈活性、可擴展性即是它終極的目標, "類"即是它的核心, OOP的多用組合少用繼承同樣是它的基本原則. Css模塊化是一個新穎高效的Css編碼方式, 如有接觸過YUI Css的朋友確定對這種方式有所瞭解.html

 如何Css模塊化, 我想這纔是你們真正關心的. 我所理解的Css模塊化, 應該從兩大塊去區分:前端

第一大塊, 從整站全局模塊化. 這一點你們並不陌生, 時經常使用到的reset css即是模塊化的一部分, 全局通用的字體樣式, 連接樣式, 以及通用頭部底部及主體容器等等這些咱們已經熟知, 另外諸如定義文字排版(如.f12{font-size:12px})、定位(如.tl{text-align:left})、長度高度(如.w10{width:10px})、邊距(如.m10{margin:10px})等頁面中會經常使用到的樣式,這一類,咱們稱之爲Css通用原子類(哈,與類扯上關係了,那就權當成類吧).通用原子類有兩個特色: 通用性和原子性, 任何頁面均可以隨意使用它們, 且他們只表現最基礎的樣式, 一個通用原子類只設置一個樣式,不可再分. 關於整站全局模塊化再也不詳述, 本文後面我會貼出阿當的《Web前端開發修煉之道》一書中經常使用通用原子類樣式.web

第二大塊, 是從視覺效果上模塊化, 在視覺上樣式和功能相對獨立穩定的部分便可視爲模塊. 拆分這些模塊, 應該儘可能遵循一個原則: 模塊與模塊之間儘可能不要包含相同的部分, 如有相同部分就再拆出來獨立成一個模塊. 下圖是我畫的一個簡易的頁面視覺圖:編程

模塊化編碼

看到上圖, 菜鳥的Css編碼通常是爲1~4定義四個類名,爲他們寫各自的樣式; 明智一點的寫法是爲1~4定義四個類名, 用.a .b .c .d{...}方式定義共一樣式, 而後再爲各自定義不一樣部分的樣式; 可是, 還有一種完美的方式, 那即是模塊化. 下面我就以上圖爲例作個簡單的模塊化分析. 第一步, 分析整個視覺共用部分. 能夠看出,1~4中,標題背景,標題文字,內容文字這三個部分的樣式都是相同的, 因此, 咱們能夠爲這個四個區塊定義一個類名, 將共同的樣式寫給這個類名:網絡

  1. ...  
  2. <div class="box"> 
  3.     <h2>倒黴松鼠再出山h2> 
  4.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  5. div> 
  6. <div class="box"> 
  7.     <h2>倒黴松鼠再出山h2> 
  8.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  9. div> 
  10. <DIV class=box> 
  11.     <h2>倒黴松鼠再出山h2> 
  12.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  13. div> 
  14. <div class="box"> 
  15.     <h2>倒黴松鼠再出山h2> 
  16.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  17. div> 
  18. ...  
  19. DIV> 

第二步, 分析出不一樣部分, 並權衡高效使用. 能夠看出, 不一樣部分, 主要是內容背景色和區塊寬度兩部分. 先說背景色, 背景色有三種, 淡黃(1個), 白色(2個), 灰色(1個), 聽從"模塊與模塊之間儘可能不要包含相同的部分, 如有相同部分就再拆出來獨立成一個模塊"的原則, 咱們要把2個白底的樣式提出來, 另兩個單獨定義, 而根據Css優先原則, 咱們能夠把白底默認定義到第一步中的box樣式中, 另兩種背景色可作重定義處理. 再來看看寬度與定位, 2,4寬度等同且都右浮動, 因此, 咱們能夠把這部分提出來模塊化, 而浮動通常能夠直接調用通用原子類, 因此, 咱們僅僅須要定義一個寬度樣式中(若這個寬度在通用原子類中也有就更好了). 如此以來, Html能夠這樣寫:less

  1. ...  
  2. <div class="box bg_y"> 
  3.     <h2>倒黴松鼠再出山h2> 
  4.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  5. div> 
  6. <div class="box fr right_w"> 
  7.     <h2>倒黴松鼠再出山h2> 
  8.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  9. div> 
  10. <div class="box"> 
  11.     <h2>倒黴松鼠再出山h2> 
  12.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  13. div> 
  14. <div class="box fr right_w bg_g"> 
  15.     <h2>倒黴松鼠再出山h2> 
  16.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  17. div> 
  18. ... 

或許, 這樣的結構對Html頁面來講, 會顯的有些臃腫, 但Css文件由於重用性的提升而大大的減少了. Css模塊化是一個比較實用但也須要去領悟的思想, 實際使用中也須要全面的分析, 過多的模塊也會致使維護性的下降, 如同OOP編程同樣, 咱們也要考慮"公有屬性"與"私有屬性". 本文經過一個簡單的例子解析了Css模塊化的基本思想, 更多關於Css模塊化的知識, 能夠看YUI Css或者其餘網絡上的資源. do write, less more...Css也能夠作到. 附: 阿當《Web前端開發修煉之道》一書中分享的通用原子類:模塊化

  1. /*文字排版*/  
  2. .f12{font-size:12px}  
  3. .f13{font-size:13px}  
  4. .f14{font-size:14px}  
  5. .f16{font-size:16px}  
  6. .f20{font-size:20px}  
  7. .fb{font-weight:bold}  
  8. .fn{font-weight:normal}  
  9. .t2{text-indent:2em}  
  10. .lh150{line-height:150%}  
  11. .lh180{line-height:180%}  
  12. .lh200{line-height:200%}  
  13. .unl{text-decoration:underline;}  
  14. .no_unl{text-decoration:none;}  
  15. /*定位*/  
  16. .tl{text-align:left}  
  17. .tc{text-align:center}  
  18. .tr{text-align:right}  
  19. .bc{margin-left:auto;margin-right:auto;}  
  20. .fl{float:left;display:inline}  
  21. .fr{float:right;display:inline}  
  22. .cb{clear:both}  
  23. .cl{clear:left}  
  24. .cr{clear:right}  
  25. .clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}  
  26. .clearfix{display:inline-block}* html .clearfix{height:1%}.clearfix{display:block}  
  27. .vm{vertical-align:middle}  
  28. .pr{position:relative}  
  29. .pa{position:absolute}  
  30. .abs-right{position:absolute;right:0}  
  31. .zoom{zoom:1}  
  32. .hidden{visibility:hidden}  
  33. .none{display:none}  
  34. /*長度高度*/  
  35. .w10{width:10px}  
  36. .w20{width:20px}  
  37. .w30{width:30px}  
  38. .w40{width:40px}  
  39. .w50{width:50px}  
  40. .w60{width:60px}  
  41. .w70{width:70px}  
  42. .w80{width:80px}  
  43. .w90{width:90px}  
  44. .w100{width:100px}  
  45. .w200{width:200px}  
  46. .w250{width:250px}  
  47. .w300{width:300px}  
  48. .w400{width:400px}  
  49. .w500{width:500px}  
  50. .w600{width:600px}  
  51. .w700{width:700px}  
  52. .w800{width:800px}  
  53. .w{width:100%}  
  54. .h50{height:50px}  
  55. .h80{height:80px}  
  56. .h100{height:100px}  
  57. .h200{height:200px}  
  58. .h{height:100%}  
  59. /*邊距*/  
  60. .m10{margin:10px}  
  61. .m15{margin:15px}  
  62. .m30{margin:30px}  
  63. .mt5{margin-top:5px}  
  64. .mt10{margin-top:10px}  
  65. .mt15{margin-top:15px}  
  66. .mt20{margin-top:20px}  
  67. .mt30{margin-top:30px}  
  68. .mt50{margin-top:50px}  
  69. .mt100{margin-top:100px}  
  70. .mb10{margin-bottom:10px}  
  71. .mb15{margin-bottom:15px}  
  72. .mb20{margin-bottom:20px}  
  73. .mb30{margin-bottom:30px}  
  74. .mb50{margin-bottom:50px}  
  75. .mb100{margin-bottom:100px}  
  76. .ml5{margin-left:5px}  
  77. .ml10{margin-left:10px}  
  78. .ml15{margin-left:15px}  
  79. .ml20{margin-left:20px}  
  80. .ml30{margin-left:30px}  
  81. .ml50{margin-left:50px}  
  82. .ml100{margin-left:100px}  
  83. .mr5{margin-right:5px}  
  84. .mr10{margin-right:10px}  
  85. .mr15{margin-right:15px}  
  86. .mr20{margin-right:20px}  
  87. .mr30{margin-right:30px}  
  88. .mr50{margin-right:50px}  
  89. .mr100{margin-right:100px}  
  90. .p10{padding:10px;}  
  91. .p15{padding:15px;}  
  92. .p30{padding:30px;}  
  93. .pt5{padding-top:5px}  
  94. .pt10{padding-top:10px}  
  95. .pt15{padding-top:15px}  
  96. .pt20{padding-top:20px}  
  97. .pt30{padding-top:30px}  
  98. .pt50{padding-top:50px}  
  99. .pb5{padding-bottom:5px}  
  100. .pb10{padding-bottom:10px}  
  101. .pb15{padding-bottom:15px}  
  102. .pb20{padding-bottom:20px}  
  103. .pb30{padding-bottom:30px}  
  104. .pb50{padding-bottom:50px}  
  105. .pb100{padding-bottom:100px}  
  106. .pl5{padding-left:5px}  
  107. .pl10{padding-left:10px}  
  108. .pl15{padding-left:15px}  
  109. .pl20{padding-left:20px}  
  110. .pl30{padding-left:30px}  
  111. .pl50{padding-left:50px}  
  112. .pl100{padding-left:100px}  
  113. .pr5{padding-right:5px}  
  114. .pr10{padding-right:10px}  
  115. .pr15{padding-right:15px}  
  116. .pr20{padding-right:20px}  
  117. .pr30{padding-right:30px}  
  118. .pr50{padding-right:50px}  
  119. .pr100{padding-right:100px} 

 

轉自:字體

原生Js因jQuery的"write less,do more"變得極簡, Html因語義化編碼變得簡明, 那麼, 有沒有一種方式讓Css也更加的高效精緻呢? 固然有, 那即是模塊化編碼.動畫

 

Css的模塊化,咱們能夠理解成(抑或自己就是)OOP思想, 重用性、靈活性、可擴展性即是它終極的目標, "類"即是它的核心, OOP的多用組合少用繼承同樣是它的基本原則. Css模塊化是一個新穎高效的Css編碼方式, 如有接觸過YUI Css的朋友確定對這種方式有所瞭解.

 

 如何Css模塊化, 我想這纔是你們真正關心的. 我所理解的Css模塊化, 應該從兩大塊去區分:

 

第一大塊, 從整站全局模塊化. 這一點你們並不陌生, 時經常使用到的reset css即是模塊化的一部分, 全局通用的字體樣式, 連接樣式, 以及通用頭部底部及主體容器等等這些咱們已經熟知, 另外諸如定義文字排版(如.f12{font-size:12px})、定位(如.tl{text-align:left})、長度高度(如.w10{width:10px})、邊距(如.m10{margin:10px})等頁面中會經常使用到的樣式,這一類,咱們稱之爲Css通用原子類(哈,與類扯上關係了,那就權當成類吧).通用原子類有兩個特色: 通用性和原子性, 任何頁面均可以隨意使用它們, 且他們只表現最基礎的樣式, 一個通用原子類只設置一個樣式,不可再分. 關於整站全局模塊化再也不詳述, 本文後面我會貼出阿當的《Web前端開發修煉之道》一書中經常使用通用原子類樣式.

 

第二大塊, 是從視覺效果上模塊化, 在視覺上樣式和功能相對獨立穩定的部分便可視爲模塊. 拆分這些模塊, 應該儘可能遵循一個原則: 模塊與模塊之間儘可能不要包含相同的部分, 如有相同部分就再拆出來獨立成一個模塊. 下圖是我畫的一個簡易的頁面視覺圖:

 

模塊化編碼

 

看到上圖, 菜鳥的Css編碼通常是爲1~4定義四個類名,爲他們寫各自的樣式; 明智一點的寫法是爲1~4定義四個類名, 用.a .b .c .d{...}方式定義共一樣式, 而後再爲各自定義不一樣部分的樣式; 可是, 還有一種完美的方式, 那即是模塊化. 下面我就以上圖爲例作個簡單的模塊化分析. 第一步, 分析整個視覺共用部分. 能夠看出,1~4中,標題背景,標題文字,內容文字這三個部分的樣式都是相同的, 因此, 咱們能夠爲這個四個區塊定義一個類名, 將共同的樣式寫給這個類名:

 

  1. ...  
  2. <div class="box"> 
  3.     <h2>倒黴松鼠再出山h2> 
  4.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  5. div> 
  6. <div class="box"> 
  7.     <h2>倒黴松鼠再出山h2> 
  8.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  9. div> 
  10. <DIV class=box> 
  11.     <h2>倒黴松鼠再出山h2> 
  12.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  13. div> 
  14. <div class="box"> 
  15.     <h2>倒黴松鼠再出山h2> 
  16.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  17. div> 
  18. ...  
  19. DIV> 

 

第二步, 分析出不一樣部分, 並權衡高效使用. 能夠看出, 不一樣部分, 主要是內容背景色和區塊寬度兩部分. 先說背景色, 背景色有三種, 淡黃(1個), 白色(2個), 灰色(1個), 聽從"模塊與模塊之間儘可能不要包含相同的部分, 如有相同部分就再拆出來獨立成一個模塊"的原則, 咱們要把2個白底的樣式提出來, 另兩個單獨定義, 而根據Css優先原則, 咱們能夠把白底默認定義到第一步中的box樣式中, 另兩種背景色可作重定義處理. 再來看看寬度與定位, 2,4寬度等同且都右浮動, 因此, 咱們能夠把這部分提出來模塊化, 而浮動通常能夠直接調用通用原子類, 因此, 咱們僅僅須要定義一個寬度樣式中(若這個寬度在通用原子類中也有就更好了). 如此以來, Html能夠這樣寫:

 

  1. ...  
  2. <div class="box bg_y"> 
  3.     <h2>倒黴松鼠再出山h2> 
  4.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  5. div> 
  6. <div class="box fr right_w"> 
  7.     <h2>倒黴松鼠再出山h2> 
  8.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  9. div> 
  10. <div class="box"> 
  11.     <h2>倒黴松鼠再出山h2> 
  12.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  13. div> 
  14. <div class="box fr right_w bg_g"> 
  15.     <h2>倒黴松鼠再出山h2> 
  16.     <p>20世紀福克斯將爲賣座動畫片《冰河世紀》(Ice Age內地譯作《冰川時代》)再次開拍續集...p> 
  17. div> 
  18. ... 

 

或許, 這樣的結構對Html頁面來講, 會顯的有些臃腫, 但Css文件由於重用性的提升而大大的減少了. Css模塊化是一個比較實用但也須要去領悟的思想, 實際使用中也須要全面的分析, 過多的模塊也會致使維護性的下降, 如同OOP編程同樣, 咱們也要考慮"公有屬性"與"私有屬性". 本文經過一個簡單的例子解析了Css模塊化的基本思想, 更多關於Css模塊化的知識, 能夠看YUI Css或者其餘網絡上的資源. do write, less more...Css也能夠作到. 附: 阿當《Web前端開發修煉之道》一書中分享的通用原子類:

 

  1. /*文字排版*/  
  2. .f12{font-size:12px}  
  3. .f13{font-size:13px}  
  4. .f14{font-size:14px}  
  5. .f16{font-size:16px}  
  6. .f20{font-size:20px}  
  7. .fb{font-weight:bold}  
  8. .fn{font-weight:normal}  
  9. .t2{text-indent:2em}  
  10. .lh150{line-height:150%}  
  11. .lh180{line-height:180%}  
  12. .lh200{line-height:200%}  
  13. .unl{text-decoration:underline;}  
  14. .no_unl{text-decoration:none;}  
  15. /*定位*/  
  16. .tl{text-align:left}  
  17. .tc{text-align:center}  
  18. .tr{text-align:right}  
  19. .bc{margin-left:auto;margin-right:auto;}  
  20. .fl{float:left;display:inline}  
  21. .fr{float:right;display:inline}  
  22. .cb{clear:both}  
  23. .cl{clear:left}  
  24. .cr{clear:right}  
  25. .clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}  
  26. .clearfix{display:inline-block}* html .clearfix{height:1%}.clearfix{display:block}  
  27. .vm{vertical-align:middle}  
  28. .pr{position:relative}  
  29. .pa{position:absolute}  
  30. .abs-right{position:absolute;right:0}  
  31. .zoom{zoom:1}  
  32. .hidden{visibility:hidden}  
  33. .none{display:none}  
  34. /*長度高度*/  
  35. .w10{width:10px}  
  36. .w20{width:20px}  
  37. .w30{width:30px}  
  38. .w40{width:40px}  
  39. .w50{width:50px}  
  40. .w60{width:60px}  
  41. .w70{width:70px}  
  42. .w80{width:80px}  
  43. .w90{width:90px}  
  44. .w100{width:100px}  
  45. .w200{width:200px}  
  46. .w250{width:250px}  
  47. .w300{width:300px}  
  48. .w400{width:400px}  
  49. .w500{width:500px}  
  50. .w600{width:600px}  
  51. .w700{width:700px}  
  52. .w800{width:800px}  
  53. .w{width:100%}  
  54. .h50{height:50px}  
  55. .h80{height:80px}  
  56. .h100{height:100px}  
  57. .h200{height:200px}  
  58. .h{height:100%}  
  59. /*邊距*/  
  60. .m10{margin:10px}  
  61. .m15{margin:15px}  
  62. .m30{margin:30px}  
  63. .mt5{margin-top:5px}  
  64. .mt10{margin-top:10px}  
  65. .mt15{margin-top:15px}  
  66. .mt20{margin-top:20px}  
  67. .mt30{margin-top:30px}  
  68. .mt50{margin-top:50px}  
  69. .mt100{margin-top:100px}  
  70. .mb10{margin-bottom:10px}  
  71. .mb15{margin-bottom:15px}  
  72. .mb20{margin-bottom:20px}  
  73. .mb30{margin-bottom:30px}  
  74. .mb50{margin-bottom:50px}  
  75. .mb100{margin-bottom:100px}  
  76. .ml5{margin-left:5px}  
  77. .ml10{margin-left:10px}  
  78. .ml15{margin-left:15px}  
  79. .ml20{margin-left:20px}  
  80. .ml30{margin-left:30px}  
  81. .ml50{margin-left:50px}  
  82. .ml100{margin-left:100px}  
  83. .mr5{margin-right:5px}  
  84. .mr10{margin-right:10px}  
  85. .mr15{margin-right:15px}  
  86. .mr20{margin-right:20px}  
  87. .mr30{margin-right:30px}  
  88. .mr50{margin-right:50px}  
  89. .mr100{margin-right:100px}  
  90. .p10{padding:10px;}  
  91. .p15{padding:15px;}  
  92. .p30{padding:30px;}  
  93. .pt5{padding-top:5px}  
  94. .pt10{padding-top:10px}  
  95. .pt15{padding-top:15px}  
  96. .pt20{padding-top:20px}  
  97. .pt30{padding-top:30px}  
  98. .pt50{padding-top:50px}  
  99. .pb5{padding-bottom:5px}  
  100. .pb10{padding-bottom:10px}  
  101. .pb15{padding-bottom:15px}  
  102. .pb20{padding-bottom:20px}  
  103. .pb30{padding-bottom:30px}  
  104. .pb50{padding-bottom:50px}  
  105. .pb100{padding-bottom:100px}  
  106. .pl5{padding-left:5px}  
  107. .pl10{padding-left:10px}  
  108. .pl15{padding-left:15px}  
  109. .pl20{padding-left:20px}  
  110. .pl30{padding-left:30px}  
  111. .pl50{padding-left:50px}  
  112. .pl100{padding-left:100px}  
  113. .pr5{padding-right:5px}  
  114. .pr10{padding-right:10px}  
  115. .pr15{padding-right:15px}  
  116. .pr20{padding-right:20px}  
  117. .pr30{padding-right:30px}  
  118. .pr50{padding-right:50px}  
  119. .pr100{padding-right:100px} 

轉自:http://developer.51cto.com/art/201101/242690.htm

相關文章
相關標籤/搜索