CSS模块化设计——从空格谈起

2016-02-19 23:20 10 1 收藏

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的CSS模块化设计——从空格谈起懂设计的网友们快点来了解吧!

【 tulaoshi.com - Web开发 】

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)引子:

今天在蓝点看了Yang的博客《CSS样式表中继承关系的空格与不空格》,思考了一下,本来想写《CSS样式的复合定义与复合调用及简单的模块化设计》,但是内容太大,还是来点简单的实惠。所以改叫《CSS样式从空格谈起》吧。

一、空格运算符

(1)CSS语言
    简单地说,CSS语言类似JS语言,是通过客户端下载后,通过本地浏览器解析。而CSS语言又是非常低级的弱类型语言,离JS这种基于对象的比较完善的弱类型语言,还差相当一段距离。要知道CSS样式是定义出来的,而样式的呈现是根据文档流顺序和CSS优先级别,浏览器自己识别计算后显示出来的。而浏览器又有忽略和纠错功能(尤以IE为甚),所以样式定义的语法有错误,并不影响浏览器正常工作,只不过显示不出应有的效果罢了。在我们设计定义样式的时候,排错是比较令人苦恼的,其本质原因是于这种弱类型CSS语言本身的不严禁性有关系的,所以我们就更应该注重CSS定义的严禁,才能出较少的错误,较快更好的完成工作。

(2)CSS的运算符

首先说,CSS语言的运算符就不多,有.#{}:";还有一个非常重要的空格。这几个运算符,都是常用的定义声明符号。而在CSS样式定义中,空格就有点特殊,我们可以把它视为在.Net或Java中命名空间或类包定义中的 . 运算符。换句话说,我们可以把空格视为路径指向的箭头,表明HTML标签的父子级别关系。CSS是与HTML想关联的,也就是说,CSS的每一个定义都与某个HTML标签或某段模块化HTML代码相对应,而HTML可以调用多个样式类。一个CSS样式类可以根据HTML代码来复合定义;一个HTML标签也可以复合调用多个样式类。所以说,CSS样式定义的复杂性与关联的HTML是密不可分。

(3)实例说明

style type="text/css"
td .b {
       color:#00ff00;
}
th.b {  
       color:#ff0000;
       font-family:黑体;
       font-size:20px;
}
.b {
       color:#0000ff;
       font-size:12px;
}
/style

table
       tr
              
              tddiv class="b"第一个类b的类路径是th .b/div/td
              th class="b"第二个类b的类路径是th.b/td
              td class="b"第三个类b的类路径是 .b/th
       /tr
/table
div class="b"第三个类b的类路径是 .b/div


讲解:

1、第一个类b的类路径是td .b,定义该HTML文档内所有的td标签内的带class="b"的标签的样式 。
也就是说,
td .b {
       color:#00ff00;
}
定义的是
tddiv class="b"text/div/td这组代码块中的b类,class="b"是包含在td标签内的,是td的子级,所以在这里要用空格指向明确表明父子级别关系。

2、第二个类b的类路径是th.b,定义的是该HTML文档内所有的带class="b"的th标签的样式。
也就是说,
th.b {  
       color: #FF0000
}
定义的是th class="b"text/td,在这里的代码中,th和class='b'是平级的,先th后.b组成一个同级类路径th.b,所以没有空格代表HTML类和自定义类具有同级路径!



3、第三个类b的类路径是 .b,定义该HTML文档内所有的td标签的样式,它是该文档的一个全局样式,是body .b的简写。
也就是说,
.b {
       color:#0000ff;
       font-size:12px;
}
定义了
td class="b"第三个类b的类路径是td.b/th

div class="b"第三个类b的类路径是 .b/div

这两处的b类没有明确的路径指向,优先级别要比有明确路径的低。

4、大家可以看到,在HTML代码中,同样都是class="b",但是在CSS定义时,采用的类路径不同,作用就不同了。类路径越完整,优先级越高。在具体应用的时候,我们可以,使用完整类路径来定义某HTML代码块某一些特殊地方,做异化处理。例如本例表头th的黑体字显示效果。

二、HTML中复合调用样式类
(1)在一个HTML标签内,可以复合调用多个样式类,也是用空格做运算符,复合类名总字符不能超过256。
(2)示例:
style type="text/css"
.myTxt {
       font-size:50px;       
       font-family:Arial Black;
}
.txtRed {
       color:red;
}
.txtOrange {
       colorrange;
}
.txtGreen {
       color:green;
}
.txtBlue {
       color:blue;
}
/style
ul
       li class="myTxt txtRed"123/li
       li class="myTxt txtOrange"Text/li
       li class="txtGreen"Text/li
       li class="myTxt txtBlue"Text/li
/ul
(3)应用:
对于某些多数样式属性累同,仅有几个不同样式属性的定义,可以用这个方法来缩写。
也可以在某个不改变某个通用样式类的同时,用HTML调用复合类,突出局部特例。

三、CSS+HTML的模块化设计

(1)举个简单例子:
.classNameA .classNameB .classNameC
就是一个类包路径,A包含B,B包含C.

意思就是,在A块内的全部HTML代码(包括B块、C块),先应用样式classNameA;
然后,在B块内的全部HTML代码(包括C块),先应用样式classNameA,之后再先应用样式classNameB;
最后,在C块内的全部HTML代码,先应用样式classNameA,再先应用样式classNameB,最后应用样式classNameB;

