什么是CSS的权重?对于前端工程师来说,这是一个很基础的问题,如果前端工程师没有深刻理解这个概念,则很难写出高质量的CSS代码。

  那么到底什么是CSS的权重呢?我们又怎么来进行判定CSS的权重呢?

  讨论CSS的权重,则必须想了解而且是深刻的了解CSS样式的6种基础选择器:ID选择器、类选择器、属性选择器、伪类和为对象选择器、标签选择器以及统配选择器。所有在CSS样式中定义的选择符都是由这6种基础选择符组合而成的,组合的方式也分为三种:后代选择符、子选择符、相邻选择符。(如果希望更详细的认识选择器的话点击(CSS选择器);

  CSS的权重指的是这些选择符的优先级,优先级高的CSS样式会覆盖优先级低的样式,优先级越高说明权重越高,反之亦然。

  计算CSS的权重是有一定的规则的。根据W3C指定的CSS规范,CSS权重是通过如下规则计算的:

    1)计算选择符中的ID选择器的数量(=a)。

    2)计算选择符中的类选择器、属性选择器以及伪类选择器的数量(=b)。

    3)计算标签类型选择器和伪对象选择器的数量(=c)。

    4)忽略全局选择器。

    按照规则,基础选择器具有这样的优先级:

      ID > 类 | 伪类 | 属性选择 > 标签类型 | 伪对象 > 通配符

*			/* a=0 b=0 c=0 -> 权重 =   0  */
li /* a=0 b=0 c=0 -> 权重 = 0 */
ul li /* a=0 b=0 c=0 -> 权重 = 0 */
ul ol+li /* a=0 b=0 c=0 -> 权重 = 0 */
h1 + #[rel=up] /* a=0 b=0 c=0 -> 权重 = 0 */
ul ol li.red /* a=0 b=0 c=0 -> 权重 = 0 */
li.red.level /* a=0 b=0 c=0 -> 权重 = 0 */
#x34y /* a=0 b=0 c=0 -> 权重 = 0 */
#s12:not[foo] /* a=0 b=0 c=0 -> 权重 = 0 */

  注意:如果两个选择符的权重相同,则可依照“就近原则”来判断。

  明白了CSS选择符的权重后,我们如何依照选择符的权重定义合适的选择符?

  定义选择符的原则是:尽量使选择付的权重低,目的是保证样式在应用于多个元素时容易被覆盖,这可提高样式代码的重用性和可维护性。

