美文网首页
优先级 和 CSS 预处理

优先级 和 CSS 预处理

作者: 不讨喜的大雄 | 来源:发表于2018-12-20 23:39 被阅读0次

前言扯淡

前两天电话面试,被问道了一些 CSS 的基础问题,虽然答上来了,但是不够全面,而且给自己最大的感受是自己对一些概念十分模棱两可,最直观的体现是有时候知道这个概念,却不知道他叫什么。自以为懂,最为致命。
需求是最好的学习API的方式,面试找工作是最好的学习沉淀的过程。快俩个月没写博客了,终于今天在回顾时有一点点小的感悟,打算记录下来,主要是给自己看。废话不多说,开始正文。

首先是 优先级

链接是文档,优先级主要是指CSS属性的优先级。

浏览器通过优先级来判断哪一些属性值与一个元素最为相关,从而在该元素上应用这些属性值。优先级是基于不同种类选择器组成的匹配规则。

简单来说,当你给一个元素声明(或该元素继承而来)多个相同属性时(前提),浏览器选择哪一个作为该元素的应用。

<div>
  <h1 id="title" class="title" style="color: yellow;">优先级</h1>
</div>
<!--优先级显示为 pink-->
*{
  color: red;
}

h1{
  color: green;
}

.title{
  color: blue;
}

#title{
  color: black;
}

h1{
  color: pink !important;
}

优先级如何确定:

选择器优先级,下面三种优先级递增:(不细看文档都不知道这些平时在用的选择器的所有名称)

  1. ID选择器(例如, #title)
  2. 类选择器(class selectors) (例如,.title),属性选择器(attributes selectors)(例如, [type="radio"]),伪类(pseudo-classes)(例如, :hover)
  3. 类型选择器(type selectors)(例如, h1)和 伪元素(pseudo-elements)(例如, ::before)

通配选择符(universal selector)(*), 关系选择符(combinators) (+, >, ~, ' ') 和 否定伪类(negation pseudo-class)(:not()) 对优先级没有影响。(但是,在 :not() 内部声明的选择器是会影响优先级)。
给元素添加的内联样式 (例如, style="color: yellow;") 总会覆盖外部样式表的任何样式 ,因此可看作是具有最高的优先级。
!important 是例外,此声明将覆盖任何其他声明,技术上!important与优先级无关,但它与它直接相关。

如何利用优先级

  1. 选择器越具体,优先级越高。
  2. 相同优先级情况下,后面的样式覆盖前面的。
  3. !important 最特殊,有他的声明最优先,但应该避免使用。

上面内容均来自 MDN,也就是我给的链接,还有很多如无视DOM树中的距离等没有记录。大家还是直接看MDN为宜。这些真的是简单的基础内容,但确实有很多细节,如果能够因为无意看到我的文章去看MDN文档而收获一些东西,便是此文的意义了。
扩展阅读 真正理解"CSS选择器的优先级"

CSS预处理(预编译)

当面试关问我知不知道CSS预处理的时候,我一时并没有将其与平常再用的 LESS、SCSS 等预编译器对上。也就是我文章开头提到的,有时我们以为熟知的东西,事实上我们那么陌生。


(以下内容来自 再谈 CSS 预处理器)
CSS 预处理器是什么?一般来说,它们基于 CSS 扩展了一套属于自己的 DSL,来解决我们书写 CSS 时难以解决的问题:

  • 语法不够强大,比如无法嵌套书写导致模块化开发中需要书写很多重复的选择器;
  • 没有变量和合理的样式复用机制,使得逻辑上相关的属性值必须以字面量的形式重复输出,导致难以维护。

所以这就决定了 CSS 预处理器的主要目标:提供 CSS 缺失的样式层复用机制、减少冗余代码,提高样式代码的可维护性。


这篇文章不打算继续将 LESS、SASS 等的嵌套、变量等语法规则。一来这些内容非一篇文章讲得清(我懒),再者看官方文档是最好的入门方式,同时像上面百度EFE的文档比我写肯定高到不知道哪里去了。
那么我为什么会将 CSS 预处理和 优先级 放在同一篇文章写呢。也是面试官连续问的这俩个问题(真的很基础了,对我这种转行前端新人十分照顾),再者其实两者有一些联系,CSS 预编译也是在变相解决 优先级 的问题,因为我们需要完美利用优先级,所以我们在写 CSS 时往往选择器需要十分详细,如下

div{}
div>ul{}
div>ul>li{}
div>ul>li>a{}

本着 Dry 宗旨,CSS 预编译的嵌套规则就是为了解决优先级啊。


本文仅供个人学习使用

相关文章

  • 优先级 和 CSS 预处理

    前言扯淡 前两天电话面试,被问道了一些 CSS 的基础问题,虽然答上来了,但是不够全面,而且给自己最大的感受是自己...

  • Sass和Less

    什么是Sass和Less? Sass和Less都属于CSS预处理器。 什么是 CSS 预处理器呢? CSS 预处理...

  • 【Web前端】node-sass的免翻墙团队安装

    选型 项目打算用css预处理(预处理的嵌套语法实在不能拒绝),而css的预处理sass、less和stylus这三...

  • 为什么选择Sass而不是Less?

    什么是Sass和Less? Sass和Less都是属于CSS的预处理器,那什么是预处理器呢? CSS预处理器定义了...

  • less在webstorm中的配置

    css预处理技术已经发展的比较成熟了,通过css预处理技术可以很好的提升css的编程性,提高css代码的开发效率和...

  • Sass和Less

    saas和less sass和less是什么? Saas和Less都属于css预处理器,css预处理器定义了一种新...

  • 在Vue.js中使用Stylus预处理器

    概述 什么是Stylus Stylus是一个CSS预处理器。 什么是CSS预处理器 关于CSS预处理器,推荐先行阅...

  • 前端复习第二周

    主要复习CSS,style来引入css,link来外联css文件 优先级标签内css优先级 > hand内部css...

  • 十分钟入门sass

    什么是css预处理器 :bookmark: CSS 预处理器是一个能让你通过预处理器自己的语法生成CSS的工具。 ...

  • CSS预处理器之Less

    CSS预处理器 什么是CSS预处理器 CSS 预处理器就是用某一种语言用来为 CSS 增加一些动态语言的的特性(变...

网友评论

      本文标题:优先级 和 CSS 预处理

      本文链接:https://www.haomeiwen.com/subject/epaukqtx.html