前端开发学习Web前端之路前端开发那些事

CSS居中完全指南

2017-02-27  本文已影响140人  细密画红

CSS 的居中问题是一个经常被抱怨的东西。为啥居个中要这么麻烦?我觉得可能问题不在于难,而在于每次一查,有各种各样的解决方案,你选了一个,能正常地居中了,但是心里又会在想:选这个是不是最好的呢?会不会有什么问题?

各种犹豫不决?那就来创建一个决策树吧!

水平居中

.center-children {
  text-align: center;
}
.center-me {
  margin: 0 auto;
}
.inline-block-center {
  text-align: center;
}
.inline-block-center div {
  display: inline-block;
  text-align: left;
}

如果使用flexbox,直接对父元素做如下设置即可:

.flex-center {
  display: flex;
  justify-content: center;
}

垂直居中

.link {
padding-top: 30px;
padding-bottom: 30px;
}
```

.center-text-trick {
  height: 100px;
  line-height: 100px;
  white-space: nowrap;
}
  1. 设置相同的padding-toppadding-bottom.
  2. 如果1不能使用,也许text所在的元素是一个table cell,可以使用 vertical-align来处理。也可以使用flexbox.
.center-table p {
  display: table-cell;
  margin: 0;
  background: black;
  color: white;
  padding: 20px;
  border: 10px solid white;
  vertical-align: middle;
}

.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
transform: translateY(-50%);
}

* 你可以使用flexbox吗?

.parent {
display: flex;
flex-direction: column;
justify-content: center;
}


#### 水平垂直居中
一般结合上面两个技巧就可以做到水平和垂直居中。不过也可以分成下面这三个阵营:
* 元素有固定的宽度和高度(设置absolute,50%,50%的值配合使用负的长度和宽度值可以很好地得到跨浏览器的支持)

.parent {
position: relative;
}
.child {
width: 300px;
height: 100px;
padding: 20px;
position: absolute;
top: 50%;
left: 50%;
margin: -70px 0 0 -170px;
}

* 元素没有固定的宽度和高度(在top和left上同时使用transform属性和负的translate百分数,注意这里的百分数是基于当前元素的)

.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

* 可以使用flexbox吗?注意两个方向上都要设置center

.parent {
display: flex;
justify-content: center;
align-items: center;
}


原文链接:https://css-tricks.com/centering-css-complete-guide/
上一篇下一篇

猜你喜欢

热点阅读