简介
CSS 知识点
CSS3说明
- CSS3使用时一般带有私有前缀,对应关系如下
-webkit-
对应Safari and Chrome
-moz-
对应Firefox
-o-
对应Opera
-ms-
对应Internet Explorer
BFC
字体
- 导出Excel使用
Arial Unicode MS
字体,打印出来较美观
table样式
1 | /* 设置表格第一列无边框 */ |
响应式
弹性盒子模型(Flexible Box Model)
display: box;
- 作用于父元素上
display: box;
只有父元素声明了使用box模型,子元素才能使用box-flex属性box-orient
用来确定子元素的方向,是横着排还是竖着排。horizontal | inline-axis | inherit:横排;vertical | block-axis:竖排box-direction
用来确定子元素的排列顺序。normal | inherit:普通;reverse:反转(原本dom应该从左到右是1-2-3的,此时结果显示为3-2-1)box-align
用来决定盒子垂直方向上的空间利用(同vertical-align一起记忆)。start(垂直方式则是向顶部对齐) | end | center | baseline(基线对齐,文字底边线) | stretch(默认值,拉伸)box-pack
用来决定盒子水平方向上的空间利用。start(水平方向则是向左对齐) | end | center | justify(两端对齐)box-lines
貌似暂不支持box-flex-group
貌似暂不支持box-ordinal-group
定义一个数字级别的,决定了显示位置,越小显示越靠前。也可基于此属性实现 box-direction: reverse 的效果
- 作用于子元素上
box-flex: 2;
子元素占用宽度比例,此时只占用2份。如果其他子元素有定义width、margin值,则优先分配width、margin宽度
- 示例
1 | /* 只有父元素声明了使用box模型,子元素才能使用 box-flex 属性 */ |
Flex布局
- 参考
display: flex;
开启flex布局- 作用在flex容器上
flex-direction
用来控制子项整体布局方向- row(默认从左到右) | column(默认从上到下) | row-reverse | column-reverse
flex-wrap
用来控制子项整体单行显示还是换行显示,如果换行,则下面一行是否反方向显示- nowrap | wrap(宽度不足换行显示) | wrap-reverse(宽度不足换行显示,但是是从下往上开始,也就是原本换行在下面的子项现在跑到上面)
flex-flow
是flex-direction和flex-wrap的缩写,如: flex-flow: row-reverse wrap-reverse;justify-content
决定了水平方向子项的对齐和分布方式- flex-start | flex-end | center(水平居中) | space-between(两端对齐) | space-around | space-evenly
- CSS的text-align有个属性值为justify,可实现两端对齐,可联合记忆
align-items
决定了垂直方向子项的对齐和分布方式,指的就是flex子项们相对于flex容器在垂直方向上的对齐方式- stretch(类似于flex-start) | flex-start(顶部对齐) | flex-end(底部对齐) | center | baseline(类似于flex-end)
align-content
(只适用多行的flex容器)垂直方向每一行flex元素的对齐和分布方式,可以看成和justify-content是相似且对立的属性。和align-items区别参考:https://blog.csdn.net/cc18868876837/article/details/88138057
- 作用在flex子项上
order
改变某一个flex子项的排序位置flex-grow
扩展比例:默认值是0,表示不占用剩余的空白间隙;0-1表示占据的百分比(大于等于1表示全部占据);如果多个子元素设置了此属性则其和表示占据空隙的比例,然后按照各自的比例进行分配占据的空隙flex-shrink
收缩比例:主要处理当flex容器空间不足时候,单个元素的收缩比例;类似grow,0-1表示收缩比例(大于等于1表示收缩完全,正好填满flex容器)flex-basis
定义了在分配剩余空间之前元素的默认大小,默认是auto,其值可以是像素或百分比flex
flex-grow flex-shrink flex-basis 的组合;flex: 1;
等价于flex: 1 1 0%;
align-self
@media
- 用
min-width
时,小的放上面大的在下面,同理如果是用max-width
那么就是大的在上面
1 | @media (min-width: 768px) { |
cacl计算
- 需要注意的是,运算符前后都需要保留一个空格
- 支持+、-、*、/
1 | .box { |
vm/rpx/rem
SVG
- SVG文档
- loading图片案例(最终是一个灰色的圆环加载图片)
1 | <!-- svg根节点 |
常用CSS
- 响应式布局,head中加
<meta name="viewport" content="width=device-width,initialscale=1.0,maximum-scale=1.0,user-scalable=0">
- 解决iPhone中 overflow:scroll; 滑动速度慢或者卡的问题:
-webkit-overflow-scrolling : touch;
虚线
1 | /* 水平虚线 */ |
文字省略/换行/缩放/删除线
1 | /* 单行缩略(部分浏览器需要设置宽度) */ |
滚动条样式
1 | .box::-webkit-scrollbar { |
- 隐藏滚动条(但是可以滚动)
1 | #box { |
渐变色
1 | div { |
图片
- 图片阴影
1 | -webkit-filter: drop-shadow(10px 20px 20px rgba(0, 0, 0, 0.5)); |
- 显示原型图片(需要原图为正方形)
1 | border-radius: 50%; |
箭头动画(纯css)
1 | /* 箭头特效。向上箭头使用:<div class="sq-arrow sq-arrow_top"></div> */ |
吸附效果(头部/底部导航)
- position: sticky
1 | .sticky { |
- position: fixed
1 | .top { |
body背景图片平铺
1 | body{ |
通过HTML转义字符完成部分简单图标
CSS实现文字横向滚动
子元素高度撑满剩余高度
1 | /* 一: 需要设置所有父元素高度 */ |
常见问题
height: 100%; 无效 ^2
- width和height属性,基于%设定宽高时,实际是根据父元素的宽高来的
- 如果父元素没有设置高度,那么这个方法就无效。所以,一般需要将所有父元素的高度都设置为100%
html, body, .box {height: 100%;}
overflow: auto; 无效
盒子内容溢出将在满足下列条件之一时出现
- 一个不换行的行元素宽度超出了容器盒子宽度
- 一个宽度固定的块元素放在了比它窄的容器盒子内
- 一个元素的高度超出了容器盒子的高度
- 一个子孙元素,由负边距值引起的部分内容在盒子外部
- text-indent属性引起的行内元素在盒子的左右边界外
- 一个绝对定位的子孙元素,部分内容在盒子外,但超出的部分不会被剪裁(overflow: hidden;)
子元素使用float导致父元素没有高度
1 | /* 参考 https://www.jianshu.com/p/a1724eeb07a6 */ |
z-index 失效
- 使用
- z-index元素的position属性要是relative,absolute或是fixed
- z-index值越大就越是在上层
- z-index在一定的情况下会失效
- 父元素position为relative时,子元素的z-index失效
- 将父元素position改为absolute或static
- 该标签在设置z-index的同时还设置了float浮动
- float去除,改为display:inline-block
- 父元素position为relative时,子元素的z-index失效
父元素的高度无缘无故增加
- 在父元素上使用 flex 布局可解决:
display: flex;
绝对定位水平对齐
1 | div { |
最后一个元素撑满当前行
1 | .parent { |
CSS框架
30-seconds-of-css
- https://github.com/30-seconds/30-seconds-of-css
- CSS 片段集合
- 包含 CSS3 的实用程序和交互式示例
- 它包括用于创建常用布局、样式和动画元素的现代技术,以及用于处理用户交互的片段
TailwindCSS
- Github 69.2k
- 中文站
- 原子风格:所有样式都基于 class,只需为 HTML 元素指定class,样式立刻生效
- 比bulma更原子化
- 它集成了诸如 flex, pt-4, text-center 和 rotate-90 这样的的类
bulma
- Github 47.2k
- 原子风格
- 没有默认的js效果
daisyui
- Github 21.9k
- 原子风格
- 内涵21种主题配色
animate.css
- https://github.com/animate-css/animate.css
- 跨平台的CSS3动画库
postcss
- https://github.com/postcss/postcss
- 用 JavaScript 工具和插件转换 CSS 代码的工具
emotion
- https://github.com/emotion-js/emotion
- 用 JavaScript 编写 css 样式的库,CSS-in-JS
styled-components
- https://github.com/styled-components/styled-components
- 贯彻 React 的 everything in JS 理念,降低 js 对 css 文件的依赖
性能优化
- 使用
img
图片比元素使用background(url)
快