• CSS模块化编码 让开发事半功倍


    原生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{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{10px}  
    36. .w20{20px}  
    37. .w30{30px}  
    38. .w40{40px}  
    39. .w50{50px}  
    40. .w60{60px}  
    41. .w70{70px}  
    42. .w80{80px}  
    43. .w90{90px}  
    44. .w100{100px}  
    45. .w200{200px}  
    46. .w250{250px}  
    47. .w300{300px}  
    48. .w400{400px}  
    49. .w500{500px}  
    50. .w600{600px}  
    51. .w700{700px}  
    52. .w800{800px}  
    53. .w{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{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{10px}  
    36. .w20{20px}  
    37. .w30{30px}  
    38. .w40{40px}  
    39. .w50{50px}  
    40. .w60{60px}  
    41. .w70{70px}  
    42. .w80{80px}  
    43. .w90{90px}  
    44. .w100{100px}  
    45. .w200{200px}  
    46. .w250{250px}  
    47. .w300{300px}  
    48. .w400{400px}  
    49. .w500{500px}  
    50. .w600{600px}  
    51. .w700{700px}  
    52. .w800{800px}  
    53. .w{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

  • 相关阅读:
    增加网站内容步骤
    简单使用
    dedecms的讲解 要求
    shop34-3-自动加载实现
    shop34-2-运转-平台分发
    shop34-1-目录布局
    match_controller
    match_model
    match_mvc
    laravel 路由
  • 原文地址:https://www.cnblogs.com/ypeih/p/3327317.html
Copyright © 2020-2023  润新知