zoukankan      html  css  js  c++  java
  • css模块化(二)

    上一篇讲了几个概念,这次,我们讲讲实例,描述常见的一些设计模式。

    如果熟读了鬼哥的css模块化的内容,你就会发现,他的文章系列中的好几篇我们之前就已经讲过,所以就不赘述了。

    那么,我们为毛要进行模块化呢?肯定是有好处的,没好处,追求它干啥?

    在研究这个问题之前,我们先看问题,思考问题,然后解决问题。

    如下图:

     

    像这样的设计,你该怎么办?

    我们尽可能给出所有的正经的css+html设计方案。

    方案一:基类和原子类(面向属性)的拼接

    html:

    <div id="wrapper">
        <div class="module w240">
            <header>
                <h1>标题标题</h1>
            </header>
            <div class="bd bg54BAF3">
                <p>xxx各种描述</p>
                <p>xxx各种描述</p>
                <p>xxx各种描述</p>
                <p>xxx各种描述</p>
                <p>xxx各种描述</p>
            </div>
        </div>
        <div class="module w440">
            <header>
                <h1>标题标题</h1>
            </header>
            <div class="bd bg9C0">
                <p>xxx各种描述</p>
            </div>
        </div>
        <div class="module w240">
            <header>
                <h1>标题标题</h1>
            </header>
            <div class="bd bgF27B2E">
                <p>xxx各种描述</p>
            </div>
        </div>
        <div class="module w440">
            <header>
                <h1>标题标题</h1>
            </header>
            <div class="bd bgb8efe1">
                <p>xxx各种描述</p>
            </div>
        </div>
    </div>

    css:

    * { margin:0; padding:0; }
    #wrapper { margin:20px auto; width:724px; overflow:hidden; zoom:1; }
    /*这尼玛就是原子类啊*/
    .w240 { width:240px; }
    .w440 { width:440px; }
    .bg54BAF3 { background:#54BAF3;}
    .bg9C0 { background:#9C0; }
    .bgF27B2E { background:#F27B2E; }
    .bgb8efe1 { background:#b8efe1; }
    /*基类*/
    .module { float:left; margin:0 20px 20px 0;   }
    .module header { height:30px; line-height:30px;color:#333; font-size:14px; }
    .module header h1 { font-size:14px; text-indent:10px; background:rgba(238,238,238,0.7); border:1px solid #ddd; border-radius:4px 4px 0 0; }
    .module .bd { height:200px; padding:10px; border-radius:0 0 4px 4px; color:#fff;  }
    .module .bd p { }

    在线demo:http://jsfiddle.net/xmlovecss/EbuqG/

    方案二:就是四个模块,同一样式属性,在css中进行合并

     html:

    <div id="wrapper">
      <div class="module1">
        <header>
           <h1>标题标题</h1>
    
        </header>
        <div class="bd">
          <p>xxx各种描述</p>
          <p>xxx各种描述</p>
          <p>xxx各种描述</p>
          <p>xxx各种描述</p>
          <p>xxx各种描述</p>
        </div>
      </div>
      <div class="module2">
        <header>
           <h1>标题标题</h1>
    
        </header>
        <div class="bd">
          <p>xxx各种描述</p>
        </div>
      </div>
      <div class="module3">
        <header>
           <h1>标题标题</h1>
    
        </header>
        <div class="bd">
          <p>xxx各种描述</p>
        </div>
      </div>
      <div class="module4">
        <header>
           <h1>标题标题</h1>
    
        </header>
        <div class="bd">
          <p>xxx各种描述</p>
        </div>
      </div>
    </div>

    css:

    * { margin:0; padding:0; }
    #wrapper { margin:20px auto; width:724px; overflow:hidden; zoom:1; }
    /*公用样式*/
    .module1, .module2, .module3, .module4 { float:left; margin:0 20px 20px 0; }
    .module1 header,.module2 header,.module3 header,.module4 header { height:30px; line-height:30px;color:#333; font-size:14px; }
    .module1 header h1,.module2 header h1,.module3 header h1,.module4 header h1 { font-size:14px; text-indent:10px; background:rgba(238,238,238,0.7); border:1px solid #ddd; border-radius:4px 4px 0 0; }
    .module1 .bd,.module2 .bd,.module3 .bd,.module4 .bd { height:200px; padding:10px; border-radius:0 0 4px 4px; color:#fff;  }
    .module1 .bd p,.module2 .bd p,.module3 .bd p,.module4 .bd p { }
    /*私有样式*/
    .module1,.module3 { width:240px; }
    .module2,.module4 { width:440px; }
    .module1 .bd { background:#54BAF3; }
    .module2 .bd { background:#9C0; }
    .module3 .bd { background:#F27B2E; }
    .module4 .bd { background:#b8efe1; }

    在线demo:http://jsfiddle.net/xmlovecss/Pd6GX/

    方案三:基类和扩展类(面向对象命名)

    html:

    <div id="wrapper">
        <div class="module extend_mod1">
            <header>
                <h1>标题标题</h1>
            </header>
            <div class="bd">
                <p>xxx各种描述</p>
                <p>xxx各种描述</p>
                <p>xxx各种描述</p>
                <p>xxx各种描述</p>
                <p>xxx各种描述</p>
            </div>
        </div>
        <div class="module extend_mod2">
            <header>
                <h1>标题标题</h1>
            </header>
            <div class="bd">
                <p>xxx各种描述</p>
            </div>
        </div>
        <div class="module extend_mod3">
            <header>
                <h1>标题标题</h1>
            </header>
            <div class="bd">
                <p>xxx各种描述</p>
            </div>
        </div>
        <div class="module extend_mod4">
            <header>
                <h1>标题标题</h1>
            </header>
            <div class="bd">
                <p>xxx各种描述</p>
            </div>
        </div>
    </div>

    css:

    * { margin:0; padding:0; }
    #wrapper { margin:20px auto; width:724px; overflow:hidden; zoom:1; }
    /*基类*/
    .module { float:left; margin:0 20px 20px 0;   }
    .module header { height:30px; line-height:30px;color:#333; font-size:14px; }
    .module header h1 { font-size:14px; text-indent:10px; background:rgba(238,238,238,0.7); border:1px solid #ddd; border-radius:4px 4px 0 0; }
    .module .bd { height:200px; padding:10px; border-radius:0 0 4px 4px; color:#fff;  }
    .module .bd p { }
    /*扩展类*/
    .extend_mod1,.extend_mod3 { width:240px; }
    .extend_mod2,.extend_mod4 { width:440px; }
    .extend_mod1 .bd { background:#54BAF3; }
    .extend_mod2 .bd { background:#9C0; }
    .extend_mod3 .bd { background:#F27B2E; }
    .extend_mod4 .bd { background:#b8efe1; }

    当然,这个示例中,也有人会把结构中的扩展类改成id来做区分。

    在线demo:http://jsfiddle.net/xmlovecss/YZFPV/

    在分析上面的实例时,有一点必须说明,我给出的三种方案里,都是扩展,没有重写。如果要涉及到重写,第一种方案就最糟糕了,样式权重会成为一个灾难。

    我们分析一下上面三种方案的可行性:

    • 第一种:如果整个项目中就出现一次这样的界面,并且忽略语义化,那无可厚非,还可以。改动起来不是很费事儿。如果还要增加其它的个性属性(样式),那么得制造多少原子类啊!

      如果不止一次地出现这样的界面,次数越多,你想想,pd驱动设计改界面,到时候,面向属性的原子类命名,不止一个页面的html修改,哭去吧,骚年。

    • 第二种:尽管有人会觉得,第二种方案好像比较傻逼。事实上,第二种方案也是比较聪明的方案,可扩展性强,维护代价低,语义好。尽管折腾吧,毫无惧色。

    •  第三种:第三种方案的出现,其实是为了规避第一种方案的命名不语义化,规避第二种的重复属性声明。好处不言自明,不拿id做区分的话,样式声明需要有先后的顺序,共性module样式声明在前,个性样式extend_module声明在后。

    好了,分析完啦。这只是一个简单的示例,没有使用覆盖,而用的都是扩展,不会造成重绘的问题,因而提高了页面渲染效率。

    给个小练习吧:

     

    再来个复杂点的:

  • 相关阅读:
    P2730 魔板 Magic Squares
    P2124 奶牛美容
    4. Median of Two Sorted Arrays(Array; Divide-and-Conquer)
    3.Longest Substring Without Repeating Characters(string; HashTable)
    2.Add Two Numbers (List)
    1.Two Sum (Array; HashTable)
    C++中的浅拷贝、深拷贝、智能指针
    C++ 静态数据成员和静态成员函数
    C & C++ 宏与const
    C++指针与引用
  • 原文地址:https://www.cnblogs.com/my_front_research/p/2863894.html
Copyright © 2011-2022 走看看