这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
一、走进前端技术栈-CSS
1. CSS 是什么?
-
Cascading Style Sheets
-
用来定义页面元素的样式
- 设置字体和颜色
- 设置位置和大小
- 添加动画效果
例如:这是一段CSS代码
h1{
color:white;
font-size: 14px;
}
它由几个部分组成:
- 选择器(Selector)
- 属性(property)
- 属性值(value)
- 声明(declaration)
2. 在页面中使用CSS
在页面中使用css可以有三种方法:外链(推荐)、嵌入、内联(不推荐)。
3.CSS是如何工作的?
4.选择器(Selector)
-
找出页面中的元素,以便给他们设置样式
-
使用多种方式选择元素
- 按照标签名、类名或id
- 按照属性
- 按照DOM树中的位置
5.伪类(pseudo-classes)
-
不基于标签和属性定位元素
-
几种伪类
- 状态伪类
- 结构性伪类
6.组合(Combinators)
| 名称 | 语法 | 说明 | 示例 |
|---|---|---|---|
| 直接组合 | AB | 满足A同时满足B | input : focus |
| 后代组合 | A B | 选中B,如果它是A的子孙 | nav a |
| 亲子组合 | A > B | 选中B,如果它是A的子元素 | section > p |
| 兄弟选择器 | A ~ B | 选中B,如果它在A后且和A同级 | h2 ~ p |
| 相邻选择器 | A + B | 选中B,如果它紧跟在A后面 | h2 + p |
7.其他属性
color(颜色)、font - family(字体)、font - size(字体大小)、 line - height(行高)
二、深入CSS(上)
1.选择器的特异度(Specificity)
| id | (伪)类 | 标签 | |
|---|---|---|---|
| #nav .list li a:link | 1 | 2 | 2 |
| .hd ul.links a | 0 | 2 | 2 |
2.继承
某些属性会自动继承其父元素的计算值,除非显式指定一个值
- 一般来说,与文字相关的属性是可以继承的
- 一般来说,与盒模型相关的属性是不可以继承的
显式继承 :inherit
3.初始值
-
CSS中,每个属性都有一个初始值
- background-color的初始值为transparent
- margin-left的初始值为0
-
可以使用initial关键字显式重置为初始值
- background-color:initial
4.CSS求值过程
5.布局(Layout)是什么?
- 确定内容的大小和位置的算法
- 依据元素、容器、兄弟节点积内容等信息来计算
6.宽度与高度
height
指定content box高度。
取值为长度、百分数、auto
auto取值由内容计算得来
百分数相对于容器的content box高度
容器有指定的高度时,百分数才生效
width
指定content box宽度
取值为长度、百分数、auto
auto由浏览器根据其它属性确定
百分数相对于容器的content box宽度
7.padding
- 指定元素四个方向的内边距
- 百分数相对于容器宽度
8.border
三种属性: border--width、border-style、border-color
四个方向: border-top、border-right、border-bottom、border-left
9.margin
- 指定元素四个方向的外边距
- 取值可以是长度、百分数、auto
- 百分数相对于容器宽度
10.overflow
visible:正常状态显示,溢出依旧显示
hidden : 溢出后隐藏
scroll:溢出后滚动
三、深入CSS(下)
1.行级与块级
| Block Level Box | Inline Level Box |
|---|---|
| 不和其它盒子并列摆放 | 和其它行级盒子一起放在一行或拆开成多行 |
| 适用所有的盒模型属性 | 盒模型中的width、height不适用 |
2.display属性
block: 块级盒子
inline: 行级盒子
inline-block: 本身是行级,可以放在行盒中;可以设置宽高;作为一个整体不会被拆散成多行
none: 排版时完全被忽略
3.常规流Normal Flow
- 根元素、浮动和绝对定位的元素会脱离常规流
- 其它元素都在常规流之内(in-flow)
- 常规流中的盒子,在某种排版上下文中参与布局
4.行级排版上下文
-
Inline Formatting Context (IFC)
-
只包含行级盒子的容器会创建一个IFC
-
IFC内的排版规则
- 盒子在一行内水平摆放
- 一行放不下时,换行显示
- text-align决定一行内盒子的水平对齐
- vertical-align决定一个盒子在行内的垂直对齐
- 避开浮动((float)元素
5.块级排版上下文
-
Block Formatting Context(BFC)
-
某些容器会创建一个BFC
- 根元素
- 浮动、绝对定位、inline-block
- Flex子项和Grid子项
- overflow值不是visible的块盒
- display:flow-root;
BFC内的排版规则
- 盒子从上到下摆放
- 垂直margin合并
- BFC内盒子的margin不会与外面的合并
- BF℃不会和浮动元素重叠
6.Flex Box是什么?
-
一种新的排版上下文
-
它可以控制子级盒子的:摆放的流向(→←↑↓)
- 摆放顺序
- 盒子宽度和高度
- 水平和垂直方向的对齐
- 是否允许折行
7.Flexibility
- 可以设置子项的弹性:当容器有剩余空间时,会伸展;容器空间不够时,会收缩。
- flex-grow有剩余空间时的伸展能力
- flex-shrink容器空间不足时收缩的能力
- flex-basis没有伸展或收缩时的基础长度
8.flex
| flex:1 | flex-grow:1 |
|---|---|
| flex:100px | flex-basis:100px |
| flex:2 1 | flex-grow:2;flex-shrink:1 |
| flex:1 100px | flex-grow:1;flex-basis:100px |
| flex:2 0 100px | flex-grow:2;flex-shrink:0;flex-basis:100px |
| flex:auto | flex:1 1 auto |
| flex:none | flex:0 0 auto |
9.display:grid
- display:grid使元素生成一个块级的Grid容器
- 使用grid-template相关属性将容器划分为网格
- 设置每一个子项占哪些行列
10.float
| position属性 | |
|---|---|
| static | 默认值,非定位元素 |
| relative | 相对自身原本位置偏移,不脱离文档流 |
| absolute | 绝对定位,相对非static祖先元素定位 |
| fixed | 相对于视口绝对定位 |
relative
- 在常规流里面布局
- 相对于自己本应该在的位置进行偏移
- 使用top、left、bottom、right设置偏移长度
- 流内其它元素当它没有偏移一样布局
absolute
- 脱离常规流
- 相对于最近的非static祖先定位
- 不会对流内元素布局造成影响
四、总结
-
充分利用好网络上的一些文档、视频,一定要把基础的知识学会、学好
-
保持好奇心,善用浏览器的开发工具。会用开发工具来调试也是一项必备的技能
-
持续学习,css的新特性还在不断的出现。