视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
CSS规则层叠的应用css必须要注意的几点_经验交流
2020-11-27 18:55:19 责编:小采
文档

理论基础是必要的,实践是提升和理解理论的方法,两者同样重要,任何设计和开发人员离开这两者的平衡,不论偏向哪一方,都会范或左或右的错误。不过我所讲的这个方法在实际应用中到底有什么用呢。显然,它不能够给我们创造出圆角矩形,也不能够给我们创造出分列布局,更加不可能给我们一个固定在文档头部的导航栏。这个算法的实践应用在于: 良好的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规则被意外的覆盖

下载本文
显示全文
专题