CSS规则层叠的应用 css必须要注意的几点

理论基础是必要的,实践是提升和理解理论的方法,两者同样重要,任何设计和开发人员离开这两者的平衡,不论偏向哪一方,都会范或左或右的错误。不过我所讲的这个方法在实际应用中到底有什么用呢。显然,它不能够给我们创造出圆角矩形,也不能够给我们创造出分列布局,更加不可能给我们一个固定在文档头部的导航栏。这个算法的实践应用在于: 良好的CSS编程规范 。这是一个宏观的实践,与我刚才提到的微观实践同样重要,但却更加难以掌握。

本文并不想包含所有的良好的CSS编程规范,也不可能,我所能够提供的也只是我个人编写CSS的规范小结,我想这些规范是尽可能靠近CSS的运作本质的。

不要使用inline CSS 
user style不在你的掌控之内 
不要使用important规则 
按照特殊性从低到高编写CSS 
前三条不是我说的重点,我将一笔带过。

inline CSS的特殊性是最高的,如果你CSS文件中的属性与inline CSS冲突,那么你CSS文件中的属性无效,这和我们仅在CSS文件中对样式进行debug的习惯不符。inline CSS也是丑陋的,它将样式插入HTML文档,所以应当放弃使用inline CSS。

如果用户将user style设置为important,那么不论怎么写CSS规则,总是不能覆盖用户的important语句,所以试图覆盖所有的user style是徒劳的。高兴的是我们不需要考虑这些了。

important规则是个异类,它不符合我们惯有的思维方式,不论我们如何增加CSS规则的特殊性和先后顺序,important规则都将覆盖与它竞争的规则,这也会打乱CSS规则的习惯规律,给debug带来麻烦。如果你要 使用important规则来hack浏览器 ,那么你应当在一个指向唯一元素的selector中应用该规则。(PS. hack应当是解决方法中最后考虑的一项,因为它长得太丑陋了。)

最后一点,如何做到按照特殊性从低到高编写CSS?

关键在于 模块化CSS 。

添加全局CSS 
添加当前页面统一CSS 
将页面分成几个模块 
在每个不同模块上使用id挂钩,相同模块上使用class挂钩 
添加每个模块的统一CSS 
将每个模块分成几个子模块,并且回到第4步开始循环直至样式添加完成。 
编写良好的CSS是一个设计问题,而不是一个实现问题。我们首先应当将编写特殊性非常低的全局CSS内容,也就是我们 常用的reset.css 。它是我们整个网站中所有页面的默认样式。

如果有哪个页面具有独特的统一样式,如某一页的背景与其他页面不同,那么我们可以给某一页面添加ID,然后在ID下编写当前页面的统一CSS。

body#special{
    background-color:black;
}
统一样式编写好后,我们将页面分成几个模块,如果这些模块具有基本相同的样式,那么使用class挂钩,如果样式并非相同,那么使用id挂钩,以后每次分模块时都应当遵循这一原则,因为class的特殊性不高,所以如果不是看起来显然类似的模块,就不应当使用class。id的名字通常可以模块的用途作为名字。如 head 、 bottom 等。id selector在层叠中起了关键作用,因为id具有排他性,还具有较高的特殊性,能够防止CSS规则被不经意的覆盖。

在某个模块中我们可能有一些统一CSS,那么我们就需要在使用id selector来编写当前模块下的统一样式。

#head p{
    color:red;
}
添加class挂钩时,我建议使用父模块(或者页面本身)的id在作为class名的第一部分。如果我添加一个独立的页面(body#special),那么为该页面分好模块后,我应当将该页的模块命名为 special_head 、 special_bottom 等。

或者在某些页面模块中使用class挂钩时应当使用 head_col 等。这样做的好处是我们不用使用

#head .col{
    /* 头部中每一列的样式 */
}
而可以直接使用

.head_col{
    /* 头部中每一列的样式 */
}
从而不用担心命名冲突。

而对于模块下直接添加了id selector的元素,我们可以直接使用该selector,并且也在其名字前添加父模块的id。

#head_navigator{
    /* 头部中导航栏的样式 */
}
要做到模块化CSS我们应当尽量防止跨模块的CSS出现,我想一条好的原则是:如果某一样式的跨模块特性不是你一目了然的,那么就不要使用跨模块的CSS。一个例外是全局CSS或者模块内的统一CSS。而对于那些并非一目了然的,并非具有统一样式的,建议在每个子模块下分别定义。这就像是编写Java程序中的面向对象的设计一样,我们要降低模块之间的互相依赖,使得相同模块的CSS规则在一起,略有不同的就完全分开,这样不但易于维护,还能够保证特殊性从低到高地编写CSS,从而防止CSS规则被意外的覆盖

(0)

