我们在网页布局的时候,经常会碰到需要居中的情况,那下面就来讲一下有哪几种目前比较常用的居中方案,它们的优点和缺点分别又是什么。

一、水平居中
 
方法①:(父元素)text-align,(子元素)inline-block
这个是比较传统的做法,而且代码量也相对比较少,它的特点是可以很好地兼容IE6等低版本浏览器。至于缺点也比较明显,是需要把父元素和子元素都做成一个整体,并且上同时设置CSS
 
总结:

优点:兼容性好,支持低版本浏览器

缺点:需要同时在父元素和子元素上设置

适用场景:子元素数量少(或只有一个),并且需要兼容低版本浏览器时使用
 
方法②:(子元素)display:table;margin:auto;(左右auto即可)
例:display:table; margin: 0 auto
这个方法利用display:table这个样式把子元素转化成类表格元素,从而可以用margin:auto来自动居中。方案的优点是只需要在子元素上加CSS,但display:table在IE8以上浏览器才有效果,所以本方法只适合用在较高版本浏览器中。
 
总结:

优点:只需要在子元素设置。

缺点:不兼容IE6和IE7

适用场景:子元素数量多,不方便修改父元素的属性,对浏览器版本要求相对较低时使用

 
方法③:(父元素)position:relative,(子元素)absolute+left+transform(translateX(-50%))
这个的方法看起来就比较现代化了。没错,它的核心是利用了CSS3里的水平偏移,由于设置了absolute,所以对其他元素基本不会造成影响
优点:不影响其他元素
缺点,transform兼容性
 
方法④:flex+justify-content/margin
这个方法利用了display:flex对Grid操作的强大,分别有两种设置方法。
一种是(父元素)display:flex;justify-content:center;
优点:只设parent
缺点:flex兼容性差,而且比较耗资源
另一种是(父元素)display:flex;(子元素)margin:0 auto;
优点:代码简单
缺点,污染父元素,flex兼容性问题
水平居中这里的4种方法应该可以帮大家对应掉工作中绝大多数情况。下面我们来说说垂直居中
 
二、垂直居中:
①(父)table-cell + vertical-align
优点:兼容性比较好,换成table可以兼容IE6,7
缺点:table-cel会不能和float、position:absolute同时设置。(只能在外parent外套一层div.wrap才能设置float)
 
②(父)position:relative;(子)absolute +top+ transform
这个方法和水平居中的left+transform类似,这里就不再赘述了
优点:基本只设置子元素,不影响其他元素
缺点:transform兼容性问题
 
③(父)flex + align-items
方法和水平居中的flex很类似吧
优点:只要设置parent
缺点:flex和align-items的兼容性
 
 
 
三、【终极需求】水平垂直同时居中!
下面来讲讲这个小BOSS
我们对水平居中和垂直居中的情况思考一下就会知道,要想达到水平垂直都居中,子元素必须是独立的,而父元素的垂直和水平样式互不影响。
方法①:(父)text-align + table-cell + vertical-align,(子)inline-block(兼容性方案)
 
方法②:(子)absolute + transform(不影响父元素方案,不兼容)
 
方法③:(父)flex + justify - content + align - items(不影响子元素方案,不兼容)
 

最新文章

  1. Solr图形化界面banana:除Hue之外的选择
  2. Android(Linux)线路规程的使用
  3. Sublime P4语法高亮设置
  4. 在 Linux 下将 PNG 和 JPG 批量互转的四种方法
  5. ASP.NET MVC Model绑定小结
  6. CrtCtl (客户端认证的证书、私钥)的控制
  7. ajax正确的简单封装“姿势”
  8. BZOJ 3998 [TJOI 2015] 弦论 解题报告
  9. <a href> 带有cookie
  10. ZABBIX作集中式NGINX性能监控的注意要点
  11. hdu 4107当卡段树
  12. Orchard学习计划
  13. 【HDU 5833】Zhu and 772002(异或方程组高斯消元讲解)
  14. HDU5918(KMP)
  15. ansible理解
  16. Lucene.net 的性能探究--Lucene.net 的并发处理能力到底有多强?
  17. codeforces1045B
  18. luogu2149 Elaxia的路线 (dijkstra+拓扑dp)
  19. maven 引入外部jar包的几种方式
  20. (转) IDirectSoundBuffer::SetVolume的参数与音量分贝的函数关系

热门文章

  1. jQuery选取表单元素
  2. Discuz常见小问题2-如何清空,删除,清除全部DIY的数据
  3. Win7如何重建桌面图标缓存
  4. JS设计模式基础
  5. list/tuple/dict/set
  6. Firefly 性能测试 通报
  7. cordova百度地图定位Android版插件
  8. shell中$0,$?,$!等的特殊使用方法
  9. asp.net生成视图时报错 未引用System.Runtime, Version...
  10. 在 SELECT 查询中使用集运算符