查看: 359|回复: 0

[DIV/CSS] 讨论CSS中的各类居中方式

发表于 2017-11-30 08:00:01
句号论坛

今天主要谈一谈CSS中的各种居中的办法。
首先是水平居中,最简单的办法当然就是

代码如下:margin:0 auto;

也就是将margin-left和margin-right属性设置为auto,从而达到水平居中的效果。

那么其他的办法呢?容我一一道来:

line-height

首先介绍文字的水平居中方法:

代码如下:

刘放

利用line-height设为height的一样即可:

代码如下:.wrap{
line-height: 200px;/*垂直居中关键*/
text-align:center;

height: 200px;
font-size: 36px;
background-color: #ccc;
}

效果如下:

padding填充

利用padding和background-clip配合实现div的水平垂直居中:

代码如下:



通过backgroun-clip设置为content-box,将背景裁剪到内容区外沿,再利用padding设为外div减去内div的差的一半,来实现:

  1. .parent{
  2. margin:0 auto;
  3. width:200px;
  4. height:200px;
  5. background-color:red;
  6. }
  7. .children {
  8. width: 100px;
  9. height: 100px;
  10. padding: 50px;
  11. background-color: black;
  12. background-clip:content-box;/*居中的关键*/
复制代码

效果如下:

margin填充

接下来介绍margin填充的方式来实现水平垂直居中。
首先我们还是定义父子div:



这里我们利用将子div的margin-top设置为父div高度减去子div高度的一半,然后再通过overflow设置为hidden来触发父div的BFC,LESS代码如下:

  1. @parentWidth:200px;
  2. @childrenWidth:50px;
  3. .parent {
  4. margin:0 auto;
  5. height:@parentWidth;
  6. width:@parentWidth;
  7. background: red;
  8. overflow:hidden;/*触发BFC*/
  9. }
  10. .children {
  11. height:@childrenWidth;
  12. width:@childrenWidth;
  13. margin-left:auto;
  14. margin-right:auto;
  15. margin-top: (@parentWidth - @childrenWidth) / 2;
  16. background:black;
  17. }
复制代码

最后得到居中效果如下:

absolute定位

利用position:absolute搭配top,left 50%,再将margin设为负值也可以对div进行水平垂直居中,首先还是需要定义父子div:

代码如下:



然后设置相应的css:

  1. .parent {
  2. position:relative;
  3. margin:0 auto;
  4. width:200px;
  5. height:200px;
  6. background-color:red;
  7. }
  8. .children {
  9. position:absolute;
  10. left:50%;
  11. top:50%;
  12. margin:-25px 0 0 -25px ;
  13. height:50px;
  14. width:50px;
  15. background-color: black;
  16. }
复制代码

其中的margin中的值为该div宽度的一半,最后效果图:

text-align居中

众所周知,text-align可以使得一个div中的内容水平居中。但是如果是要将该div中的子div居中呢?可以将子div的display设为inline-block。

  1. .parent {
  2. text-align:center;
  3. margin:0 auto;
  4. width:200px;
  5. height:200px;
  6. background:red;
  7. }
  8. .children {
  9. positiona;absolute;
  10. margin-top:75px;
  11. width:50px;
  12. height:50px;
  13. background: black;
  14. display:inline-block;/*使其父元素text-align生效*/
  15. }
复制代码

图片居中

一般的图片居中都是和text-align一样,将图片包装在一个div中,将该div的text-align设为center即可。
可以参考下面的链接:
个人站点

有一种特殊的方式,利用了一个图片进行占位,以让父容器获得高宽,从而让进行-50%偏移的图片能有一个参照容器作百分比计算。优点是可以不知道图片的大小,随便放张尺寸不超过父容器的图片上去都能做到居中。另外,兼容性好,IE6都是能顺利兼容的。代码如下:

代码如下:






  1. .parent {
  2. position:relative;
  3. width:100%;
  4. height:200px;
  5. background:red;
  6. }
  7. p {
  8. position:absolute;
  9. top:50%;
  10. left:50%;
  11. }
  12. .hidden-img {
  13. visibility:hidden;
  14. }
  15. .show-img {
  16. position:absolute;
  17. right:50%;
  18. bottom:50%;
  19. }
复制代码

效果如下:

transform居中

上面讲到的div居中的例子中,div的宽度都是固定的,然而实际项目中,有可能遇到不定宽的div,特别是响应式或者移动端的设计中,更加常见。所以下面介绍一种不需要定宽的div水平垂直居中方法。
先上代码:

代码如下:



我是水平垂直居中噢!


  1. .parent {
  2. float: left;
  3. width: 100%;
  4. height: 200px;
  5. background-color: red;
  6. }
  7. .children {
  8. float:left;
  9. position:relative;
  10. top:50%;
  11. left:50%;
  12. }
  13. .children-inline {
  14. position: relative;
  15. left: -50%;
  16. -webkit-transform : translate3d(0, -50%, 0);
  17. transform : translate3d(0, -50%, 0);
  18. background-color: black;
  19. color:white;
  20. }
复制代码


效果如下:

首先我们利用float,将需要居中的div的父div也就是children的宽度收缩,然后left:50%,将children的左边与水平中线对齐。这个时候,还没有真正居中,我们需要将children-inner左移动-50%,这样就水平居中了。
再来说说垂直方向,先将children的top设为50%,然后其上边和垂直中线对齐了,同样,我们需要将children-inner上移动-50%。但是这个50%是计算不出来的,所以我们用到了transform : translate3d(0, -50%, 0);
这个方法非常好用噢。

flex居中

最后来介绍一下CSS3中的display:flex来实现的水平垂直居中的方法。

代码如下:


我是通过flex的水平垂直居中噢!

  1. html,body{
  2. width: 100%;
  3. height: 200px;
  4. }
  5. .parent {
  6. display:flex;
  7. align-items: center;/*垂直居中*/
  8. justify-content: center;/*水平居中*/
  9. width:100%;
  10. height:100%;
  11. background-color:red;
  12. }
  13. .children {
  14. background-color:blue;
  15. }
复制代码

效果如下:

这种方式最为简便,就是兼容性不好,不过随着时间的前进,各大浏览器一定会都兼容的。

以上就是本文的全部内容,希望大家可以喜欢。



太阳http代理AD
回复

使用道具 举报

关闭

站长推荐上一条 /1 下一条