CSS中的居中可分为水平居中垂直居中。水平居中分为行内元素居中块状元素居中两种情况,而块状元素又分为定宽块状元素居中不定宽块状元素居中。下面详细介绍这几种情况。

一、水平居中

1、行内元素居中

顾名思义,行内元素居中是只针对行内元素的,比如文本(text)、图片(img)、按钮等行内元素,可通过给父元素设置 text-align:center 来实现。另外,如果块状元素属性display 被设置为inline时,也是可以使用这种方法。但有个首要条件是子元素必须没有被float影响,否则一切都是无用功。

.div1{
text-align:center;
}
<div class="div1">Hello world</div>

2、块状元素居中

(1)、定宽块状元素居中

满足定宽(块状元素的宽度width为固定值)和块状两个条件的元素可以通过设置“左右margin”值为“auto”来实现居中。

.div1{
     width:200px;
     border:1px solid red;
margin:0 auto;
}
<div class="div1">Hello world</div>

(2)、不定宽块状元素居中

在实际工作中我们会遇到需要为“不定宽度的块状元素”设置居中,比如网页上的分页导航,因为分页的数量是不确定的,所以我们不能通过设置宽度来限制它的弹性。(不定宽块状元素:块状元素的宽度width不固定。)

有三种方法可以对不定宽块状元素进行居中:

方法1:

将要显示的元素加入到 table 标签当中,然后为 table 标签设置“左右margin”值为“auto”来实现居中; 或使用 display : table;然后设该元素“左右margin”值为“auto”来实现居中。后面的display:table; 方法会更简洁。

为什么加入table标签? 是利用table标签的长度自适应性---即不定义其长度也不默认父元素body的长度(table其长度根据其内文本长度决定),因此可以看做一个定宽度块元素,然后再利用定宽度块状居中的margin的方法,使其水平居中。

如下例子:

table{
margin:0 auto;
} <div>
<table>
<tbody>
<tr><td>
<ul>
<li>Hello world</li>
<li>Hello world</li>
</ul>
</td></tr>
</tbody>
</table>
</div>
.wrap{
background:#ccc;
display:table;
margin:0 auto;
} <div class="wrap">
Hello world
</div>

方法2:

改变块级元素的 display 为 inline 类型(设置为 行内元素 显示),然后使用 text-align:center 来实现居中效果。

这种方法相比第一种方法的优势是不用增加无语义标签,但也存在着一些问题:它将块状元素的 display 类型改为 inline,变成了行内元素,所以少了一些功能,比如设定长度值(变成inline-block就可以设置宽高)。

.container{
text-align:center;
}
.container ul{
list-style:none;
margin:0;
padding:0;
display:inline; //怎么这一句用不用都是一样效果的?
} <div class="container">
<ul>
<li>Hello world</li>
<li>Hello world</li>
</ul>
</div>

方法3:

通过给父元素设置 float,然后给父元素设置 position:relative 和 left:50%,子元素设置 position:relative 和 left: -50% 来实现水平居中。

.wrap{
float:left;
position:relative;
left:50%;
clear:both;
}
.wrap-center{
background:#ccc;
position:relative;
left:-50%;
} <div class="wrap">
<div class="wrap-center">Hello world</div>
</div>

先设置父元素wrap清除浮动,然后左浮动。定位让wrap向右偏移50%。然后定义子元素相对于父元素向左偏移50%。脱离父元素。加个边框就可以明白一些了。另外用绝对定位也是可以的。

二、垂直居中

垂直居中可分为父元素高度确定的单行文本,以及父元素高度确定的多行文本。

1、父元素高度确定的单行文本的竖直居中的方法是通过设置父元素的 height 和 line-height 高度一致来实现的。(height: 该元素的高度,line-height: 顾名思义,行高,指在文本中,行与行之间的 基线间的距离 )。

.wrap h2{
margin:0;
height:100px;
line-height:100px;
background:#ccc;
} <div class="wrap">
<h2>Hello world</h2>
</div>

2、父元素高度确定的多行文本

有两种方法:

方法1:

使用插入 table  (包括tbody、tr、td)标签,同时设置 vertical-align:middle。

.wrap{
height:300px;
background:#ccc;
vertical-align:middle; /* td 标签默认情况下就默认设置了 vertical-align 为 middle,可以不需要显式地设置 */
} <table>
<tbody>
<tr>
<td class="wrap">
<div>
<p>Hello world</p>
<p>Hello world</p>
<p>Hello world</p>
</div>
</td>
</tr>
</tbody>
</table>
.wrap{
background:#ccc;
display:table;
vertical-align:middle;
} <div class="wrap">
<p>Hello world</p>
<p>Hello world</p>
<p>Hello world</p>
</div>

方法2:

设置块级元素的 display 为 table-cell(设置为表格单元显示),激活 vertical-align 属性。但这种方法兼容性比较差, IE6、7 并不支持这个样式。

