在这之前只知道css权重的皮毛,比如说:行内权重比头部权重高,头部比外部样式权重高…………工作中才知道真正理解css权重重要性。理解权重了才能写出来最优css选择器来。对后面学习less,scss有很大帮助。

  从css代码存放的位置来看,权重计算当然是--->内嵌样式 > 内部样式表 > 外联样式表!然而工作中我们的css代码都是写在外联样式表中的咯。

  参考w3c样式选择器权重优先级是这个样子的

  important > 内嵌样式 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 继承 > 通配符

  有一种计算权重方法当然是不是官方有待考究

  important  1  0  0  0

  id      0  0  1  0

  class    0  0  1  0

  tag(标签)  0  0  0  1

  伪类     0  0  1  0

  att属性    0  0  1  0

  伪对象    0  0  0  1

  通配符    0  0  0  0  

一般而言,选择器越特殊,它的优先级越高。也就是选择器指向的越准确,它的优先级就越高。通常我们用1表示标签名选择器的优先级,用10表示类选择 器的优先级,用100标示ID选择器的优先级。比如 .polaris span {color:red;}的选择器优先级是 10 + 1 也就是11;而 .polaris 的优先级是10;
 
    div.test1 .span var 优先级 1+10 +10 +1  
    span#xxx .songs li 优先级1+100 + 10 + 1  
    #xxx li 优先级 100 +1 
 
对于什么情况下使用什么选择器,用不同选择器的原则是:第一:准确的选到要控制的标签;第二:使用最合理优先级的选择器;第三:HTML和CSS代码尽量简洁美观。

  选择器种类

  严格意义上说CSS的选择器分类只能分成三种,标签名、类选择器、ID选择器。当然这也是设计之初就这么设计的。后面的选择器都是由于特殊需求添加的,当初我学习的时候就这些选择器也是够用的了!

  标签选择器:p{}

  类选择 : .container{}

  ID : 选择器 #logo{}

当然了ID选择器在一个页面里面你只能有一个,多个的话当然不会报错,毕竟CSS不是编程语言嘛!但是后台开发人员经常使用ID,如果不幸他命名规则和你定义一样的,那这个错误就不好找出来了。

  扩展选择器:

    后代选择器:p span a{}; 后代选择就是在上一个选择器的后面加一个空格接着写选择器。这么写匹配到的标签就更少了。当然权重就会更高了!

    群组选择器 : p,div,img{};群组选择器是当多个标签都需要同样的样式的时候,用一个逗号分隔开多个选择器。这样写法会节省很多代码量

下面介绍一下css2,css3中的选择器

    CSS1&2中的选择器介绍
    CSS3 新增选择器介绍
    CSS3属性选择器
    CSS3结构伪类选择器
    CSS3UI元素状态伪类选择器
    CSS3其他新增选择器

