深入CSS (上) | 青训营笔记

91 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

一、本堂课重点内容:

  • 选择器的特异度(Specificity)
  • CSS求值过程
  • CSS继承
  • 布局相关技术

二、详细知识点介绍

选择器的特异度(Specificity)

假如一个元素符合多个选择器,那么究竟该用 哪一个选择器的样式?

选择器特异度决定了选择器的优先级,元素使用优先级最高的那一个样式,其中优先级如下,整体来说越特殊的优先级越高

  • !important,加在样式属性值后,权重值为 10000
  • 内联样式,如:style=””,权重值为1000
  • ID选择器,如:#content,权重值为100
  • 类,伪类和属性选择器,如: class="content"、:hover 权重值为10
  • 标签选择器和伪元素选择器,如:div、p、:before 权重值为1
  • 通用选择器(*)、子选择器(>)、相邻选择器(+)、同胞选择器(~)、权重值为0

CSS继承

某些属性会自动继承其父元素的计算值,除非显式指定一个值。一般来说和文字相关的属性都是可以继承的,盒子模型相关的属性都是不可以继承的。

显式继承

可以用inherit来让原本不可继承的属性变成可以继承的

* {
  box-sizing: inherit;
}

html {
box-sizing: border-box;
}

.some-widget {
  box-sizing: content-box;
}

初始值

如果找到头都没有找到指定的数值,那么就用初始值

  • CSS 中,每个属性都有一个初始值
    • background-color 的初始值为 transparent
    • margin-left 的初始值为0
  • 可以使用 initial 关键字显式重置为初始值
    • background-color: initial

CSS求值过程

CSS求值过程.drawio.png 注意计算值和使用值的区别,计算值就是你拿到CSS就能直接得到的,使用值最典型的就是百分比数值,百分比的具体数值就是在计算值里面存着

继承的元素继承的是父元素的计算值

布局

布局相关技术

盒模型

width

  • 指定 content box 宽度
  • 取值为长度、百分数、auto
  • auto 由浏览器根据其它属性确定
  • 百分数相对于容器的 content box 宽度

height

  • 指定 content box 高度
  • 取值为长度、百分数、auto
  • auto 取值由内容计算得来
  • 百分数相对于容器的 content box 高度
  • 容器有指定的高度时,百分数才生效

padding

  • 指定元素四个方向的内边距
  • 百分数指的是相对于容器宽度

boeder

指定容器边框样式、粗细和颜色

三种属性

  • border-width
  • border-style
  • border-color

四个方向

  • border-top
  • boder-right
  • border-bottom
  • border-left

margin

  • 指定元素四个方向的外边距
  • 取值可以是长度、百分数、auto
  • 百分数相对于容器宽度
margin collapse

margin在垂直方向上只会取相邻盒子中margin最大的那一个作为间距

<div class="a"</d1v>
<div class="b"></div>
<style>
.a {
  background: lightblue;
  height: 100px;
  margin-bottom:100px;
}

.b {
  background: coral;
  height: 100px;
  margin-top:100px
}

box-sizing

有borderbox和contentbox,建议使用borderbox

溢出部分控制overflow

一共有visible、hidden、scroll三个属性

三、实践练习例子:

利用边框绘制三角形

/* 正三角 */
.up-triangle {
   width: 0;
   height: 0;
   border-style: solid;
   border-width: 0 25px 40px 25px;
   border-color: transparent transparent rgb(245, 129, 127) transparent;
 }

 /* 倒三角 */
 .down-triangle {
   width: 0;
   height: 0;
   border-style: solid;
   border-width: 40px 25px 0 25px;
   border-color:  rgb(245, 129, 127) transparent transparent transparent;
 }
 div:last-child {
   margin-top: 1rem;
 }

四、课后个人总结:

  1. 多练

五、引用参考:

  1. juejin.cn/post/684490…
  2. juejin.cn/post/693264…