.wrap{
height:300px;
background:#ccc; display:table-cell;/*IE8以上及Chrome、Firefox*/
vertical-align:middle;/*IE8以上及Chrome、Firefox*/
} <div class="wrap">
<p>Hello world</p>
<p>Hello world</p>
<p>Hello world</p>
</div>

注:主要参考慕课网教程

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

  1. CSS中元素各种居中方法(思维导图)

    前言 用思维导图的方式简单总结一下各种元素的居中方法,如下图: 补充一下: table自带功能 100% 高度的 afrer before 加上 inline block优化 div 装成 table ...

  2. 讨论CSS中的各类居中方式

    今天主要谈一谈CSS中的各种居中的办法. 首先是水平居中,最简单的办法当然就是 margin:0 auto; 也就是将margin-left和margin-right属性设置为auto,从而达到水平居 ...

  3. css中添加屏幕自适应方法(rem)

    css中添加屏幕自适应方法(rem) 只需要在公共css文件中添加下面代码:设计稿以750px,基础字体为20px为例,兼容性高,使用过程中px转化为rem即可 /*竖屏*/ @media scree ...

  4. HTML CSS 中DIV内容居中汇总

    转载博客(http://www.cnblogs.com/dearxinli/p/3865099.html) (备注:DIV居中情况,网上谈到也比较多,但是这篇文字,相对还是挺全面,现转载,如果冒犯,还 ...

  5. CSS中背景图片定位方法

    转自:http://www.ruanyifeng.com/blog/2008/05/css_background_image_positioning.html 作者: 阮一峰 日期: 2008年5月 ...

  6. (转)HTML&CSS——background: url() no-repeat 0 -64px;CSS中背景图片定位方法

    http://blog.csdn.net/oscar92420aaa/article/details/51304067 CSS中背景图片的定位,困扰我很久了.今天总算搞懂了,一定要记下来. 在CSS中 ...

  7. css 中 div垂直居中的方法

    在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...

  8. HTML&CSS——background: url() no-repeat 0 -64px;CSS中背景图片定位方法

    CSS中背景图片的定位,困扰我很久了.今天总算搞懂了,一定要记下来. 在CSS中,背景图片的定位方法有3种: 1)关键字:background-position: top left; 2)像素:bac ...

  9. css中的单位和css中的颜色表示方法

    css中颜色的表示方式: 图片来源http://www.w3school.com.cn

随机推荐

  1. js中使用队列发送ajax请求

    最近,项目中需要按照先后顺序发送ajax请求,并且在一次请求结束后才能发起下一次,不然就会导致逻辑错误. 解决办法是定义一个数组,保存ajax请求数据. 以下使用extjs4定义一个类 Ext.def ...

  2. css overflow

    overflow-x,overflow-y的值相同等同于overflow overflow-x,overflow-y的值不同,其中一个被赋值visible,另一个被赋值为auto,scroll,hid ...

  3. Asp.Net实现Http长连接推送

    话说最新帮一个朋友搞智能家居方面的东西,做一个云平台.主要作用手机在局域网外环境时对手机客户端和智能网关中命令的互相转发. 目前已经有了一个稳定的Socket版本,但是考虑到以后的扩展和性能指标要改成 ...

  4. (七)Android中AIDL的应用与理解

    一.跨应用启动Service Intent serviceIntent=new Intent();serviceIntent.setComponent(new ComponentName(" ...

  5. Gabor滤波器学习

    本文的目的是用C实现生成Gabor模版,并对图像卷积.并简单提一下,Gabor滤波器在纹理特征提取上的应用. 一.什么是Gabor函数(以下内容含部分翻译自维基百科) 在图像处理中,Gabor函数是一 ...

  6. js获取url传递参数的写法

    获取url地址?后面参数值的写法 正则: function GetQueryString(name) { var reg = new RegExp("(^|&)"+ nam ...

  7. synchronized 关键字

    synchronized 多用于并发不高并且需要单线程运行的地方.比如你有一个A方法,你在方法上加了synchronized修饰.那么两个人同时去调用这个方法的时候不是并行的,是抢占的,谁先抢到资源谁 ...

  8. Linux系统学习笔记:文件I/O

    Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...

  9. JS基础如何理解对象

    这几天跟几个同事聊天发现他们对javascript什么时候该用new都不是很了解. 1.javascript的function什么时候该new什么时候不该new?我觉得主要的问题还是集中在javasc ...

  10. CSS自学笔记(9):CSS拓展(二)

    CSS图片 当一个网页上有一张或多张图片,而且这些图片的尺寸比较大时,为了是网页布局更紧凑合理,我们可以将这些图片放到一个图片库里,可以有效的防止图片过大可能会对网页布局造成的不良影响. 通过CSS我 ...