CSS1&2元素选择器
  元素选择器
    * 通用选择器
    E 元素选择器
    E#Id id选择器
    E.class 类选择器
  关系选择器
    E F 包含选择器 E元素包含的F元素。
    E>F 子选择器 选择E元素的子元素F
    E+F 相邻选择器 E元素之后F元素
  伪类选择器
    E:link 链接伪类 未被访问前样式
    E:visited 以被访问过的样式
    E:hover 鼠标悬停时的样式
    E:active 鼠标点击与释放之间
    E:focus 元素成为输入焦点
    E:lang 匹配使用特殊语言的E元素
  属性选择器
    E[att] 选择具有att属性的E元素
    E[att="val"] 选择具有att属性且属性值为val的E元素
    E[att~="val"] 选择具有att属性且属性值为用空格分隔的字词列表,其中一个等于val的E元素
    E[att|="val"] 具有att属性且元素值为以val开头并用连接符-分隔的字符串的E元素
  伪对象选择器
    E:first-letter 设置对象内的第一个字符的样式。
    E:first-line设置对象内的第一行的样式
    E:before设置在对象前发生的内容,用来和content属性一起使用
    E:after设置在对象后发生的内容,用来和content属性一起使用。

  CSS3新增选择器 44个
    E F 包含选择器
    E>F 子选择器
    E+F相邻选择器
    E~F兄弟选择符


  P~P{color:#f00} 选择的是第一个P后面的P元素。(只能选择它后面的兄弟)

  结构伪类选择器
    E:root E在文档的根元素
    E:first-child父元素的第一个子元素E
    E:last-child父元素的最后一个子元素E
    E:only-child父元素仅有的一个子元素E
    E:nth-child(n)父元素的第n个子元素E
    E:nth-last-child(n)父倒数第n个子元
    E:first-of-type同类型中的第一个同级兄弟元素E
    E:last-of-type同类型中最后一个同级兄弟元素E.
    E:only-of-type同类型中唯一的一个同级兄弟元素E
    E:nth-of-type(n)同类型中第n个同级兄弟元素E.
    E:nth-last-of-type(n)匹配同类中倒数第n个同级兄弟元素E
    E:empty没有任何子元素包括text节点的元素E.

    P:first-child{}解读,先找到P元素,再找他的父节点,从父节点去找第一个元素为P的节点。
    P:last-child{}和p:first-child{}差不多
    li:nth-child(2){}选中指定序号。找li父元素ul,找到ul的第二个子元素是否是li,是就选中。
    li:nth-child(even){}/*even选中偶数,odd选中奇数*/
    li:nth-child(3n+1){}/*自定义序列类型(正序)*/
    li:nth-last-child(){}/*是nth-child()的倒序*/

    P:first-of-type{}找到第一个是P标签的元素。
    上面的标签可分为 child系类和of-type系列
    E:root{}用法只有一个,
    html:root{},其他标签都没有用。这个选择器我只在bootstrap中见过!可能它真的有用吧

  

简洁、高效的CSS
 
所谓高效的CSS就是让浏览器在查找style匹配的元素的时候尽量进行少的查找,下面列出一些我们常见的写CSS犯一些低效错误:
 
◆不要在ID选择器前使用标签名
 
一般写法:DIV#divBox
 
更好写法:#divBox
 
解释: 因为ID选择器是唯一的,加上div反而增加不必要的匹配。
 
◆不要再class选择器前使用标签名
 
一般写法:span.red
 
更好写法:.red
 
解释:同第一条,但如果你定义了多个.red,而且在不同的元素下是样式不一样,则不能去掉,比如你css文件中定义如下:
 
    p.red{color:red;}  
    span.red{color:#ff00ff} 
 
如果是这样定义的就不要去掉,去掉后就会混淆,不过建议最好不要这样写
 
◆尽量少使用层级关系
 
一般写法:#divBox p .red{color:red;}
 
更好写法:.red{..}
 
◆使用class代替层级关系
 
一般写法:#divBox ul li a{display:block;}
 
更好写法:.block{display:block;}

  

css权重计算方法浅谈的更多相关文章

  1. 转:浅谈CSS在前端优化中一些值得注意的关键点

    前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加 ...

  2. 浅谈对CSS的认识

    自从进公司也有2个多月了,相信和我一批进来的小伙伴们都收获了很多东西,这个是在学校所学不到的,也让成长了很多.作为新人的我,从认为CSS是个很简单的东西,到现在觉得CSS中水很深,感觉学了很多的CSS ...

  3. 浅谈Normalize.css

    浅谈Normalize.css 一.总结 1.Normalize.css:它在默认的HTML元素样式上提供了跨浏览器的高度一致性,花了几百个小时来努力研究不同浏览器的默认样式的差异. 2.优于rese ...

  4. 【css】浅谈BFC

    定义: 块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域. BFC的布 ...

  5. CSS属性中的display属性浅谈;

    首先我们要知道什么是块级元素和行内元素有什么区别: 承接上篇文章:(浅谈HTML和body标签) 块级元素:浏览器解析为独占一行的元素(例如:div.table.ul等.),浏览器会在该元素的前后显示 ...

  6. 浅谈CDN、SEO、XSS、CSRF

    CDN 什么是CDN 初学Web开发的时候,多多少少都会听过这个名词->CDN. CDN在我没接触之前,它给我的印象是用来优化网络请求的,我第一次用到CDN的时候是在找JS文件时.当时找不到相对 ...

  7. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  8. 浅谈 Attention 机制的理解

    什么是注意力机制? 注意力机制模仿了生物观察行为的内部过程,即一种将内部经验和外部感觉对齐从而增加部分区域的观察精细度的机制.例如人的视觉在处理一张图片时,会通过快速扫描全局图像,获得需要重点关注的目 ...

  9. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

随机推荐

  1. bootstrap表格

    Bootstrap 实例 - 边框表格 < 建立日期 2015-5-27 录入人员 test1 处理人员 test2 问题报障人   部门/城市公司   联系电话   问题类型   处理状态   ...

  2. 【翻译】MongoDB指南/引言

    [原文地址]https://docs.mongodb.com/manual/ 引言 MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性 1.文档数据库 MongoDB用一个文档来 ...

  3. Bootstrap WPF Style,Bootstrap风格的WPF样式

    简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...

  4. AHCI: Failed to attach drive to Port1 (VERR_GENERAL_FAILURE).

    在mac操作系统下,安装VirtualBoxVm虚拟机,虚拟机里面安装wind7操作系统.在启动虚拟机的时候报错:AHCI: Failed to attach drive to Port1 (VERR ...

  5. seajs3.0.0源码分析记录

    自己边读变加了一些注释,理解了一下seajs3.0.0工作的流程.正则没有一个个去理解,插件模块也没看, 以后有时间了可以补充完整~ 事件系统中事件队列的获取&定义方法 var list = ...

  6. 剖析并利用Visual Studio Code在Mac上编译、调试c#程序

    0x00 前言 一周多以前的微软的Build大会上,微软发布了一个让很多人眼前一亮的工具,也是本文的主角——Visual Studio Code.很多使用Windows的朋友都很高兴,认为又多了一个很 ...

  7. 一个简单的webservice的demo(下)winform异步调用webservice

    绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...

  8. ASP.NET MVC View 和 Web API 的基本权限验证

    ASP.NET MVC 5.0已经发布一段时间了,适应了一段时间,准备把原来的MVC项目重构了一遍,先把基本权限验证这块记录一下. 环境:Windows 7 Professional SP1 + Mi ...

  9. JSON扩展类——JsonHelper

    1.引用Newtonsoft.Json库(JSON.NET). 2.复制粘贴JsonHelper吧. 源代码: using System; using System.Collections.Gener ...

  10. C#基础知识六之委托(delegate、Action、Func、predicate)

    1. 什么是委托 官方解释 委托是定义方法签名的类型,当实例化委托时,您可以将其实例化与任何具有兼容签名的方法想关联,可以通过委托实例调用方法. 个人理解 委托通俗一点说就是把一件事情交给别人来帮助完 ...