相关推荐

  • CSS规则层叠的应用 css必须要注意的几点

    理论基础是必要的,实践是提升和理解理论的方法,两者同样重要,任何设计和开发人员离开这两者的平衡,不论偏向哪一方,都会范或左或右的错误.不过我所讲的这个方法在实际应用中到底有什么用呢.显然,它不能够给我们创造出圆角矩形,也不能够给我们创造出分列布局,更加不可能给我们一个固定在文档头部的导航栏.这个算法的实践应用在于: 良好的CSS编程规范 .这是一个宏观的实践,与我刚才提到的微观实践同样重要,但却更加难以掌握. 本文并不想包含所有的良好的CSS编程规范,也不可能,我所能够提供的也只是我个人编写CS

  • CSS规则层叠时的优先级算法

    inline style  embeded style  external style  user style  inline style是丑陋的,它们穿梭在HTML文档中,与HTML元素扭成一团,给Web前端开发人员造成了许多麻烦.它们往往以这样的面目出现: <p style="color:red;">This is a paragraph.</p> embeded style比inline style绅士一些,它们也寄宿在HTML文档中,但是它们不屑于与HT

  • div结合css布局bbs首页(div+css布局入门)

    我把论坛首页分为header区,信息区,内容区,页脚区.首先用一大div把这些包含进来,主要是考虑到页面整体调节方便,比如要调成宽屏的或者是窄屏的,只要设置一下这个大div就可以了. 先把代码贴出来,供朋友们调试使用.css: 复制代码 代码如下: /* CSS Document */ body{ background-color:#F5F5F5; margin:0; padding:0; font-family : "Lucida Grande", Verdana, Lucida,

  • jQuery CSS()方法改变现有的CSS样式

    jQuery入门实例:使用CSS()方法改变现有的CSS样式表,css()方法在使用上具有多样性.其中有一种可接受两个输入参数:样式属性和样式值,两者之间用逗号分隔.比如要改变链接颜色,可以这样编写代码: $("#61dh a").css('color','#123456'); //选择器'$("#61dh a")'表示ID为'#61dh'的元素下的所有链接. //.css('color','#123456');表示把颜色设为'#123456' 如果需要改变多个样式

  • jQuery CSS()方法改变现有的CSS样式表

    使用CSS()方法改变现有的CSS样式表,css()方法在使用上具有多样性.其中有一种可接受两个输入参数:样式属性和样式值,两者之间用逗号分隔.比如要改变链接颜色,可以这样编写代码: $("#61dh a").css('color','#123456'); //选择器'$("#61dh a")'表示ID为'#61dh'的元素下的所有链接. //.css('color','#123456');表示把颜色设为'#123456' 如果需要改变多个样式属性,可先定义属性变量

  • 使用ASP.NET 2.0 CSS 控件适配器生成CSS友好的HTML输出

    [原文地址] Tip/Trick: Use the ASP.NET 2.0 CSS Control Adapters for CSS friendly HTML output [原文发表日期] Wednesday, November 29, 2006 11:01 PM 厌烦了内置的ASP.NET服务器端控件生成 HTML <table> 元素,而希望你能使用纯粹的CSS方案?如果是这样,读下去... 上个星期,我们发布了ASP.NET 2.0 CSS 控件适配器的1.0正式版.这些适配器利用了

  • css ie6 ie7 ff的CSS hack使用技巧

    FF浏览器 .test{ height:20px; background-color:orange; } IE7浏览器 *+html .test{/*IE7*/ height:20px; background-color:blue; } IE6浏览器 *html .test{/*IE6*/ height:20px; background-color:black; } 通过上面的CSS代码可以看出FF还是最听话的浏览器.在IE6和IE7如果要使用HACK必须要在前面加上夫级标签html. 这里就很

  • css强制换行 css强制不换行的css方法

    以前总结过Div的换行和不换行的css写法.但对于表格单元格只知道一个属性nowrap可以使其不换行. 近日有此需要,但发现加上nowrap在某些情况下还是会换行!无奈,没有一个强制不换行的方法吗? baidu了一下,令俺非常欣慰,还真的找到了办法,问题解决了. 用CSS实现表格单元格数据自动换行或不换行 1.自动换行: .AutoNewline { word-break: break-all;/*必须*/ } 自动换行自动换行自动换行自动换行自动换行自动换行自动换行自动换行自动换行自动换行自动

  • 有序列表ol漂亮css分页样式代码(纯css)

    有序列表ol漂亮分页样式 a { color:#000;} .pagination{ overflow:hidden; margin:0; padding:10px 10px 6px 10px; border-top:1px solid #f60; _zoom:1; } .pagination *{ display:inline; float:left; margin:0; padding:0; font-size:12px; } .pagination i{ float:none; paddi

  • 详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css

    写在前面: 本文是vue-手摸手教你使用vue-cli脚手架-详细步骤图文解析之后,又一篇关于vue-cli脚手架配置相关的文章,因为有些文章步骤不够清晰,当时我引入JQuery.bootstrap的时候颇费了一番功夫,所以本文的步骤会尽量详细一点. 引入bootstrap 1. 下载所需要的bootstrap文件. 将要使用的bootstrap文件放入src目录下的assets文件夹中. 2. 在入口文件src/main.js中引入bootstrap import './assets/boot

随机推荐