## 一、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的用法
- 四十、聊一下正則表達式里的常見用法