【CSS | 青训营笔记】

29 阅读3分钟

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

重点

  • CSS是什么
  • 权重计算
  • CSS布局

CSS是什么?

CSS(层叠样式表,Cascading Style Sheets),用来定义页面元素的样式,也就是说,修饰HTML标签元素的,比如设置标签里面的字体和颜色,设置图片的位置和大小,给按钮添加动画效果......

🍕举个栗子

<h1>我是一级标题</h1>
h1 {
    color: white;
    font-size: 14px;
}

这里 h1 是标签名,后面的 CSS 样式写在花括号里面,每个样式写完用分号隔开。

🍔在页面中使用CSS的三种方式

  • 外链 :从页面外引入 css 文件,href 属性后面是 css 文件路径
  • 嵌入 :在页面中的 style 模块写 css
  • 内联 :写在 html 标签里面
<!-- 外链 -->
<link rel="stylesheet" href="/assets/style.css">
<!-- 嵌入 -->
<style>
    li { margin : 0; list-style: none; }
    p { margin: 1em 0; }
</style>
<!-- 内联 -->
<p style="margin: 1em 0">Example Content</p>

🍟css 是如何工作的

image.png

🌭选择器 Selector

---- 找出页面中的元素,以便给他们设置样式

  • 按照标签名、类名或 id
  • 按照属性
  • 按照DOM树中的位置

选择器特异度(Specificity)

下面的问题:

image.png

涉及到选择器的权重问题,选择器的权重的值可以表示为四个独立的部分 a,b,c,d 组成。进行复合选择器的权重计算时四个部分是独立的,不会出现进位。在比较大小时按从 a-b-c-d 的顺序依次进行比较,高位相同才需要比较低位。

image.png

权重计算

  • 🍿后代选择器、子选择器、兄弟选择器、交集选择器:所有的基础选择器的权重相加(忽略掉 “>” 和 “+” ),注意没有进位。
#header nav ul li.current a:hover {
    color: red; font-weight: bold;
}
/*权重0,1,0,0+(0,0,0,1)*3+0,0,1,0+0,0,0,1+0,0,1,0=0,1,2,4
权重id+标签*3+类+标签+伪类*/
#header>div+nav ul li.current a:hover {
    color: red; font-weight: bold;
}
/*权重0,1,0,0+(0,0,0,1)*4+0,0,1,0+0,0,0,1+0,0,1,0=0,1,2,5
权重id+标签*4+类+标签+伪类*/
  • 🥓并集选择器:相当于多个选择器一起设置样式,权重分开计算即可。
  • 🍳含有伪类、伪元素、属性选择器的复合选择器的权重计算时要注意。

CSS 布局

🧇布局(Layout)是什么?

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

image.png

🥞布局相关技术

  • 盒子模型
  • 浮动
  • 绝对定位

image.png

image.png

width

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

height 指定 content box 宽度

  • 取值为长度、百分数、auto
  • auto 由浏览器根据其他属性确定
  • 百分数相对于容器的 content box 宽度
  • 容器有指定的高度时,百分数才生效

padding

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

border

  • 指定容器边框样式、粗细和颜色
  • 三个属性
    • border-width
    • border-style
    • border-color
  • 四个方向
    • border-top
    • border-right
    • border-bottom
    • border-left

margin

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

🍞常规流 Normal Flow

  • 根元素、浮动和绝对定位的元素会脱离常规流
  • 其他元素都在常规流之内(in-flow)
  • 常规流中的盒子,在某种排版上下文中参与布局

🥨Flex Box 是什么?

控制子集盒子的:

  • 摆放的流向(上下左右)
  • 摆放顺序
  • 盒子宽度和高度
  • 水平和垂直方向的对齐
  • 是否允许折行