Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

常见水平居中和垂直居中方法 #5

Open
axuebin opened this issue Sep 8, 2017 · 0 comments
Open

常见水平居中和垂直居中方法 #5

axuebin opened this issue Sep 8, 2017 · 0 comments

Comments

@axuebin
Copy link
Owner

axuebin commented Sep 8, 2017

总结一下常见的水平居中和垂直居中的方法。


水平居中

行内元素的居中

对于行内元素,居中简直不要太容易,父级元素中设置一个text-align:center即可。

定宽块级元素的居中1

对于块级元素,如果知道它的宽度,居中起来也会很容易,比如这样:

<div class="horizontal">
  <div class="demo demo-2">
    <div class="demo-2-item">我是块级元素</div>
  </div>
</div>
.demo-2-item{
  width:200px;
  height:30px;
  background-color: lightblue;
  margin: 0 auto;
}

也就是设置了宽度之后,另它的margin-leftmargin-rightauto

定宽块级元素的居中2

定宽块级元素还能这样:

<div class="horizontal">
  <div class="demo demo-5">
    <div class="demo-5-item">我是要居中的那个</div>
  </div>
</div>
.demo-5-item{
  position:absolute;
  width:200px;
  left:50%;
  margin-left:-100px;
  background-color: lightblue;
}

将它设为绝对定位,然后用left:50%将元素的最左侧移到绝对定位的正中间,再利用margin-left:-100px将它向左移动100px,也就是宽度的一半,就正好将元素的中线和容器的中线对齐了,实现居中效果。

定宽块级元素的居中3

还有一种利用绝对定位的方式:

<div class="horizontal">
  <div class="demo demo-6">
    <div class="demo-6-item">我是要居中的那个</div>
  </div>
</div>
.demo-5-item{
  position:absolute;
  width:200px;
  left:0;
  right:0;
  margin:0 auto;
  background-color: lightblue;
}

left:0;right:0的作用

我们先看leftright两个属性,在绝对定位中,如果设置了top: 0; left: 0; bottom: 0; right: 0 ,浏览器为它包裹一层新的盒子,这个元素会填满它相对父元素的内部空间。

假如我只设置了left:0;right:0;也就是这样:

蓝色区域会充满整个父容器的宽度。

width:200px的作用

如果给元素设置了宽度,浏览器会阻止元素填满所有的空间。也就是这样:

margin:0 auto的作用

根据盒子的计算规则,如果宽度是固定的,将margin-leftmargin-right设为auto之后,这两个值会根绝父级元素的宽度自动计算除去元素的剩余宽度,然后均分,就实现了居中效果了。

flex

通过flex布局可以轻易实现居中,父级元素设置display: flex;justify-content: center;即可。

CSS3:transform

使用CSS3中新增的transform属性, 子元素设置:

position:absolute;
left:50%;
transform:translate(-50%,0);

grid

使用Grid来实现,父级元素设置:

display: grid;
grid-template-columns: 50px;
justify-content: center;

垂直居中

未完待续

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant