`
yiminghe
  • 浏览: 1466565 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

css的优先级与继承

阅读更多

起因:


很早就听说通配选择器不好,最好不要使用,似乎使用场景只限于最简单的 css reset

 

* {
   margin:0;
   padding:0; 
}
 

直到偶尔看到 这篇文章 对规范深入浅出的分析才似乎有点理解了。


规范


首先从层叠(cascade)说起,

 

css 的来源通常有三种:


1.浏览器 user agent 自带

2.程序员 (author)指定

3.用户(user)在浏览器中自己设定


由于可以通过指定 !import (这个也是最好别用的 )强制越过等级,w3 平衡了用户与程序员的权利,实际上的优先级层次为:



1.浏览器 user agent 自带

2.用户(user)在浏览器中自己设定

3.程序员 (author)指定

4.程序员 (author)指定 !import

5.用户(user)在浏览器中自己指定 !important。



然后就是特殊性(specificity)的规定:


由于在每个等级都可能会出现同一个元素被多个css规则影响,那么最终采用哪个规则就取决于哪个规则最特殊,优先级最高。每条规则的优先级根据其 css 选择器来指定,从高到底进行比较如下(任意一层高则整体就高)


1.行内样式最高

2.选择器中 id 的个数,多者优先

3.选择器中 类,属性,伪类(last-child)的个数,多 优先

4.选择器中元素,伪元素的个数,多 优先

5.规则在文档中的出现顺序,后者优先


最后就是继承(inheritance)的作用了


若某个元素没有一条规则(程序员或用户)能够直接匹配到自己,那么根据 相应的css属性定义决定 是否可以继承,


1.可以继承,继承其父元素的对应计算值(computed value)

2.不可以继承,则应用浏览器(user agent)的默认值。


其中特别要注意的是继承的是计算值(computed value)而不是用户或程序员的指定值(specified value)。而关于指定值和计算值的转换关系,则每个css属性都有对应的定义


例子:


1.解释开头提出的问题,为什么最好不要使用 *


主要原因即是使用了 * ,继承这一机制就完全失效了,由于 * 可以匹配任何元素,那么就不存在需要继承的css属性了,而继承很多时候是顺其自然,是合适的,例如:

 

* {font-size:12px;}

p {font-size:18px;}


<p>
    i am   
    <strong>strong</strong>
    !
</p>
 

本意是通过 * 来设定整体的字体大小,但是如果想在某个段落应用大字体,并着重其中的某个字strong,由于 strong 以及被 * 匹配,则不能继承父元素的 p 的字体大小,造成怪异的效果,这也是禁止这么使用的原因。


而之所以

 

* {
margin:0;
padding:0;
}
 

没有明令禁止,主要原因还是本身margin,padding其实是定义成不可继承的 ,而本身边距的继承也毫无意义。



2.继承 line-height


以前也有过讨论:两个细节小问题



其中 line-height 部分解释也有点模糊,真正原因有两点


1. line-height 属性是可继承的,和字体等属性类似,为了保证整块区域的和谐,继承还是必要的。


2.继承的是计算值(computed value),line-height 有四种指定值:


  2.1 : normal(关键字),浏览器指定为number 1.0 - 1.2 之间,同number效果相同

  2.2 : number(数字),计算值等于指定值

  2.3 : length(带单位数值),计算机等于绝对值(absolute value),即px单元的值

  2.4 : percentage(百分比),计算值等于字体大小*该指定值


由于继承的是计算值,那么在父元素上指定 em,ex,% 单位的值自然就不会被继承了。

 

 

总结:


对于通用组件开发来说,组件需要嵌入到任何页面都能正常运行,而或多或少都会受到引入页面的样式影响,那么对继承与优先级的深入理解就变得至关重要了。

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    HTML5&CSS3网页制作:CSS优先级.pptx

    CSS,即层叠样式表,用于...总结来说,CSS优先级是决定网页元素样式效果的关键因素,包括继承、行内样式、选择器权重以及`!important`指令。通过深入理解和熟练运用这些概念,开发者能够更加高效地控制网页的视觉呈现。

    CSS优先级总结.pdf

    CSS优先级总结 CSS优先级总结是一个非常重要的知识点,它决定了CSS样式的应用顺序和优先级。在CSS中,优先级是指样式规则的应用顺序,高优先级的样式规则将覆盖低优先级的样式规则。 在CSS中,有多种选择器可以...

    CSS 优先级 详细分析

    CSS优先级是网页设计中一个至关重要的概念,它决定了浏览器如何解析和应用样式规则,从而影响页面元素的呈现。在深入探讨优先级之前,我们先简单回顾一下CSS的基础。CSS,全称为层叠样式表(Cascading Style Sheets...

    CSS优先级冲突:终极解决指南

    ### CSS优先级冲突:终极解决指南 在前端开发过程中,CSS(Cascading Style Sheets,层叠样式表)是必不可少的一项技术。它不仅能够帮助设计师和开发者控制网页的布局、颜色、字体等视觉特性,还能通过媒体查询实现...

    Web前端开发中新手必看的CSS优先级关系教程共3页.pd

    本教程“Web前端开发中新手必看的CSS优先级关系教程共3页.pdf”旨在详细阐述这一主题。 首先,我们需要了解CSS选择器的基本类型及其权重。选择器分为四类:ID选择器(如#myId)、类选择器(如.myClass)、标签选择...

    eric meyer谈css 代码下载

    4. **CSS优先级与继承**: Eric Meyer详细阐述了CSS规则的优先级和继承机制,这帮助开发者理解为何某些样式会覆盖其他样式,并如何正确使用`!important`关键字。 5. **CSS Reset**: Eric Meyer提出的CSS Reset(也...

    网页css优先级为您详细解读

    继承也会影响CSS优先级。继承是一种机制,它允许样式不仅应用于指定的元素,而且还能应用到其后代元素。继承的权重通常较低,但继承的样式可以被任何其他的CSS规则覆盖。 在实际应用中,如果一个HTML元素有多个CSS...

    精通DIV+CSS网页样式与布局

    #### 三、CSS优先级与继承 **3.1 CSS优先级** - **内联样式** &gt; **内部样式块** &gt; **外部样式表** - 当样式冲突时,更高级别的样式会覆盖较低级别的样式。 **3.2 继承机制** - **定义**:子元素自动获取父元素的...

    精通CSS+DIV源码 第十八章

    7. **CSS优先级与继承**:理解CSS样式的优先级和继承关系对于确保样式正确应用至关重要。本章可能会介绍如何计算样式权重,并解释何时一个样式会覆盖另一个。 8. **CSS3新特性**:可能包括过渡(`transition`)、...

    web标准培训教案-CSS+DIV

    4. **CSS优先级与继承**: - **优先级**:ID选择器 &gt; 类选择器 &gt; 标签选择器 &gt; 通配符选择器,内部样式优先级高于外部样式,行内样式最高。 - **继承关系**:子元素可以继承父元素的某些样式,但子元素的定义会...

    css禅意花园大全(书和源代码)-1.zip

    4. **CSS优先级与继承**:书中会介绍CSS规则的优先级机制,包括内联样式、内部样式表和外部样式表的权重,以及如何使用`!important`关键字。同时,也会讨论CSS的继承特性,如何通过父元素的样式影响子元素的显示。 ...

    css样式应用优先级实用PPT课件.pptx

    内联样式的优先级与id选择器相同。 3. id 选择器 id选择器是指用于选择特定id的元素的选择器。例如:#header{ display:none;} &lt;div id="header"&gt;&lt;/div&gt;。id选择器的优先级高于类选择器和元素选择器。 4. 类(属性...

    CSS 优先级使用技巧

    css优先级的四大原则: 原则一: 继承不如指定 如果某样式是继承来的永远不如具体指定的优先级高。例子1:CODE:&lt;style type=text/css&gt; &lt;!– *{font-size:20px} .class3{ font-size: 12px; } –&gt; &lt;/style...

    新手学习css优先级

    这个原则在CSS优先级中也是适用的,它帮助开发者理解当出现样式继承时哪些样式将会被优先考虑。 优先级的计算是一个涉及多个因素的过程。除了上述提到的影响因素之外,还有其他一些特殊情况需要考虑。例如,浏览器...

    CSS 优先级问题详解

    继承作为CSS优先级中的一个重要概念,指的是子元素会从其父元素继承某些样式属性。继承的属性主要是一些不影响布局的属性,如字体颜色、字体类型等。然而,并非所有CSS属性都能被继承。例如,外边距(margin)、内...

    老调重弹的CSS优先级

    CSS优先级是CSS样式在...总的来说,理解和掌握CSS优先级以及继承性对于优化网页样式和解决样式冲突至关重要,这对于任何前端开发者都是必备的技能。通过合理地运用这些原则,可以创建出更稳定、可维护的网页设计。

    浏览器如何判断css优先级

    概念浏览器是通过判断优先级,来决定到底哪些属性值是与元素最相关的,从而应用到该元素上。优先级是由选择器组成的匹配规则决定的。 如何计算?优先级是根据由每种选择器类型构成的级联字串计算而成的. 它不是一个...

    前端面试题汇总

    20. CSS优先级与继承:CSS规则的优先级由选择器的特异性决定,继承则是子元素获取父元素CSS属性值的机制。 21. CSS布局技术:包括浮动(float)、定位(position)、Flexbox和Grid布局等。 以上知识点覆盖了前端...

Global site tag (gtag.js) - Google Analytics