具体的原则如下:

  (1)CSS样式中尽量不要使用ID选择器

    ID选择器ijuyou很高的权重,如果要覆盖使用了ID选择器的样式,就必须在原先使用ID选择器的基础上添加新的选择符(类选择器或者标签类型选择器或者额使用个!important,但这样做的结果是无法重用的样式代码会越来越多。

  (2)减少子选择器的层级

    减少选择器的层级的过程也是降低选择符整体权重的过程。

  (3)使用组合的CSS类选择器

     使用CSS选择器组合的方式,开发者可以不用考虑CSS样式覆盖的问题,避开了计算选择符权重的过程,同时也提高了代码的重用性。

    

前端开发之-------------合理利用CSS的权重----------------的更多相关文章

  1. Brackets - 强大免费的开源跨平台Web前端开发工具IDE (HTML/CSS/Javascript代码编辑器)

    Brackets 是一个免费.开源且跨平台的 HTML/CSS/JavaScript 前端 WEB 集成开发环境 (IDE工具).该项目由 Adobe 创建和维护,根据MIT许可证发布,支持 Wind ...

  2. [转载]Brackets - 强大免费的开源跨平台Web前端开发工具IDE (HTML/CSS/Javascript代码编辑器)

    http://brackets.io/ Brackets 是一个免费.开源且跨平台的 HTML/CSS/JavaScript 前端 WEB 集成开发环境 (IDE工具).该项目由 Adobe 创建和维 ...

  3. Web前端开发实战6:CSS实现导航菜单结合二级下拉式菜单的简单变换

    前面几篇博文都在讲导航菜单和二级下拉式菜单,事实上有非常多方法都能够实现的.详细的情况还要视情况而定. 在后面学习到jQuery框架之后,会有更丰富的动画效果.因为在学习Ajax和jQuery的初步阶 ...

  4. Web前端开发中的各种CSS规范

    Reference: http://yusi123.com/2866.html 一.文件规范 1.文件均归档至约定的目录中(具体要求以豆瓣的CSS规范为例进行讲解): 所有的CSS分为两大类:通用类和 ...

  5. 前端开发【第二篇: css】

    css概述 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS ...

  6. Angular01 利用grunt搭建自动web前端开发环境、利用angular-cli搭建web前端项目

    搭建angular开发环境 一.下载并安装node 官网地址:点击前往 二.利用npm安装cnpm 安装好node后就可以使用npm命令啦 查看版本:npm -v 安装cnpm:npm install ...

  7. 前端开发中常用的CSS选择器解析(一)

    你也许已经掌握了id.class.后台选择器这些基本的css选择器.但这远远不是css的全部.下面向大家系统的介绍css中最常用的选择器,包括我们最头痛的浏览器兼容性问题.掌握了它们,才能真正领略cs ...

  8. 前端开发学习之——利用模板实现涉及url问题时的bug分析及解决(chrome源码)

    例如我们要实现如下页面,其中历史页面列表想来自底层返回的数据,此处用testData代替: 最初我写的实现代码如下: html文件: <!doctype html> <html cl ...

  9. Web前端开发CSS规范总结

    作为Web前端开发必备语言,CSS为大家广为熟知,今天就跟大家分享下CSS规范总结,Web前端的小伙伴们看过来吧! CSS样式的权值(权重) 权值等级的定义 第一等:代表内联样式,如: style=” ...

随机推荐

  1. Python中用datetime包进行对时间的一些操作

    1. 计算给出两个时间之间的时间差 import datetime as dt # current time cur_time = dt.datetime.today() # one day pre_ ...

  2. 设置emacs插件flycheck使用jslint eslint

    emacs的flycheck插件支持使用 jslint 和eslint   (setq flycheck-javascript-eslint-executable "~/.nvm/versi ...

  3. Informix如何释放异常的锁资源

    问题 在Informix数据库中,锁的使用和释放是自动完成的.但在某些异常情况下,当前台程序退出(正常或异常)后,相应在数据库中的会话没有终止,其占有的资源(主要是锁)没有被释放,影响了其他用户的使用 ...

  4. C++学习38 string字符串的增删改查

    C++ 提供的 string 类包含了若干实用的成员函数,大大方便了字符串的增加.删除.更改.查询等操作. 插入字符串 insert() 函数可以在 string 字符串中指定的位置插入另一个字符串, ...

  5. aria-expanded,aria-hidden到底做什么用?

    aria-expanded表示展开状态.默认为undefined, 表示当前展开状态未知.其它可选值:true表示元素是展开的:false表示元素不是展开的. aria-hidden字符串.可选值为t ...

  6. spring错误:<context:property-placeholder>:Could not resolve placeholder XXX in string value XXX

    spring同时集成redis和mongodb时遇到多个资源文件加载的问题 这两天平台中集成redis和mongodb遇到一个问题 单独集成redis和单独集成mongodb时都可以正常启动程序,但是 ...

  7. OpenGL ES 着色语言

    OpenGL 着色器中使用的是着色语言GLSL.着色语言源自C语言,提供了丰富的原生类型,如向量.矩阵等,还有大量的内建函数,这在处理3D图形时可以更加高效.易用.下面是整理的是OpenGL ES2. ...

  8. NYOJ-228 士兵杀敌5

    士兵杀敌(五) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为0~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...

  9. [HDU 2126] Buy the souvenirs (动态规划)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2126 题意:给你n个物品,m元钱,问你最多能买个多少物品,并且有多少种解决方案. 一开始想到的是,先解 ...

  10. ubuntu搭建分布式hadoop-2.6.0概略和错误

    详细配置:http://blog.csdn.net/ggz631047367/article/details/42426391 1.修改机器/etc/hostname分别为   master    s ...