## 一、position 子元素已知宽度
- 父元素设置为:position: relative;
- 子元素设置为:position: absolute;
**要点:子元素距上50%,距左50%,外边距设置为自身宽高的一半**
```
<div class="parent">
<div class="child"></div>
</div>
.parent {
background: #f00;
width: 400px;
height: 400px;
position: relative;
}
.child {
background: #00f;
width: 200px;
height: 100px;
position: absolute;
left: 50%;
top: 50%;
margin: -50px 0 0 -100px;
}
```
## 二、position+transform 子元素已知宽度
- 父元素设置为:position: relative;
- 子元素设置为:position: absolute;
**要点:子元素添加 transform: translate(-50%,-50%);**
```
<div class="parent">
<div class="child"></div>
</div>
.parent {
background: #f00;
width: 400px;
height: 400px;
position: relative;
}
.child {
background: #00f;
width: 200px;
height: 100px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
}
```
## 三、flex布局
- 父元素可不设置宽高
- 子元素必须设置宽高
**要点:父元素添加 display: flex; justify-content: center; align-items: center;**
```
<div class="parent">
<div class="child"></div>
</div>
.parent {
background: #f00;
width: 400px;
height: 400px;
display: flex;
justify-content: center;
align-items: center;
}
.child {
background: #00f;
width: 200px;
height: 100px;
}
```
## 四、table-cell布局
- 外层元素设置为 display: table;
- 中间元素设置为 display: table-cell;
- 内层元素设置为 display: inline-block;
**要点:**
- **三层元素嵌套**
- **中间元素的table-cell相当于表格的td,td为行内元素,所以需要再嵌套一层**
- **内嵌元素必须设置 display: inline-block;**
- **中间元素table-cell的背景色会覆盖父元素的背景色**
```
<div class="box">
<div class="content">
<div class="inner"></div>
</div>
</div>
.box {
background: #f00;
width: 400px;
height: 400px;
display: table;
}
.content {
background: #00f;
display: table-cell;
vertical-align: middle;
text-align: center;
}
.inner {
background: #000;
display: inline-block;
width: 200px;
height: 100px;
}
```
- 前言
- 一、css垂直居中的几种实现方法
- 二、简单说一下盒模型,说下如何利用BFC解决外边距重叠的问题
- 三、说一说产生塌陷的原因以及清除浮动的几种方法
- 四、伪类和伪元素的区别?聊一下css选择器的优先级
- 五、css中的过渡和动画效果了解吗
- 六、弹性盒模型了解吗
- 七、简单说下BOM和DOM的区别
- 八、如何解决浏览器的兼容性问题?浏览器调优都用到过哪些方法
- 九、之前写过h5吗?有遇到过哪些兼容性问题?说下怎么解决的
- 十、h5是如何做移动端适配的?折行的时候如何实现不断行
- 十一、聊一聊js中实现数组拷贝的常用方法
- 十二、聊聊js中的数据类型,如何用js实现一个对象的深拷贝
- 十三、伪数组和数组的区别?相互转化的方法有哪些
- 十四、请介绍Js中有哪些循环遍历的方法,关于数组常用的方法有哪些
- 十五、js中的reduce了解吗?都用他解决过什么问题
- 十六、事件冒泡和捕获的执行顺序了解吗?什么是事件委托
- 十七、call和apply的区别是什么?caller和callee的区别有哪些
- 十八、javascript中的this都有哪些用法
- 十九、怎么理解js中的原型链?如何实现继承?实现继承常用的方式有哪些
- 二十、聊一聊js的作用域和作用域链
- 二十一、js的闭包了解吗?闭包的常见用法说一下
- 二十二、setTimeout和setInterval的运行机制了解吗
- 二十三、函数的柯里化了解吗?说下函数柯里化应用的场景
- 二十四、用js写一个ajax的原生实现方法
- 二十五、js如何实现跨域?聊一聊你之前用到过的方法
- 二十六、聊一下cookie、session和token三者的区别及使用
- 二十七、用js实现一下数组去重和排序,有哪些方法可以实现
- 二十八、写一个方法,统计一下html文档的元素包括元素的数量
- 二十九、用js实现一个省市级联效果
- 三十、用js实现一个轮播图效果,简单说下原理
- 三十一、请你实现一个大文件上传和断点续传
- 三十二、什么是模块化开发?谈下AMD、CMD、CommonJs和ES6的区别
- 三十三、es6了解吗?说几个常见的新特性,set和weakSet的区别是什么
- 三十四、解构赋值的用法了解吗?如何实现对象和数组的嵌套和重命名
- 三十五、谈谈你对promise的用法和理解
- 三十六、谈谈你对es6中的Generator函数的认识
- 三十七、谈一下async-await的实现原理
- 三十八、用js实现一下观察者模式?简单说一下原理
- 三十九、了解JavaScript中的装饰器吗?聊一下JS中的getter与setter的用法
- 四十、聊一下正则表达式里的常见用法