CSS基础
学习资源
- mdn
- 张鑫旭 www.zhangxinxu.com/wordpress/c…
- css-tricks css-tricks.com/snippets/cs…
- CSS spec中文版 www.ayqy.net/doc/css2-1/…
层叠样式表
- 样式层叠
- 选择器层叠
- 文件层叠
语法
样式语法
选择器 {
属性名:属性值
/* 注释 */
}
at语法
常用的有以下3种,前两行必须分号结尾
@charset "UTF-8"; /*charset字符集Unicode,字符编码UTF-8*/
@import url("style.css");
@media (min-width: 100px) and (max-width:300px){
语法1
}
文档流
规定文档元素的流动方向,分为inline, block, inline-block
宽度
- inline:内部inline元素的和,不能用width指定
- block默认自动计算宽度(width:auto),可以width指定
- inline-block结合前两者特点,默认和inline一样,但可用width指定,不会跨行
高度
- 示例代码
- inline由line-height间接确定,跟height无关
- block高度由内部文档流元素决定,可以设置height
- inline-block跟block类似,可以设置height
📌注意
- 过时观点:元素分为块级和内联元素。可以用display指定
- inline元素内部不能有block
- width: 100%不等同于auto
溢出overflow
- visible 默认,可见
- hidden 隐藏
- scroll 永远显示滚动条
- auto 超出才显示滚动条
📌注意
- 如果div内部没有内容,高度为0;span则不同,即使没有内容也会占据高度
- 示例代码中横向滚动条是第二个div设置宽度大于父容器造成,但父容器内部文字依旧遵循原来的宽度
脱离文档流
3种方式
- float
- position: absolute
- position: fixed
盒模型
- 从外到内:margin, border, padding, content
- content box:width只包含内容宽度
- border box:width包含border, padding, content ✅
margin合并
- 兄弟元素margin合并
- 父子元素margin合并
布局
float
兼容IE,不用于手机端
实现
子元素加float并设置width,父元素加上.clearfix
.clearfix::after {
content: '';
display: block;
clear: both;
}
实践
用float实现两栏布局,三栏布局,平均布局(负margin) 代码
flex
A Complete Guide to Flexbox | CSS-Tricks
container的属性
dispaly, flex-direction, flex-wrap, justify-content, align-items, align-content
item的属性
order, flex-grow, flex-shrink, flex-basis, flex, align-self
实践
用flex实现两栏布局,三栏布局,平均布局(负margin)代码
grid
A Complete Guide to CSS Grid | CSS-Tricks
container的属性
- display:grid / inline-grid
- grid-template-columns,grid-template-rows 代码
- grid-gap grid-column-gap grid-row-gap 设置item间隙 代码
- grid-template-areas 代码
item的属性
- 范围 grid-[column|row]-[start|end]
- 区域 grid-area
实践
实现7张大中小图片展示 代码
定位
position
relative
相对定位,升起来但不脱离文档流
absolute
脱离原来的位置,另起一层
不是相对于relative定位,相对于祖先元素中最近的一个定位元素(position不是static)
fixed
相对于视口
手机上尽量不要用这个属性
z-index层叠上下文
- 每个层叠上下文就是一个新的小世界,这个小世界里面的z-index和外界无关,处在同一个小世界的z-index才能比较
- 哪些属性会创建层叠上下文 层叠上下文 - CSS(层叠样式表) | MDN
- 负z-index与层叠上下文 代码
动画
1. 浏览器渲染过程
- 根据HTML文档构建HTML树
- 根据CSS构建CSSOM
- 两棵树合并成一棵渲染树render tree
- 布局 Layout (文档流,盒模型,计算元素的大小和位置)
- 绘制 Paint (边框颜色,文字颜色,阴影等)
- 合成 Compose (根据层叠关系展示画面)
更新样式
- div.style.xxx = 属性值
- classList添加样式 —— 推荐使用 ✔️
- div.remove()
更新样式会触发的流程
查询 www.lmame-geek.com/css-trigger…
- div.remove()
- 改变背景色
- transform
CSS动画优化
JS:requestAnimationFrame代替setTimeout或setInterval
CSS:使用will-change或translate
2. transform
developer.mozilla.org/en-US/docs/…
transform: none | transform-function
2.1 translate
developer.mozilla.org/en-US/docs/…
translateX(<length-percentage>) 指length和percentage两种
translateY(<length-percentage>)
translate(<length-percentage>, <length-percentage>) ?表示可选
translateZ(<length>)
实现垂直水平居中 codepen.io/AmberWANGDM…
2.2 scale
developer.mozilla.org/en-US/docs/…
scaleX(<number>)
scaleY(<number>)
scale(<number>, <number>?)
2.3 rotate
developer.mozilla.org/en-US/docs/…
rotate(<angle>)
rotateZ(<angle>)
rotateX(<angle>) 绕X轴旋转,视觉上好像扁了
rotateY(<angle>)
rotate3d
2.4 skew
skewX(<angle>)
skewY(<angle>)
skew(<angle>, <angle>?)
3. transition
补充中间帧
语法
transition: 属性名 | 时长 | 过渡方式 | 延迟
过渡方式参考 developer.mozilla.org/en-US/docs/…
注意
- 最好不要写在hover里
- 不是所有属性都能过渡,如display
- display和visibility的区别:visibility可以实现过渡,但是设置为hidden元素依然占据位置
- 过渡必须有起始,可能有中间点 代码
4. animation
developer.mozilla.org/zh-CN/docs/…
语法
animation: 时长|过渡方式|延迟|次数|方向|填充模式|是否暂停|动画名
@keyframes 动画名 { 百分比 {} | from {} to {}}
CSS学习总结
-
属性很多,以下知识点需要经常复习
- 文档流
- flex
- 层叠上下文z-index
- 浏览器渲染过程
-
随用随查 keywords + mdn