CSS知识总结3
目录
CSS 知识总结 3
啊还有定位,这篇CSS定位和动画一起总结下,然后贴一些做的小练习。
1. CSS定位
1.1. CSS的层叠顺序(由上到下):
内联子元素/文字:后面的文字盖后面>浮动元素:浮动里的文字与浮动同级>块级子元素>border>背景
背景:border外边沿围成的范围
1.2. position定位
- static:默认选项,在文档流中
- Relative:显示有偏移,实际位置不变
- 和top/left配合使用
- 和absolute结合使用,做absolute的爸爸
- 配合z-index
- 默认auto,计算出来是0,但不能写0
- 大的盖住小的
- Z-index管理
- Absolute
- 根据relative来定位
- 相对于祖先元素中,最近的一个定位元素,即不是static都是定位元素。
- 脱离原来场景
- 对话框关闭按钮,top:0;right:0;
- 鼠标提示,white-space:nowrap文字内容不换行
- 配合z-index
- 经验:
- Top/left都要写,否则有些浏览器会错乱
- 善用left:100%
- 善用left:50%+负margin
- 根据relative来定位
- Fixed
- 相对于适口定位:viewport
- 适口:能看到的区域
- 如果在所属的元素有特殊属性就不是相对适口
- transform:
- 使用场景
- 广告
- 回到顶部按钮
- 配合z-index
- 经验
- 手机上不要用
- 相对于适口定位:viewport
- Sticky
- 2019.9兼容性差
- 粘滞定位:快要看不见,就黏在这里,做导航
2. CSS层叠上下文
2.1. 层叠上下文顺序(由上到下):
- Zindex0及以上/除static都是0>内联子元素/文字>浮动元素:文字同级>块级子元素>border>背景>zindex->html元素
- 作用域
- 上述中的一级中,index
- 创建层叠上下文
- html元素
- zindex=值,不为auto
- position:fixed
- opacity<1:影响所有元素
- tranform
- Flex
- 负zindex不一定可以逃出div,因为可能有新的层叠上下文
3. CSS动画
3.1. CSS渲染:浏览器原理,chrome,微软,firefox
- 根据html构建html树:DOM
- 根据css构建css树,CSSOM
- 合并DOM和CSSOM,得到渲染树render tree(用户看到的)
- Layout布局(文档流,盒模型,计算大小,位置)
- Paint绘制(颜色、阴影)
- Composite合成(根据层叠关系)
3.2. 如何更新样式
- Js加样式
- div.style.background=‘red’
- Js直接加类
- div.classList.add
- 更新过程
- Js->style->layout>paint->composite
- div.remove,其他relayout
- Js->style->paint->composite未改layout
- 改背景颜色
- Js->style->composite:transform
- Js->style->layout>paint->composite
- 性能
- 更新过程决定性能
- https://csstriggers.com/
- blink 谷歌
- gecko ie
- webkit safari
- edgehtml Edge
- 高手不用left,因为性能差
- 用transform,不用repaint和payout,性能好
3.3. CSS动画优化
- js优化:requestAnimationFrame代替setTimeout或setInterval
- setTimeout(()=>{demo.remove()},1000)
- css优化:will-change或translate
3.4. CSS动画制作
3.4.1. transform动画
- 位移translate(transform:translate())
- Xy:translateX,translateY
- Z:需要有视点,perspective
- translate(x,y)
- translate3d(x,y,z)
- 百分号:为自己的宽度的百分比
- 用绝对定位居中
- top:50%
- left:50%
- tranform(-50%,-50%)
- 尺寸scale
- transform:scale(2,2);
- 用的少,因为容易模糊
- 旋转rotate
- 默认顺时针
- transform: rotate(180deg/0.5turn);沿着z轴旋转,即垂直平面
- rotateX,rotateY
- rotate3d
- 倾斜skew
- Xy轴偏移角度
- 变化时间transition
- Transition:all 1s;
- 用空格隔开即可,重复写transform会覆盖
- none
- 调试
- 点数字+shift+上/下:10个移动
- 点数字+option+上/下:0.1移动
3.5. transition动画过渡:
- 填充中间帧,补间动画
- transition: ;
-
- 淡入ease-in
- 淡出ease-out
- step-start
- 延迟
- 秒数
- 单位
- 秒s
- 毫秒ms
- 不能过渡
- display:none=>block
- 可见到不可见:visibility:visiable=>hiddne;
- 颜色可以
- 透明度,但不推荐
- #xxx=>#xxx.end
- 两次动画
- 先到b
- 再到c
- setTimeout.add()+div.classList.add
3.5.1. animation
- @keyframes 名字 + animation: 名字 时间
- 0%{transform:none;}
- 静帧:24%,73%{}
- 最后停止
- animation: 名字 时间 forwards
- Animation:时长|过度方式|延迟|次数|方向|填充模式|是否暂停|动画名;
- 方向:alternative交替,前后动画
- 填充模式:forwards
- 暂停:animationPlayState:running/pause
开心呀hhh礼物也都弄好了,不过感觉怎么也要9月才能送出去吧…今天重量又📉啦哈哈,然后虽然知道其实大概率没结果的,但就是决定要做。
最后提醒自己一下,以后博客还是不能拖,学完赶快写,不能一次写太多!!!