CSS进阶|青训营笔记

CSS进阶|青训营笔记

我的图图呢 1,327 2022-07-25

本文解决一些 CSS 使用中常见的问题

问题一:选择器优先级

多个选择器都匹配到了同一元素,哪条规则会生效?
按照特异度排序,特异度越高,表明选择器越特殊,优先级越高。
优先级从高到低排序:

  • !important: 1000
  • id: 100
  • (伪)类: 10
  • 标签: 1

问题二:继承与初始值

css中某些属性会自动继承其父元素的计算值,除非显式指定一个值。

一般在css中,文字相关的属性都是可以继承的,而盒模型相关的是不能继承的,如果想要继承,可以使用显示继承的方式。

* {
  box-sizing: inherit; // 显示继承
}
 
html {
  box-sizing: border-box;
}
 
.some-widget {
  box-sizing: content-box;
}

当一个属性是不可继承的且没有赋值,或者其可以继承但根节点也没有对其赋值,就会显示这个属性的初始值,我们可以使用 initial 关键字显式重置为初始值。

问题三:CSS求值过程

问题四:布局

布局是依据元素、容器、兄弟节点和内容等信息来确定内容的大小和位置的算法

三大类:常规流,浮动,绝对定位。

在布局时,将每个元素理解成一个容器(盒子),每个容器有 height, width, padding, border, margin等属性。

content-box:
762C148C-4BEF-4176-A166-23B19811D0E4

border-box(更符合直觉):
52DDB7AE-D437-4619-A399-BDEB874398BE

问题五:用border实现三角形

image-1658758146034

.box {
    border-width: 50px;
    border-style: solid;
    border-color: #f35 #269 #649 #fa0;
    width: 0;
    height: 0;
}

问题六:margin 塌陷与合并

<div class="a"></div>
<div class="b"></div>

<style>
  .a {
    background: lightblue;
    height: 100px;
    margin-bottom: 100px;
  }

  .b {
    background: coral;
    height: 100px;
    margin-top: 100px;
  }
</style>

同一个BFC中的margin在垂直方向上会取两方最大值进行合并。
相关内容:
https://zhuanlan.zhihu.com/p/337857229