CSS学习笔记
CSS学习笔记
CSS-Cascading Style Sheets
目前使用最广泛的是CSS2.1,现代版本为CSS3,仍在分模块升级种。
border调试法
不加border就不要写代码!
文档流 Normal Flow
文档流动方向,从左至右,从上至下。
流动方向
inline元素从左往右,到达最右边换行;
block元素从上往下,每个block元素独占一行;
inline-block元素从左往右。
宽度
inline元素宽度不可用width指定,为内部inline元素的和;
block元素宽度可用width指定;
inline-block元素兼具两者特点,我的理解是具有block属性但是像inline元素一样不必独占一行的元素。
高度
inline高度由line-height间接确定;
block可以用height指定;
inline-block可以用height指定。
overflow 溢出
可设置是否显示滚动条。
overflow:auto | scroll | hidden | visible
脱离文档流
float 和 position:absolute/fixed 可使元素脱离文档流
盒模型
CSS盒模型将CSS中的元素整体视为一个盒子BOX,这个box由四个部分构成:
-
margin
-
border
-
padding
-
content
CSS盒模型分两种
-
content-box
-
border-box
区别
区别主要在于width(或height)包含的范围。
-
content-box:
width
只控制content
部分的width
-
border-box:
width
控制border+padding+content
三部分的width
由区别可知,若未指定border
和padding
,则两种盒模型并无区别。
通常情况下我们都会使用border-box
因为该盒模型更好用。
因为margin
会合并,对元素大小的影响比较小,而border
和padding
的大小已经包含在width
中,因此border-box
能够更直观的控制元素的大小,同时更符合border调试法的使用习惯。
margin合并
父子margin合并,兄弟margin合并
阻止合并的方法:
-
父子合并: padding/border
-
父子合并: overflow: hidden
-
父子合并: display: flex
-
兄弟合并: inline-block
布局
布局指二维平面的布局,注意与“定位”做区分。
float布局
主要用于IE,现在用的很少
步骤:
-
子元素加上float: left | right
-
子元素加上width
-
父元素的class中加入.clearfix
.clearfix代码
1 |
|
IE 6/7 存在双倍margin bug,解决方法如下:
-
margin减半
-
display:inline-block
flex布局
主流布局
需要记住的代码:
1 |
|
grid布局
无敌强大面向未来,有兼容性问题
适合不规则布局
默认将页面分为了3行5列的表格,通过行线和竖线来定位区域
定位
垂直于屏幕
div的分层
-
inline 元素
-
float 元素
-
块级子元素
-
border
-
background
position属性
1 |
|
写了absolute要补relative
写了absolute或fixed要补top和left
sticky兼容性很差,比如在缩放时会有bug
z-index
1 |
|
1 |
|
层叠上下文
每个层叠上下文是一个新的作用域,该作用域内的z-index与外界无关,同一个作用域内的z-index才能比较
z-index / flex / opacity / transform 会创建一个新的层叠上下文
CSS动画
浏览器渲染过程
-
根据HTML构建HTML树 (DOM)
-
根据CSS构建CSS树(CSSOM)
-
将两棵树合并成一颗渲染树(render tree)
-
Layout
-
Paint
-
Composite
三种更新方式
-
JS/CSS > Style > Layout > Paint > Composite
-
JS/CSS > Style > Paint > Composite
-
JS/CSS > Style > Composite
div.remove() 触发第一种更新方式
改变背景颜色 触发第二种更新方式
transform 触发第三种更新方式
transform
常用代码:
-
transform: translate ()
-
transform: scale ()
-
transform: rotate ()
-
transform: skew ()
配合transition使用:
transition: all 1s ease 0.5s;
transition
给动画补充中间帧
transition:属性名 时长 过渡方式 延迟
animation
步骤:
-
声明关键帧
-
添加动画
1 |
|
1 |
|