notes
  • Introduction
  • 语言
    • JS
      • JS原型到原型链
      • JS继承的实现
      • this对象
      • Promise基本概念
      • Promise实现
      • Promise实战
      • JS的EventLoop
      • JS容易出现误区的运算符
      • JS容易出现误区的操作符
      • JS深拷贝
      • JS节流与防抖
      • ES5实现原生/ES6方法
    • TS
      • 声明文件
      • 项目配置
    • CSS
      • CSS引入方式以及优先级计算
      • BFC神奇背后的原理-文摘
      • 回流reflow与重绘repaint
      • 三栏式布局
      • 垂直居中
      • 清除浮动的方法
      • 移动端适配方案
      • 纯CSS斜切角实现
      • CSS揭秘
      • 背景图片轮播
      • CSS绘制序列帧动画
      • transform实现一个多面体
    • HTML
  • ES6
  • Node.js
    • xxx
  • 前端框架
    • Vue.js
      • Vue双向数据绑定原理
      • Vue-Router原理及实现
    • React
    • AngularJS
  • 工程构建
    • Webpack
      • 01-webpack概述及背景
      • 03-webpack热更新原理
      • 04-splitChunks原理分析
      • 05-webpack工作流程
      • 07-webpack构建流程
      • 07-webpack构建流程
      • 10-webpack 如何进行性能分析
    • Gulp
    • Lint
      • ESLint
      • TSLint
    • Bable
  • 工程化
    • 模块化
    • 组件化
    • 规范化
      • 编码规范
    • 自动化
  • 运维
    • Nginx
    • GIT
    • CDN
    • VPS
    • DBA
  • 小程序
  • 跨端
  • 测试
  • 计算机技术
    • 计算机网络
      • 同源策略到前端跨域解决方案
      • TCP数据传输
      • TCP和UDP的区别
      • HTTP协议概述
      • HTTP缓存详解
      • HTTPS以及SSL建立过程
      • HTTPS的七个误解(译文)
      • cookie与Session机制区别以及Cookie SessionStorage LocalStorage异同
      • HTTP状态码Status
      • DNS原理入门
      • 网络攻击与防御
      • HTTP转发与重定向
      • 登录认证设计
    • 操作系统
      • shell脚本命令
    • Linux
      • Linux命令大全
      • vim命令
    • 浏览器
      • 浏览器内核、JS 引擎、页面呈现原理及其优化
      • 九种浏览器端缓存机制概览
      • 性能优化-网络请求方面
      • webkit解析CSS过程详解
  • 前端面试
    • 算法
Powered by GitBook
On this page
  • 优先级
  • 优先级是如何计算的?
  • 选择器的优先级
  • HTML中引入CSS的方式
  • 引入方式
  • 引入方式优先级排序
  • 参考
  1. 语言
  2. CSS

CSS引入方式以及优先级计算

优先级

优先级是如何计算的?

优先级就是分配给指定的CSS声明的一个权重,它由 匹配的选择器中的 每一种选择器类型的 数值 决定。

而当优先级与多个CSS声明中任意一个声明的优先级相等的时候,CSS中最后的那个声明将会被应用到元素上。

当同一个元素有多个声明的时候,优先级才会有意义。因为每一个直接作用于元素的CSS规则总是会接管/覆盖(take over)该元素从祖先元素继承而来的规则。

选择器的优先级

序号越大,优先级越高

important > 内联 > ID > 类 > (标签 = 伪类 = 属性选择) > 伪对象 > 通配符 > 继承

  1. 低优先级

    • 类型选择器(type selectors)(例如, h1)

    • 伪元素(pseudo-elements)(例如, ::before)

  2. 中优先级

    • 类选择器(class selectors) (例如,.example)

    • 属性选择器(attributes selectors)(例如, [type="radio"])

    • 伪类(pseudo-classes)(例如, :hover)

  3. 高优先级

    • ID选择器(例如, #example)

  4. 例外的最高优先级

    • !important此声明将覆盖任何其他声明。虽然技术上!important与优先级无关,但它与它直接相关。

通配选择符(universal selector)(*), 关系选择符(combinators) (+, >, ~, ' ') 和 否定伪类(negation pseudo-class)(:not()) 对优先级没有影响。(但是,在 :not() 内部声明的选择器是会影响优先级)。

HTML中引入CSS的方式

引入方式

  1. 内联样式

<div style="background: red"></div>
  1. 嵌入样式

  <head>
   <style>
   .content {
       background: red;
   }
   </style>
  </head>
  1. 外链方式

<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
  1. 导入样式

<style>
    @import url(style.css);
</style>

link链接方式和@import导入方式区别

  • link 属于 HTML,通过 标签中的 href 属性来引入外部文件,而 @import 属于 CSS,所以导入语句应写在 CSS 中,要注意的是导入语句应写在样式表的开头,否则无法正确导入外部文件;

  • @import 是 CSS2.1 才出现的概念,所以如果浏览器版本较低,无法正确导入外部样式文件;

  • 当 HTML 文件被加载时,link 引用的文件会同时被加载,而 @import 引用的文件则会等页面全部下载完毕再被加载;

小结:我们应尽量使用 标签导入外部 CSS 文件,避免或者少用使用其他三种方式。

引入方式优先级排序

内联样式 > (嵌入样式 = 外链形式 = 导入样式)

其中,嵌入样式 = 外链形式 = 导入样式 按照CSS样式顺序确定优先级,同一个样式,前面的的样式会被后面的样式覆盖

  1. 最高优先级内联样式 例如, style="font-weight:bold" 总会覆盖外部样式表的任何样式 ,因此可看作是具有最高的优先级。

  2. 嵌入样式、外部样式 按照引用顺序,引用在后面的会覆盖引用在前面的样式

    • 嵌入样式

      <head>
      <style>
      .content {
            background: red;
      }
      </style>
      </head>
    • 外部样式 外部样式分两种引用方式,一种是link 一种的@import ,后面有介绍

      <head>
      <link rel="stylesheet" type="text/css" href="style.css">
      </head>

参考

PreviousCSSNextBFC神奇背后的原理-文摘

Last updated 3 years ago