1. 对盒子模型的理解
- 定义:css基本盒子模型是css规范的模块,它定义的长方形的盒子
- 分类:盒模型按照标准定义分为标准盒模型和IE盒模型,按照元素类型分为块级盒模型和内联盒模型
- 使用:按照标准切换模型:
box-sizing: border-box;
或者box-sizing: context-box;
按照元素切换盒模型:display: block;
或者display: inline;
或者display: iinline-block
- 应用:盒模型有padding,border,margin属性;padding和margin设置的值沿着顺时针方向等
2. 对BFC的理解
- 定义:BFC是块格式化上下文,代表一个独立的空间, 这个空间子元素的渲染不会影响外部布局
- 创建BFC:
display: inline-block;
display: table-cell;
display: flex;
position: absolute;
position: fixed;
overflow: hidden
- 作用:
- 解决了垂直方向margin合并的问题
- 解决了设置float脱离文档流, 父元素高度塌陷问题
3. 对css选择器的理解
- 定义: css选择器是用来对选定页面元素进行样式修改的
- 种类:
- 标签选择器
- 通配符选择器
- 类选择器
- ID选择器
- 标签属性选择器
- 伪类选择器
- 伪元素选择器
- 后代选择器
- 子代选择器
- 兄弟相邻选择器
- 通用兄弟选择器
4. 对css选择器的优先级的理解
- 定义: css选择器优先级是对于不同种类选择器组成的匹配规则
- 优先级: !important > 行内样式 > ID选择器 > 类、伪类、属性选择器 > 标签、伪元素选择器 > 通配符、子类选择器、兄弟选择器
5. 对css属性继承的理解
- 定义: css继承指的是父元素设置的属性样式等, 子元素同时拥有该属性和样式
- 可继承属性:
- 字体:font、font-family、font-size、font-style、font-variant、font-weight
- 字母间距:letter-spacing
- 文字展示:line-height、text-align、text-indext、text-transform
- 字间距:word-spacing
- 可见性: visibility
6. 对px/em/rem/vw/vh的理解
- 定义:
- px: 绝对单位,像素, 基本长度单位
- em: 相对单位,相对当前元素文本的字体大小
- rem: 相对单位,基于html元素字体大小
- vw: 相对单位,相对浏览器的视口宽度单位(1vw代表视口宽度的1%)
- vh:相对单位,相对于浏览器的视口高度单位(1vh代表视口高度的1%)
7. 实现左边定宽,右边自适应
- flex布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .A { width: 600px; height: 600px; border: 1px solid #000; display: flex; } .left { width: 200px; background-color: pink; } .right { flex: 1; background-color: red; } </style> </head> <body> <div class="A"> <div class="left">left</div> <div class="right">right</div> </div> </body> </html>
- table布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .A { width: 600px; height: 600px; border: 1px solid #000; display: table; } .left { width: 200px; background-color: pink; display: table-cell; } .right { display: table-cell; background-color: red; } </style> </head> <body> <div class="A"> <div class="left">left</div> <div class="right">right</div> </div> </body> </html>
- grid布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .A { width: 600px; height: 600px; border: 1px solid #000; display: grid; grid-template-columns: 200px auto; } .left { background-color: pink; } .right { background-color: red; } </style> </head> <body> <div class="A"> <div class="left">left</div> <div class="right">right</div> </div> </body> </html>
8. 实现绝对居中
- 定宽高
绝对定位 + 负margin值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .A { width: 500px; height: 500px; border: 1px solid #000; position: relative; } .box { width: 100px; height: 100px; position: absolute; top: 50%; left: 50%; background-color: pink; margin-left: -50px; margin-top: -50px; } </style> </head> <body> <div class="A"> <div class="box"></div> </div> </body> </html>
绝对定位 + margin auto
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .A { width: 500px; height: 500px; border: 1px solid #000; position: relative; } .box { width: 100px; height: 100px; position: absolute; top: 0; left: 0; bottom: 0; right: 0; background-color: pink; margin: auto; } </style> </head> <body> <div class="A"> <div class="box"></div> </div> </body> </html>
- 不定宽高
绝对定位 + transform
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .A { width: 500px; height: 500px; border: 1px solid #000; position: relative; } .box { position: absolute; background-color: pink; left: 50%; top: 50%; transform: translate(-50%, -50%); } </style> </head> <body> <div class="A"> <div class="box">position + transform</div> </div> </body> </html>
table-cell
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .A { width: 500px; height: 500px; border: 1px solid #000; display: table-cell; vertical-align: middle; text-align: center; } .box { background-color: pink; display: inline-block; } </style> </head> <body> <div class="A"> <div class="box">table-cell</div> </div> </body> </html>
flex布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .A { width: 500px; height: 500px; border: 1px solid #000; display: flex; justify-content: center; align-items: center; } .box { background-color: pink; } </style> </head> <body> <div class="A"> <div class="box">flex布局</div> </div> </body> </html>
9. 清除浮动方式
例如外部div没有设置高度, 但是内部元素设置了浮动, 这时候会导致外部div塌陷, 这时候就需要清除浮动
方式:
* 1. 父元素设置固定宽高 * 优点:简单, 代码量少, 没有兼容问题 * 缺点: 内部元素高度不确定时不能使用 * 2. 内部添加新元素,并添加`clear: both;` * 优点: 简单, 代码量少,没有兼容问题 * 缺点: 无语义, 不利于后期维护 * 3. 使用伪元素 * 优点: 仅用css实现, 不容易出错 * 缺点: 仅支持IE8以上和非IE浏览器 * 4. 触发父元素BFC * 优点: 仅使用css实现, 代码少, 浏览器支持好 * 缺点: 用overflow: hidden触发可能会使内部元素被裁剪
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .A { width: 100px; /* 方式一 */ /* height: 20px; */ padding: 10px; border: 1px solid red; /* 方法四 */ /* overflow: hidden; */ } .left { float: left; } .right { float: right; } /* 方法三 */ /* .A::after { content: ''; display: block; clear: both; height: 0; } */ /* 方式二 */ /* .else { clear: both; } */ </style> </head> <body> <div class="A"> <div class="left">左边</div> <div class="right">右边</div> <!-- 方式2 --> <!-- <div class="else"></div> --> </div> </body> </html>
10. css画三角形
处于页面性能考虑,为避免发送过多的http请求,节省带宽,我们可能需要使用css手动绘制各种图案
- 对于实现三角形,我们可以利用border属性来实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .A { width: 0; /* height: 0; */ border: 20px solid transparent; border-left: 20px solid red; } </style> </head> <body> <div class="A"> </div> </body> </html>
11. css提高页面性能
- 属性设置使用简写(例:margin值)
- 目的:减小生产包体积
- 用css替换图片
- 目的:减少http请求节约带宽
- 删除不必要的零和单位
- 目的:减小生产包体积
- 用css精灵图代替单个文件加载
- 目的:减少http请求节约带宽