(2)在样式表中,关于类包的路径,对于某些复杂的HMTL代码,最后写绝对路径,就是每一个类名都不要拉下。这样可读性更强,错误率更小;当然,宽容度就越低。

例如
style type="text/css"
/*控制 li 的样式*/
.a1 ul li {
    color:red;
}

/*控制class="a"的div块内,全部连接 a 的样式*/
.a1 a {
    font-size:20px;
}

/*控制class="a"的div块内,一个一个为 class="mylink"的样式*/
.a1 .myLink {
       font-size:12px;
}

/*控制 li 内连接a的样式*/
.a1 ul li a {
       font-size:40px;
}

/*控制名 li 内,一个为 class="mylink"的连接的样式 */
.a1 ul li .myLink {
       font-size:60px;
       font-family:黑体;
}

/*b1样式*/
.b1 {
      color:blue;
}
/*控制 li 内 b1 的样式*/
.a1 ul li .b1 {
     color:green;
}
/style

div class="a1"
      a href="#"linkText/a
      a href="#" class="myLink"titleText/a
      div class="b1"b11111111/div
      ul
            li
                   a href="#"titleText/a
                   div class="b1"nameCN/div
            /li
            li
                   a href="#" class="myLink"titleText/a
                   div class="b1"nameCNspan class="c1"nameEN/span/div
            /li
            lititleText/li
            lititleText/li
            lititleText/li
      /ul
/div


样式,按*.HTML从内层到外层;按*.CSS上下文,从下文到上文;按内联样式表上下文,从下文到上文;按内嵌内联外联的优先级;
叠加覆盖计算最终显示效果。

CSS语句,严格说是JS代码的一类,换句话说,CSS语句也是弱类型的,空格是一个运算符,由于弱类型不严谨,所以,没有空格的时候,虽然不报错,也有显示效果,但那是按错误逻辑运算的,有时歪打正着,但确莫名其妙。再加上有很多满足各浏览器的HACK语法,CSS语句就更加零乱不堪。所以,写的时候,尽量在满足宽容度的情况下,严禁一些。

(3)给大家一个案例
模块化设计,要求相对封闭独立性、可重复性、可修改性、统一性等等是比较高的,当然,模块化越高越复杂的,修改起来也要月谨慎,因为牵一发而动全身,这就要求,在开发设计前期要做好详尽的策划,从目录结构、命名规范,到全局和特例的界限划分、后期修改的宽容度估计等等,都要有个把握。

下面就给一个我做的网站的地址:
1、样式表是按类路径来模块化定义的,有中文注释;
2、由于加了jsp程序,代码格式有变动,也许会有不少垃圾代码;
3、在FireFox下,有几处显示不当、JS未做相应优化,请用IE6+浏览;
4、感兴趣者可以当HTML和CSS来,做参考。

来源:http://www.tulaoshi.com/n/20160219/1629702.html

延伸阅读
标签: Web开发
自己对css框架,css模块这些感念一直比较模糊,完全跟风状态。最近在工作中遇到的问题,让自己不得不重视起这个问题。习惯了一个人搞定一切,策划-设计-出页面,当一个项目需要短时间多人协作完成时,样式文件的规划,css模块、框架的思想就先的尤其重要。 下面这个问题最近比较困扰:如果几个人同时 做一个网站前台,怎么样分配能让整站 风格...
标签: Web开发
首先,不管了不了解,鬼哥的这篇文章都可以看一下,从宜家的家具设计讲模块化http://www.webjx.com/css/divcss-10075.html 并不是多高深的东西,在工作中,应用div+css操作,你应该会逐步的去想,怎样提高效率,怎样兼容,怎样精炼代码,怎样让后期维护变的更加简单。你可能每过一段时间,都想把自己以前写的东西重构一下。这是很好的想法...
标签: Web开发
写在前面的话: 所有写程序的人都知道,当你逐渐对您要实现的功能展开的时候,很大的时候,第一天写的东西第二天就忘了写到那里了,很多的时候,不得不写上详细的程序开发笔记,这在ASP的系统开发中感觉尤其文件、函数复杂的时候,当我们打算对网站的一部分功能进行修改的时候,感觉无从下手或者感觉要修改的地方。这时候,如果您学过任...
标签: Web开发
很久之前就知道 宜家 ,以前在广州的时候也去过一次,给我的印象就是:大、贵、巧。地方很大,东西很贵,设计很巧。现在住的地方离宜家不远,这个月找时间去逛了下,地方还是那么大,东西还是那么贵,设计还是那么的巧。虽然没有买什么东西,不过也还是有所收获的,通过宜家的家具设计方法,我们可以聊聊模块化。 去过宜家的同学应该都有注...
标签: Web开发
所有写程序的人都知道,当你逐渐对您要实现的功能展开的时候,很大的时候,第一天写的东西第二天就忘了写到那里了,很多的时候,不得不写上详细的程序开发笔记,这在ASP的系统开发中感觉尤其文件、函数复杂的时候,当我们打算对网站的一部分功能进行修改的时候,感觉无从下手或者感觉要修改的地方。这时候,如果您学过任何一门面向对象的编程的...

经验教程

861

收藏

78
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部