以下方案的通用代码:

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

css布局之块上下左右居中的更多相关文章

  1. 理解 CSS 布局和块级格式上下文

    前言 BFC 的概念始于 CSS2,是个蛮古老的 CSS 话题了,网上也到处能搜到 BFC 的介绍,但是都不够简洁.本文系翻译自 Rachel Andrew 女士的博文 Understanding C ...

  2. css布局:块级元素的居中

    一.定宽: 1.定位居中(absolute) 方法一: html: <div class="main"></main> css: .main{ width: ...

  3. CSS布局奇技淫巧:各种居中

    居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明 ...

  4. CSS布局技巧之——各种居中

    居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明 ...

  5. css div上下左右居中

    相信大家都会遇到这样的问题,要求一个块上下左右居中,在这里我总结了几个好用的方法 1.已知要居中的块width height 假设  content 要在f里上下左右居中 <div class= ...

  6. CSS布局一

    CSS布局一 实例一(居中) div#container{ width:960px; height:650px; margin:0 auto; border:1px solid #ccc; /*就是说 ...

  7. css:子元素div 上下左右居中方法总结

    最近在面试,不停地收到了知识冲击,尤其是对于一些基础的css.html.js问题居多,所以自我也在做反思,今天就css问题,如何让一个子元素div块元素上下左右居中 (以下总结方法,都已得到验证). ...

  8. CSS布局——居中

    参考文章1.CSS布局奇淫技巧之--各种居中 2.http://www.imooc.com/article/2235 1.行内元素水平居中text-align:center对图片,按钮,文字等行内元素 ...

  9. 用CSS让DIV上下左右居中的方法

    转载自喜欢JS的无名小站 例如 一个父div(w:100%;h:400px)中有一个子div(w:100px;100px;).让其上下左右居中. 方法一(varticle-align) 理念 利用表格 ...

随机推荐

  1. NOI2013 Day1

    NOI2013 Day1 向量内积 题目描述:两个\(d\)维向量\(A\)与\(B\)的内积为其相对应维度的权值的乘积和,现有\(n\)个\(d\)维向量 ,求是否存在两个向量的内积为\(k\)(\ ...

  2. 分析Ext2文件系统结构。

    1. 目的 分析Ext2文件系统结构. 使用 debugfs 应该跟容易分析 Ext2文件系统结构 了解ext2的hole的 2. 准备工作 预习文件系统基本知识: http://www.doc88. ...

  3. npm 常用命令

    npm install xxx 安装模块npm install xxx@1.1.1   安装1.1.1版本的xxxnpm install xxx -g 将模块安装到全局环境中.npm ls 查看安装的 ...

  4. nodejs微信开发获取token,ticket-1

    /* jshint -W079 */ /* jshint -W020 */ "use strict"; var _ = require("lodash"); v ...

  5. Node.js开发指南中的例子(mysql版)

    工作原因需要用到nodejs,于是找到了<node.js开发指南>这本书来看看,作者BYVoid 为清华大学计算机系的高材生,年纪竟比我还小一两岁,中华地广物博真是人才辈出,佩服. 言归正 ...

  6. 什么是xss盲打

    什么是xss盲打? 盲打仅仅是一种惯称的说法,就是不知道后台不知道有没有xss存在的情况下,不顾一切的输入xss代码在留言啊,feedback啊之类的地方,尽可能多的尝试xss的语句与语句的存在方式, ...

  7. dataset 用法(2)

    1.为DataTable添加列 (1)添加列 DataTable  tbl = ds.Tables.Add("User"); DataColumn col =tbl.Columns ...

  8. Windows消息大全

    最近在写TabControl的用户控件,需要用到sendMessage,已做备份. 引用:http://bbs.aau.cn/forum.php?mod=viewthread&tid=7776 ...

  9. STMP发送邮件被当垃圾邮件处理的解决方法

    昨天使用了.Net通过smtp发送邮件的方式发送了一封邮件到自己的QQ邮箱,但是发送成功后并没有提示邮箱收到新的邮件,而且去收件箱里面也没有新增的邮件. 这让本人觉得奇怪,所以就觉得是否被当作垃圾邮件 ...

  10. 制作U盘启动盘(以CentOS6.3为例)

    借助UltraISO(软碟通),自己百度下载一个即可(同样适用于制作Windows启动盘). 选择文件→打开,选择ISO镜像所在目录,如下两幅图所示: