在开发前端页面的时候,元素的居中是一个永远都绕不开的问题。看似简单的居中二字,其实蕴含着许许多多的情况,对应着很多的处理方法,本文就试图对页面布局中的居中问题进行总结~~

居中问题分为水平居中和竖直居中两种;而根据所居中元素的不同,有内联元素居中和块级元素居中两种居中问题。下面开始分类整理:

一、内联元素的居中

1、内联元素的水平居中:在父元素上设置text-align:center;

(为了节省空间、突出重点,每个选择器中无关紧要的样式我都会全部写在第一行,从第二行开始是关键样式~ 下同)

2、单行内联元素的竖直居中:设置内联元素的行高等于容器的高度

3、多行内联元素的竖直居中:用具有块级属性的容器包裹起来,然后应用下方块级元素的相关方法。

二、块级元素的居中

1、块级元素的水平居中:设置居中元素的margin属性: margin: 0 auto;

2、高度固定的块级元素的竖直居中:相对于父元素进行绝对定位,设置top:50%;并设置margin属性为自身高度一半的负值:

原理:设置了top:50%;之后,该元素的上边沿正好在父元素的中心上,此时让这个元素向上方移动自身高度的一半,就可以使这个元素的中心与父元素的中心重合,达到竖直居中的效果。此原理也可应用至水平居中的应用上。

3、高度可变的块级元素的竖直居中:利用display:table-cell,利用表格中的竖直居中来实现。(此方法不兼容IE7及以下版本的浏览器)

4、容器高度不固定元素的竖直居中: 手动设置内部元素的上下边距相等

三、块级内联元素的居中

1、水平居中: 方法等同内联元素的水平居中方法

2、竖直居中: 方法等同块级元素的竖直居中方法

四、各种不寻常的居中方法

上面所述的都是面对那些分类情况中第一时间应当想到的寻常方法,在居中问题中还有很多原理不寻常的方法,下面尝试进行总结(有的方法上面已经有所应用)

1、利用display:table-cell进行布局:

我们都知道,表格中提供了非常方便的居中属性,在DIV+CSS布局还未到来的时代,居中对于前端人员来说(那时似乎也没有前端这个职位23333)并不是个问题。但是在web的新时代中,再使用table进行大布局就显得有些XXXX了。还好新版的CSS为我们提供了display:table-cell的选项,使得一个普通的div也可以表现的像一个表格单元格,从而可以通过直接设置text-align:center; vertival-align:middle;通杀一切居中的效果(块级元素水平居中需在块级元素上加margin:
0 auto;)。 这使得table-cell成为了新一个布局神器,然而因为兼容性问题,所以这个方法似乎还没有太大规模的使用。

2、使用绝对定位+负边距的方法:

这种方法的原理在前面“高度固定的块级元素的竖直居中”部分已经有介绍。在水平居中中同样可以使用,将相应属性换成水平方向的对应属性即可。这种方法的缺点在于,需要预先知道居中元素的宽高,不适用于宽高可变的元素。

3、使用绝对定位+transform的方法:

这种方法是对上方负边距方法的一个改进。一般来说,CSS中距离单位使用百分比时,都是根据父元素的宽高来计算的。而transform:translate()方法在使用百分比单位时,是以自身的宽高进行计算的,这就弥补了负边距方法中“必须预先获知元素宽高”这一缺陷了。

当然,缺陷也很明显:translate是CSS3中的内容,并不兼容IE6、7、8。(手动冷漠脸)

4、使用绝对定位+auto边距的方法:

使居中元素相对于其父元素绝对定位,设置居中方向上的偏移值为0(两方向都要设置),然后设置居中方向上的margin值为auto(同样两个方向都要设置),即可实现居中。下图为水平竖直居中的例子。

这种方法有两个负作用:1、居中元素的盒模型中margin部分会填充整个父容器,可能会影响同等级其他元素的布局。

2、不能用于高度可变元素。例如对一个高度可变的内容容器使用本方法,其高度会自动拉伸至100%,失去高度随内容自适应的性质。

5、浮动元素的水平居中

对于一群浮动元素的居中,可以使用以下办法:精确计算浮动元素的总宽度及边距,设置一个宽度等与此值的块级容器,使得浮动元素在此容器内浮动,而此容器相对原先的父容器水平居中。

对于单个浮动元素的居中。。。。。。就剩一个元素了还浮动个毛线!

6、一种非常奇怪的方法。。。使用font-size实现竖直居中

居然还能用这个??????

这种方法仅仅在IE6和IE7中有效,可以看作对table-cell方法的补充。在高度固定的父元素中,设置font-size的值为高度除以1.14得到的值(手动十个尼克杨问号脸),子元素为内联或块级内联元素并设置vertical-align:middle,可以实现竖直居中。

下面是这个方法与table-cell方法的结合,使用了css hack,可以兼容所有浏览器。

7、引入新的不可见元素实现居中

这种方法的原理和上面提到的绝对定位系列方法是类似的。对于单个高度(宽度)固定的元素,可以在同级添加一个div,设置其高度为50%,并设置下边距为居中元素高度一半的负值(这里替换成上面给居中元素设置的负边距或者translate都可以),即可完成居中效果:

