建站软件 优化软件 编程软件 网页辅助 站群程序 网站程序 图像处理 资源教程 字体下载 推荐软件


您的位置:首页 > div+css > 怎么用CSS实现水平垂直居中

怎么用CSS实现水平垂直居中

时间:2016-06-02 10:49:10  来源:免费模板网 作者:风雪 阅读次数 tags水平居中

由于很多浏览器的分辨率不同,很多美工就通过居中避免布局乱的问题

起水平垂直居中大家常看到的是使用绝对定位与负margin的配合或者是inline-block配合vertical-align:middle等方法。当然还有其他一些解决方案,比如说,在水平垂直居中系列中介绍了一些制作方案。但这些方案或多或少都存在一些局限性。假设,要垂直水平居中的元素大小是未知的,你要使用绝对定位与负margin配合就难上加难。当然你会说,使用表格将解决我一切所需,的确是这样,那么除了这些方法,还有别的方案吗?接下来我们就针对这个自设问题,来一起探讨其他几种实现水平垂直居中的方案。

为了更好的阐述后面的方案,我们这里有一个命题:让未知大小容器(未知行数的文本)实现水平垂直居中。看到这样的命题,有人或许会说神经病又来了,如果你也这么认为,就让当是神病出现了吧。我们不纠结这个,还是看几种解决方案吧。


方法一:最原始的方式

这种方法用来实现单行垂直居中是相当的简单的,你只要保证元素内容是单行,并且其高度是固定不变的,你只要将其“line-height”设置成和“height”值一样就Ok了。不过这种方法局限性太大,只有单行文本的元素才适用,所以在多行元素中是不能使用这种方法的。

Html Markup

XML/HTML Code复制内容到剪贴板
  1. <div class="vertical">content</div>  

   
CSS Code:

 
  1. .vertical {   
  2.  height100px;   
  3.  line-height100px;/*值等于元素高度的值*/  
  4. }  

   
优点:

适合在所有浏览器,没有足够空间时,内容不会被切掉

缺点:

仅适合应用在文本和图片上,并且这种方法,当你文本不是单行时,效果极差,差到让你感到恶心。

这种方法对运用在小元素上是非常有用的,比如说让一个button、图片或者单行文本字段。

方法二:Flexbox方式

什么是Flexbox就不说了,对于让Flexbox实现水平垂直居中可以说是绝对的一流。假设我想让一张图片(图片大小不知)在body中实现水平垂直居中。

HTML

XML/HTML Code复制内容到剪贴板
  1. <body>  
  2.     <img src="http://img0.bdstatic.com/img/image/shouye/mxangel.jpg" alt="" />  
  3. </body>  

结构非常简单,body中有一张图片。

CSS

我们要做的是,如何使用Flexbox让img在body中实现水平垂直居中。

 
  1. *{   
  2.   margin: 0;   
  3.   padding:0;   
  4.   -webkit-box-sizing: border-box;   
  5.   box-sizing: border-box;   
  6. }   
  7. html,   
  8. body {   
  9.   height: 100%;   
  10. }   
  11. body {   
  12.   display: flex;   
  13.   align-items: center;   
  14.   justify-contentcenter;   
  15.   width: 100%;/*firefox下需要*/  
  16. }  

代码就这么几行,有一个关键之处,需要将html和body高度设置为100%;然后只需要在body中配置样式。此处使用了Flexbox中的居中属性。至于他们原理,这里就不多说了,感兴趣的同学可以看看Flexbox相关的教程。


方法三:transform与绝对定位方式

在当今天移动设备横行天下的年代,给我们前端人员制作页面带来无尽的烦恼,具体原因,大家都懂的。那么这里我们来模拟一个情形。有一个弹出层,我不知道他的大小有多大,我想让他在各种设备中永远水平居中。在下面示例中,我们用一个Dive来当作是弹出窗吧(偷懒了,不想花太多时间去做这个弹出窗效果)。

回到我们问题所在,在示例中有这样的一个结构:

XML/HTML Code复制内容到剪贴板
  1. <div class="modal">  
  2.     <div class="modal-header">弹出窗标题</div>  
  3.     <div class="modal-body">在当今天移动。。。</div>  
  4. </div>  

结构不分析了。直接看CSS:

 
  1. *{   
  2.   margin: 0;   
  3.   padding:0;   
  4.   -webkit-box-sizing: border-box;   
  5.   box-sizing: border-box;   
  6. }   
  7. html,   
  8. body {   
  9.   height: 100%;   
  10. }   
  11.   
  12. .modal {   
  13.   border1px solid #bbb;   
  14.   border-radius: 5px;   
  15.   box-shadow: 0 0 3px rgba(0,0,0,.5);   
  16.   
  17.   position:absolute;   
  18.   top:50%;   
  19.   left: 50%;   
  20.   -webkit-transform: translate(-50%, -50%);   
  21.   transform: translate(-50%, -50%);   
  22. }   
  23. .modal-header {   
  24.   padding10px 20px;   
  25.   background: rgba(0,0,0,.25);   
  26.   color:#fff;   
  27. }   
  28. .modal-body{   
  29.   padding20px;   
  30.   background#fff;   
  31. }  

方法四:div
使用div模拟表格效果,也就是说将多个<div>的“display”属性设置为禾“table”和“table-cell”,并设置他们的“vertical-align”的属性值为“middle”。
HTML Code

XML/HTML Code复制内容到剪贴板
  1. <div id="container">  
  2.  <div id="content">content</div>  
  3. </div>  

   
CSS Code

 
  1. #container {   
  2.  height300px;   
  3.  display: table;/*让元素以表格形式渲染*/  
  4. }   
  5. #content {   
  6.  display:table-cell;/*让元素以表格的单元素格形式渲染*/  
  7.  vertical-alignmiddle;/*使用元素的垂直对齐*/  
  8. }     

   
优点:

这种方法不会像前面的两种方法一样,有高度的限制,此方法可以要据元素内容动态的改变高度,从而也就没有空间的限制,元素的内容不会因为没足够的空间而被切断或者出现难看的滚动条。

缺点:

不足之处呢?这种方法只适合现代浏览器,在IE6-7下无法正常运行;而且较前两者而言,结构也更复杂。

本文地址:https://www.freemoban.com/bjrm/2016/0602/2621.html

猜你喜欢
栏目推荐
模板推荐

Copyright:www.freemoban.com 免费模板网 All Rights Reserved 网站备案:辽ICP备19014872号-2   辽公网安备 21010602000376号  辽公网安备:42900402000182号

免责声明:本站部分资源来自互联网收集,版权归原创者所有,如果侵犯了你的权益,我们会及时删除侵权内容,联系QQ:1615187561 谢谢合作!