这是我参与「第四届青训营」笔记创作活动的第7天」
CSS是什么?有什么用?有哪些基本内容?
- Cascading Style Sheets
- 用来定义页面元素的样式
- 设置字体和颜色
- 设置位置和大小
- 添加动画效果
如在在页面中使用CSS(三种方式)
CSS是如何工作的
选择器 Selector:
- 用于找出页面中的元素,以便给他们设置样式
- 使用多种方式选择元素
- 按照标签名、类名或id
- 按照属性
- 按照DOM树中的位置
注意: 样式优先级比较时,需要同层级比较,不能仅凭上图CSS权重直接相加进行比较。
小知识:MarkDown中也可以使用HTML表格语法,相比之下,使用HTML语法可以实现更多的样式。
一些基本的CSS属性
日常开发中,最常使用的color属性值模型是 RGB ,RGB的代码表示方法中,括号中的三个数分别表示红、绿、蓝中每一种的一个数量,这个数量是从0到255,但是用十六进制去表示,通过三原色的这些数值来混合,得到我们希望的颜色。
但十六进制的表示方式对我们而言不够直观,不够符合直觉,我们没法将数值和颜色关联起来,直接判断。HSL模型就是一个在这方面的改进。它通过把我们颜色的三方面的属性,单独领出来形成一个颜色,即下图。
「HSL的好处在于,相比于RGB,可读性会更好一些。」
补充:写CSS属性时,RGB的表达函数:rgb(x,x,x)或rgba(x,x,x,x)这的a表示开启alpha通达,比使用rgb函数时多一个参数,这个参数表示透明度,值范围为 :0~1。
深入理解CSS
理解继承
某些属性会自动继承其父元素的计算值,除非显示指定一个值。
inherit表示显式地从父级继承,可以让一个原来不能继承的变成可继承。
初始值
- CSS中,每个属性都有一个初始值
- 可以使用initial关键字显式重置为初始值
- background-color:initial
CSS的求值过程
值得了解:这是理解CSS样式优先级计算的一个关键
布局
布局是什么
- 确定内容的大小和位置的算法
- 依据元素、容器、兄弟节点和内容等信息来计算
布局相关技术
- 常规流
- 行级
- 块级
- 表格布局
- FlexBox
- Grid布局
- 浮动
- 绝对定位
标准盒模型
width
- 指定content box 宽度
- 取值为长度、百分、auto
- auto由浏览器根据其它属性确定
- 百分数相对于容器的content box 宽度
height
- 指定content box 高度
- 取值为长度、百分数、auto
- auto取值由内容计算的来
- 百分数相对于容器的content box 高度
- 容器有指定的高度时,百分数才生效
padding
- 指定元素四个方向的内边距
- 百分数相对于容器宽度
border
- 指定容器边框样式、粗细和颜色
margin
- 指定元素四个方向的外边距
- 取值可以是长度、百分数、auto
- 百分数相对于容器宽度
块级与行级
display
- block 块级盒子
- inline 行级盒子
- inline-block 本身是行级,可以放在行级盒子中;可以设置宽高;作为一个整体,不会被拆散成多行
- none 排版时完全被忽略
常规流 Normal Flow
- 根元素、浮动和绝对定位的元素会脱离常规流
- 其他元素都在常规流之内(in-flow)
- 常规流中的盒子,在某种排版上下文中参与布局
- 行级排版上下文
- 块级排版上下文
- Table排版上下文
- Flex排版上下文
- Grid排版上下文
行级排版上下文
- inline Formatting Context(IFC)
- 只包含行级盒子的容器会创建一个IFC
- IFC内的排版规则
- 盒子在一行内水平摆放
- 一行放不下时,换行显示
- text-align 决定一行内盒子的水平对齐
- vertical- align 决定一个何在在行内的垂直对齐
- 避开浮动(float)元素
块级排版上下文
- Block Formatting Context(BFC)
- 某些容器会创建一个BFC
- 根元素
- 浮动、绝对定位、inline-block
- Flex子项和Grid子项
- overflow值不是visible的块级盒子
- display: flow-root;
BFC内的排版规则
- 盒子从上到下排列
- 垂直margin合并
- BFC内盒子的margin不会与外面的合并
- BFC不会和浮动元素重叠
Flex Box是什么
- 一种新的排版上下文
- 它可以控制子集盒子
- 摆放的流向
- 摆放顺序
- 盒子宽度和高度
- 水平和垂直方向的对齐
- 是否允许拆行
position:
- relative: 在文档流中布局,相对于自己本来的位置进行偏移,使用top、left等进行偏移,不受流内其他元素的影响。
- absolute:脱离文档流,相对于最近的非static祖先定位,不会对流内元素布局造成影响。
- fixed:脱离文档流,位置总是相对于视口固定
- sticky:粘性布局,元素首先会被相对定位,直到在视口中遇到给定的偏移值为止,之后固定在适合的位置。