以下方案的通用代码:

HTML code:

<div class="box">
<div class="content">
<!--content body-->
</div>
</div>

CSS code:

.box{width:100%;height:500px;background-color: #00ff00;}
.content{width:300px;height:300px;background-color: #f0f000;}

1.position top:50%;left:50%+margin-top: -1/2height;margin-left: -1/2width;

CSS样式:

 .box{position: relative;}
.content{position: absolute;top:50%;left:50%;margin-top: -150px;margin-left: -150px;}

原理:

内容块以盒子为参考做绝对定位,通过top:50%;left:50%;使内容块的左上角处于box的中心位置;

通过设置内容块的margin值margin-top: -150px;margin-left: -150px;,使其中心位置和box的中心位置重合,达到居中效果;

兼容:

兼容所有浏览器,包括IE6及以上;

2.position top:0;bottom:0;left:0;right:0;+margin: auto;

CSS样式:

.box{position: relative;}
.content{position:absolute;top:0;left:0;bottom:0;right:0;margin:auto;}

原理:

内容块以盒子为参考做绝对定位,通过top:0;left:0;bottom:0;right:0;使内容块撑开为box大小;

设置宽高后,重新渲染内容块大小填充不了整个box,默认位于左上角,通过设置``margin:auto;`使内容块实现上下左右居中;

在文档流中,margin:auto;会被认为是margin-top:0;margin-bottom:0;而绝对定位使块脱离文档流,margin:auto;能让块在top:0;left:0;bottom:0;right:0;组成的边界中垂直居中;

margin:auto;在绝对定位中才能实现垂直居中;

兼容:

IE8以下不支持

3.display: table-cell;vertical-align:middle+margin:0 auto;

CSS样式:

.box{display: table-cell;vertical-align:middle;}
.content{margin:0 auto;}

原理:

table-cell可以将块设置成表格单元格形式,此时设置vertical-align:middle;将基线设置为单元格中间,故可实现垂直居中;

margin:0 auto;使内容块实现水平居中;

兼容:

IE6和7不兼容table-cell

4.inline-block+ vertical-align:middle;

CSS样式:

.box{text-align:center;}
.box:after{content:'';height:100%;display:inline-block;vertical-align:middle;}
.content{display:inline-block;vertical-align:middle;margin-left:-0.25em;}

原理:

vertical-align用于设置垂直对齐方式,定义行内元素的基线相对于元素所在行基线的垂直对其方式。假设有两个行内元素a和 b,a和b都是img,当a加了一个vertical-align:middle样式之后,b的底部(基线)就会对齐a的中间位置。

text-align使行内块居中显示,after伪类设置成行内块,并且设高度为100%vertical-align:middle;以后将基线设置成box的中间线,相当于display:table-cell;

由于行内块默认有左右margin值,导致内容块与居中有偏差,故设一个左外边距为负值margin-left:-0.25em;

兼容:

IE6和7不支持inline-block

最新文章

  1. 使用idea15搭建基于maven的springmvc-mybatis框架
  2. ui-router带参数的路由配置
  3. 在Kali Linux下安装与配置OpenVas
  4. FineUI小技巧(3)表格导出与文件下载
  5. Python之路 day2 初识字典
  6. rails常用验证方法 (转)
  7. Linq之扩展方法
  8. Meteor 使用疑问总结
  9. mouseevent tips
  10. vijos 1053Easy sssp
  11. Pomelo服务器琐碎方法
  12. 【jQuery】
  13. Qt之自定义托盘(两种方法)
  14. 追踪CM_CONTROLCHANGE消息的产生和执行过程,可以较好的领会VCL的思想(就是到处通知,但耦合性很弱)
  15. ubuntu下ffmpeg的安装,实现支持3gpp等转换
  16. ACM-ICPC 2018 徐州赛区网络预赛 B BE, GE or NE(记忆化搜索)
  17. Entity Framework Core 中文入门文档
  18. CSR8670的A2DP与AVRCP的应用笔记
  19. vue 开发系列(八) 动态表单开发
  20. vsphere 5.1 性能最佳实践。

热门文章

  1. Umbraco Content属性
  2. Codeforces 707D Persistent Bookcase(时间树)
  3. Nanjing GDG Meetup 8月线下活动
  4. (转)Web开发中最致命的小错误
  5. 利用Socket实现的两个程序的通信
  6. SQL学习之高级联结(自联结、自然联结、外联接)
  7. Ubuntu切换至root用户
  8. English - 英语中的时间表达法,这里全啦!
  9. Deep Learning(深度学习)学习笔记整理系列之(三)
  10. NET项目反编译+VS解决方案整理流程