`
yiminghe
  • 浏览: 1480248 次
  • 性别: 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,% 单位的值自然就不会被继承了。

 

 

总结:


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

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    2024年大数据软件项目深度研究分析报告.docx

    2024年大数据软件项目深度研究分析报告.docx

    《基于YOLOv8的社区健身步道积水结冰预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    chromedriver-mac-arm64-136.0.7103.25.zip

    chromedriver-mac-arm64-136.0.7103.25.zip

    2023年全国计算机二级JAVA考试练习题及答案.docx

    2023年全国计算机二级JAVA考试练习题及答案.docx

    苏苏源码-jspm010-课堂教学效果实时评价系统(论文+PPT).zip

    苏苏源码-jspm010-课堂教学效果实时评价系统(论文+PPT)

    操作系统设备管理.pptx

    操作系统设备管理.pptx

    2023年计算机等级考试WORD实训操作要点提示.docx

    2023年计算机等级考试WORD实训操作要点提示.docx

    汇川H3U PLC与触摸屏程序模板:基于Canlink总线的六轴运动控制及视觉定位系统

    内容概要:本文详细介绍了汇川H3U PLC平台上的一个创新架构,用于控制三个步进电机和三个CANlink总线伺服电机的运动控制系统。该系统集成了基恩士工业相机进行视觉定位,并实现了自动模式与手动干预之间的无缝切换。文中涵盖了多个关键技术点,如软暂停机制、TCP通信、寄存器直接操作以及异常恢复机制。通过这些技术手段,不仅提高了生产线的灵活性和稳定性,还显著减少了故障处理时间和换型时间。 适用人群:从事工业自动化控制系统的工程师和技术人员,特别是对PLC编程、运动控制和视觉定位感兴趣的读者。 使用场景及目标:本方案适用于需要高精度运动控制和快速异常处理的生产环境,旨在提高生产线的自动化水平和应对突发事件的能力。具体应用场景包括但不限于包装行业、电子制造和其他需要精确运动控制的制造业。 其他说明:文中提供了详细的代码片段和实施细节,帮助读者更好地理解和应用这些技术。此外,还分享了一些实际项目中的经验和技巧,如TCP心跳包处理、寄存器操作优化等。

    电动交通工具FOC电机控制代码解析:涵盖全功能及移植方案

    内容概要:本文详细介绍了大厂成熟的FOC(磁场定向控制)电机控制代码及其应用。该代码基于STM32平台,经过实际验证,能够稳定应用于电动交通工具。文中展示了多个关键技术点,包括转把信号处理、刹车逻辑、霍尔传感器修复、故障诊断模块以及核心FOC算法。此外,还讨论了代码的移植性和扩展性,特别是针对国产芯片的适配方法。通过这些技术手段,确保了系统的鲁棒性和高效性能。 适合人群:从事电动交通工具开发的技术人员,尤其是对FOC电机控制系统感兴趣的工程师。 使用场景及目标:适用于电动自行车、摩托车等电动交通工具的研发和生产。目标是提高产品的可靠性和性能,降低开发难度和成本。 其他说明:本文不仅提供了详细的代码实现,还分享了许多实践经验和技术细节,帮助开发者更好地理解和应用这些技术。

    2023年新版计算机一级考试试题一及答案解析.doc

    2023年新版计算机一级考试试题一及答案解析.doc

    MATLAB中基于NSGA2算法的分布式电源选址定容优化

    内容概要:本文详细介绍了使用NSGA2算法在MATLAB中实现分布式电源选址定容优化的方法。首先,文章解释了种群初始化、非支配排序、交叉操作以及拥挤度计算等关键步骤的实现细节。接着,重点讨论了目标函数的设计,如电压偏差和投资成本的计算方法。此外,文中还分享了一些实际应用中的经验和技巧,例如如何避免无效解、处理越界情况以及提高算法效率的方法。最后,通过实例展示了Pareto前沿的可视化及其在决策支持中的应用。 适合人群:具有一定MATLAB编程基础和技术背景的研究人员、工程师,尤其是从事电力系统优化领域的专业人士。 使用场景及目标:适用于需要解决分布式电源选址定容问题的实际工程项目,旨在帮助用户理解和掌握NSGA2算法的应用,从而更好地处理多目标优化问题,找到最优折衷解集。 其他说明:文中提供了详细的代码片段和实现思路,有助于读者深入理解NSGA2算法的工作原理及其在电力系统优化中的具体应用。同时,文中提到的一些改进措施和注意事项也为进一步研究提供了有价值的参考。

    YOLOv5开源代码解析与深度学习目标检测入门

    内容概要:本文深入剖析了YOLOv5的官方开源代码,详细解读了其各个关键模块的功能和实现细节。首先介绍了数据加载部分,展示了如何处理摄像头输入以及数据增强的方法,如随机透视变换和HSV颜色抖动。接着探讨了模型定义中的核心组件,如Detect模块和C3模块的设计理念及其背后的数学原理。随后讲解了损失函数的计算方式,包括位置损失、分类损失和交并比损失的综合应用。此外,还讨论了训练过程中的一些高级技巧,如智能参数分组优化和非极大值抑制的实现。最后强调了官方注释的重要性和实用性,指出这些注释能够帮助开发者更好地理解和修改代码。 适合人群:对深度学习尤其是目标检测感兴趣的初学者和有一定编程基础的研发人员。 使用场景及目标:①理解YOLOv5的工作原理和技术细节;②掌握如何利用官方代码进行定制化开发;③提高对工业级项目的认识,学习优秀的编码风格和最佳实践。 其他说明:建议读者结合实际项目进行练习,通过调试和修改代码来加深理解。同时,可以参考官方文档和其他相关资料,进一步拓展知识面。

    永磁同步电机负载转矩扰动的滑模观测器(SMO)控制与优化

    内容概要:本文详细介绍了滑模观测器(SMO)在永磁同步电机(PMSM)控制系统中对抗负载转矩扰动的应用。首先解释了负载转矩扰动对电机性能的影响,接着展示了SMO的基本原理及其C语言和Python实现方式。文中特别强调了sign函数的作用以及其导致的抖振问题,并提出了使用饱和函数和平滑处理的方法进行改进。此外,讨论了不同工况下的参数调整技巧,如低速情况下的特殊处理和基于模糊逻辑的自适应调参方法。最后,通过MATLAB仿真验证了SMO的有效性和鲁棒性。 适合人群:从事电机控制领域的工程师和技术人员,尤其是对永磁同步电机感兴趣的研究者。 使用场景及目标:适用于需要提高永磁同步电机抗负载扰动能力的实际工程项目,旨在减少因负载变化引起的转速波动,确保系统的稳定性和可靠性。 其他说明:文中提供了大量代码片段作为实例,帮助读者更好地理解和实施滑模观测器的设计与优化。同时提醒读者关注参数选择的经验法则以及硬件条件对控制效果的影响。

    Matlab实现的各种人工智能算法代码.zip

    matlab

    2024年第十五届蓝桥杯Java B组省赛真题

    蓝桥杯javab组真题合集以上是蓝桥杯Java B组部分真题的合集,涵盖了2022年、2023年和2024年的部分题目。这些题目涵盖了常见的算法和数据结构问题,如动态规划、贪心算法、字符串处理、矩阵操作等。通过这些真题的练习,可以帮助参赛者更好地准备蓝桥杯比赛,提升编程能力和解题技巧。

    CCF-GESP(China Computer Federation - General Examination for Software Programming)是中国计算机学会推出的编程能力等级认

    CCF-GESP(China Computer Federation - General Examination for Software Programming)是中国计算机学会推出的编程能力等级认证考试,旨在为青少年提供一个科学、权威的编程能力评价体系。GESP考试分为多个级别,覆盖了从基础到高级的不同编程技能水平。 ### CCF-GESP 基础学习指南 #### 1. 确定目标级别 首先,了解GESP的不同级别以及每个级别的具体内容和要求是非常重要的。根据考生的实际编程经验和知识水平选择合适的目标级别进行准备。 #### 2. 学习编程语言 - **Python**:对于初学者来说,Python是一个很好的开始,因为它语法简洁清晰,易于理解。 - **C++** 或 **Scratch**:除了Python之外,GESP也支持使用C++或Scratch进行考试。选择哪种语言取决于你的兴趣和未来的学习方向。 #### 3. 掌握基础知识 无论选择哪种语言,都需要掌握以下基本概念: - **变量与数据类型**:了解如何定义变量及不同类型的变量(如整型、浮点型、字符串等)。 - **控制结构**:包括条件语句(if, else)、循环语句(for, while)。 - **函数/方法**:学习如何定义和调用函数,理解参数传递的概念。 - **数组与列表**:掌握一维数组或列表的操作。 - **输入输出**:熟悉程序如何接收用户输入和向屏幕输出信息。 #### 4. 实践练习 理论学习固然重要,但实践是提高编程技能的关键。可以通过以下方式加强练习: - **在线平台**:利用LeetCode、Codeforces等网站上的题目进行练习。 - **项目开发**:尝试完成一些小型项目,比如简单的游戏、工具软件等,这有助于加深对知识点的理解并提升解决实际问题的能力。

    基于BES-SVM算法的秃鹰搜索优化与数据分类预测的Matlab实现

    内容概要:本文详细介绍了如何利用秃鹰搜索算法(BES)优化支持向量机(SVM)的参数进行数据分类预测。首先解释了BES的工作原理及其相对于传统方法的优势,如更快地找到最优解和更高的分类准确性。接着展示了具体的Matlab代码实现步骤,包括环境搭建、数据预处理、参数设置、BES优化主循环以及最终模型的训练和评估。文中特别强调了参数范围的选择、适应度函数的设计和Libsvm工具箱的正确使用。此外,还提供了一些常见的注意事项和改进建议。 适合人群:具有一定编程基础并对机器学习感兴趣的开发者和技术爱好者。 使用场景及目标:适用于需要高效优化SVM参数以提高分类性能的应用场景,特别是在处理高维数据时。主要目标是帮助读者掌握BES-SVM的具体实现方法,并能够在实际项目中应用。 其他说明:文章不仅提供了完整的代码示例,还包括了详细的注释和解释,便于初学者理解和学习。同时提醒读者注意操作系统兼容性和内存限制等问题。

    2023年自考计算机系统结构试题答案.doc

    2023年自考计算机系统结构试题答案.doc

    2023年操作系统实验报告实验一进程管理.doc

    2023年操作系统实验报告实验一进程管理.doc

    2023年助理通信工程师考试.doc

    2023年助理通信工程师考试.doc

Global site tag (gtag.js) - Google Analytics