当然,这里面的#another也可以通过伪元素实现:

需要注意的是,使用此方法实现水平居中时,需要给两个子div和伪元素设置display:inline-block样式,否则块级元素自带的换行效果会使得这种方法失效。

来做一个小的总结吧。在页面布局的时候,使用CSS进行居中操作,根据情况的不同,有着各种各样不同的方法。而这些各种各样的方法,也都有着各种各样的优劣,有的需要提前确定元素的宽高,有的存在兼容性问题。这就需要我们在开发的过程中,根据实际情况灵活选用方法,并加以自己的修改,方可实现各种居中~~上面这些方法已经足够应对大部分场景,如果遇到了更加奇妙的方法,我也会更新这篇博文与大家分享的~

CSS中各种各样居中方法的总结的更多相关文章

  1. CSS中各种居中方法

    CSS中各种居中方法,本文回顾一下,便于后续的使用. 水平居中方法 1.行内元素居中 行内元素居中是只针对行内元素的,比如文本(text).图片(img).按钮等行内元素,可通过给父元素设置 text ...

  2. css中关于居中的那点事儿

    css中关于居中的那点事儿 关于居中,无论是水平居中,还是垂直居中都有很多方式,下面我来介绍一些常用的. 第一部分:水平居中 1.实现行内元素的居中.方法:在行内元素外面的块元素的样式中添加:text ...

  3. css中各种居中的奇技淫巧总结

    css中各种居中的奇技淫巧总结   第一种,在固定布局中比较常用的技巧设置container的margin:0 auto:   第二种(从布局中入手)   css .outer{ height:200 ...

  4. CSS中垂直居中的方法

    昨天总结了css中水平居中的方法,今天来总结一下css中实现垂直居中的方法. line-height line-height用于实现单行文本的垂直居中,如下图中,我们要求单行文本垂直居中,只需要将di ...

  5. css中的居中问题

    前两天写了一篇关于display:table的用法,里面涉及到居中的问题,这两天愈发觉得css中的居中是一个值得关注的问题,现总结如下. 一.垂直居中 (1)inline或者inline-*元素 1. ...

  6. css中关于居中的问题

    居中是最常用的一种css格式,不同的居中方法适和不同的环境中,下面总结了几种常用的居中方法,你可以不用它,但是无论你是一个资深前端大牛,还是小小初学者,当你见到它的时候不认识它就是你的不对啦!!! h ...

  7. CSS中水平居中的方法

    居中是我们在css中经常遇到的问题,一般有水平居中.垂直居中.垂直水平居中这3种情况,那么今天首先就来对学习到的水平居中的方法做个总结笔记. css水平居中 text-align:center 它的效 ...

  8. css中的居中的方法

    一.垂直居中 (1)inline或者inline-*元素 1. 单行文字 设置上下padding相等 以前一直以为inline元素是没有上下的padding和margin的,其实不然,他们是有上下的p ...

  9. CSS中各种居中的问题

    1.元素水平居中 1.1 在父元素上使用text-align: center; father { text-align: center; } 1.2 margin: 0 auto; 在上一个问题中,我 ...

随机推荐

  1. Gridview中运用CommandField 删除控件时注意点

    我在gridview1 <编辑列>里面添加了一个<CommandField 删除>的控件,之后在gridview1的事件<RowDeleting>事件下 写了一段删 ...

  2. flex实验总结

    1.父元素 .box{ display:flex; flex-direction: column;//铺满垂直排列 flex-direction: column-reverse;//铺满垂直反向排列 ...

  3. selenium web driver 使用JS修改input属性

    selenium获取input时候,发现type=”hidden” 的input无法修改value,经牛人指点,可以使用js修改 首先html源文件如下,设置为text .hidden.submit ...

  4. centos 安装pip,使用pip安装django

    python版本要2.7.x以上版本,若未安装python执行以下命令安装: wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz ...

  5. redhat 配置本地yum源163yum源epel 源,无需卸载yum!无须拷贝ISO,愿网上少一点垃圾教程误人子弟

    都知道redhat不收费,但是其yum服务是要收费的,不想出钱那就自己配置yum源就好了. 首先,博主之前也没用过redhat,第一次用yum装包的时候提示什么没注册之类的,balaba一大堆,然后就 ...

  6. 何为HDFS?

    该文来自百度百科,自我收藏. Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时, ...

  7. 两个单选按钮(一个是,一个否 ),一个div层,实现点击隐藏,显示div

    <script type="text/javascript"> function diva(){ document.getElementById('div1').sty ...

  8. tp框架之模板继承

    模板继承是一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层.模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区 ...

  9. 安天移动安全应对“DressCode”威胁,发布企业移动威胁检查工具

    近日,一种名为"DressCode"的恶意代码引起了国内安全行业的关注,该恶意代码以企业员工的移动设备作为跳板对企业内网进行攻击,对企业安全造成严重威胁.安天移动安全公司威胁情报团 ...

  10. 【Java并发系列02】Object的wait()、notify()、notifyAll()方法使用

    一.前言 对于并发编程而言,除了Thread以外,对Object对象的wati和notify对象也应该深入了解其用法,虽然知识点不多. 二.线程安全基本知识 首先应该记住以下基本点,先背下来也无妨: ...