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

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

一、内联元素的居中

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. WebClient 实现多文件/文本同时上传

    public class CreateBytes { Encoding encoding = Encoding.UTF8; /**/ /// <summary> /// 拼接所有的二进制数 ...

  2. vue.js的一些知识点

    1. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...

  3. memcache服务器端及PHP memcache扩展的安装(转载)

    memcache服务器端的安装(windows版)    1.下载memcached软件 32位下载地址: memcached-win32-1.4.4-14.zip(直接下载) 下载页面: 64位下载 ...

  4. 学习 opencv---(7) 线性邻域滤波专场:方框滤波,均值滤波,高斯滤波

    本篇文章中,我们一起仔细探讨了OpenCV图像处理技术中比较热门的图像滤波操作.图像滤波系列文章浅墨准备花两次更新的时间来讲,此为上篇,为大家剖析了"方框滤波","均值滤 ...

  5. Linux下的压缩和解压缩命令——tar

    tar命令 选项: -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只 ...

  6. Camtasia 录屏说明

    准备好要录制的屏幕或网页,在即将播放的位置暂停住. 从开始菜单位置“TechSmith”启动Camtasia Recorder 8,其界面如下所示: 注意,要录制系统声音,须在Recorded inp ...

  7. angular-route 和soket注意细节点

    route run 文件是第一个位置,之后才配置路由哪些,代码: angular.module('technodeApp',['ngRoute']).run(function($window,$roo ...

  8. acm 1002 算法设计

    最近突然想往算法方向走走,做了做航电acm的几道题 二话不说,开始 航电acm 1002 题主要是处理长数据的问题,算法原理比较简单,就是用字符数组代替int,因为int太短需要处理的数据较长 下面是 ...

  9. [网络流24题] 搭配飞行员(cogs 14)

    [问题描述]     飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞 ...

  10. js中属性节点的应用

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...