> For the complete documentation index, see [llms.txt](https://cfangxu-2.gitbook.io/front-end-basics/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cfangxu-2.gitbook.io/front-end-basics/css/bu-ju-pian/middle.md).

# 居中布局

[demo:水平垂直居中的展示页面](https://qiqihaobenben.github.io/layout/pages/middle)

## 子元素定宽高

### 1、absolute + margin负值

![absolute+margin负值](https://3718299485-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LcTskmYbpSp72sUbkut%2F-LcTslrY2pK4bG6rmO5I%2F-LcTspKRlb9hCE61_GPB%2F11.png?generation=1555296387729172\&alt=media)

```
.container {
    position: relative;
    margin: 0 auto;
    width: 600px;
    height: 400px;
    border: 2px solid #666;
}
.item {
    position: absolute;
    left: 50%;
    top: 50%;
    margin-left: -100px;
    margin-top: -100px;
    width: 200px;
    height: 200px;
    background-color: #8c7676;
}
```

### 2、absolute(left,right,top,bottom) + margin + width + height

![absolute(left,right,top,bottom) + margin + width + height](https://3718299485-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LcTskmYbpSp72sUbkut%2F-LcTslrY2pK4bG6rmO5I%2F-LcTspKTAmcR64ICvRfX%2F12.png?generation=1555296388211856\&alt=media)

```
.container {
    position: relative;
    margin: 0 auto;
    width: 600px;
    height: 400px;
    border: 2px solid #666;
}
.item {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
    width: 200px;
    height: 200px;
    background-color: #8c7676;
}
```

兼容性：主流浏览器均支持。 **注意：子元素必须为固定宽高**

## 子元素不定宽高

### 1、display:table-cell;

![display:table-cell;](https://3718299485-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LcTskmYbpSp72sUbkut%2F-LcTslrY2pK4bG6rmO5I%2F-LcTspKVv-4Cw3E3d74n%2F13.png?generation=1555296388223922\&alt=media)

```
.container {
    display: table-cell;
    text-align: center;
    vertical-align: middle;
    margin: 0 auto;/*margin在table-cell下已经不起用了*/
    width: 600px;
    height: 400px;
    border: 2px solid #666;
}
.item {
    display: inline-block;
    padding: 100px; /*用padding来撑开元素，没有设置宽高*/
    background-color: #8c7676;
}
```

兼容性：由于display:table-cell的原因，IE6\7不兼容。

**注意：无论父元素还是子元素都不能浮动，如果父元素浮动，元素就只能水平居中，如果子元素浮动，则子元素按照浮动的方向走。**

### 2、absolute + transform

![absolute + transform](https://3718299485-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LcTskmYbpSp72sUbkut%2F-LcTslrY2pK4bG6rmO5I%2F-LcTspKXWrSGyBUEr2xq%2F14.png?generation=1555296387245798\&alt=media)

```
.container {
    position: relative;
    margin: 0 auto;
    width: 600px;
    height: 400px;
    border: 2px solid #666;
}
.item {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
    padding: 100px;/*用padding来撑开元素，没有设置宽高*/
    background-color: #8c7676;
}
```

兼容性：浏览器必须支持transform。

### 3、display: flex;

![display: flex;](https://3718299485-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LcTskmYbpSp72sUbkut%2F-LcTslrY2pK4bG6rmO5I%2F-LcTspKZ16351cauw9Gj%2F15.png?generation=1555296377381900\&alt=media)

```
.container {
    display: flex;
    justify-content: center;
    align-items: center;
    margin: 0 auto;
    width: 600px;
    height: 400px;
    border: 2px solid #666;
}
.item {
    display: inline-block;
    padding: 100px;/*用padding来撑开元素，没有设置宽高*/
    background-color: #8c7676;
}
```

兼容性：浏览器必须支持flex。

### 4、text-align:center;vertical-align:middle;

![text-align:center;vertical-align:middle;](https://3718299485-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LcTskmYbpSp72sUbkut%2F-LcTslrY2pK4bG6rmO5I%2F-LcTspKaQnxDpW0V7kPb%2F16.png?generation=1555296386707773\&alt=media)

```
.container {
    text-align: center;
    font-size: 0;
    margin: 0 auto;
    width: 600px;
    height: 400px;
    border: 2px solid #666;
}
.container::before {
    display: inline-block;
    content: '';
    width: 0;
    height: 100%;
    vertical-align: middle;
}
.item {
    display: inline-block;
    vertical-align: middle;
    padding: 100px;/*用padding撑开元素，没有设置宽高*/
    font-size: 12px;/*重新设置子元素内的字体大小*/
    background-color: #8c7676;
}
```

兼容性：主流浏览器均支持。 **注意：子元素必须要是inline-block或者inline的元素，并且子元素不能绝对定位和浮动。**

### 5、calc

![calc](https://3718299485-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LcTskmYbpSp72sUbkut%2F-LcTslrY2pK4bG6rmO5I%2F-LcTspKcjtlAfKD2oTz-%2F17.png?generation=1555296388048513\&alt=media)

```
.container {
    position: relative;
    margin: 0 auto;
    width: 600px;
    height: 400px;
    border: 2px solid #666;
}

.item {
    position: absolute;
    left: calc(50% - 200px / 2);
    top: calc(50% - 200px / 2);
    width: 200px;
    height: 200px;
    background-color: #8c7676;
}
```

兼容性：浏览器必须支持calc。

### 6、grid

TODO 待补充……

### 推荐资源

* [CSS元素水平垂直居中方法总结](http://www.cnblogs.com/Dudy/p/4085292.html)

  里面还有关于背景图的居中和兼容低版本浏览器的写法
