CSS:水平居中与垂直居中

原文链接:http://www.cnblogs.com/JuFoFu/p/4450162.html#undefined

CSS居中算是一个比较基础的问题,在实际运用中,需要考虑到的一般是两种情况,一种是主要是表现为文字,图片等行内元素的居中,一种是指 div 等块级标签元素的居中。

水平居中

1、行内元素

行内元素(主要是表现为文字,图片等行内元素),通过在父级元素设置 text-align:center 使子级行内元素居中。

2、定宽块级元素

为定宽块级元素设置:

1 margin-left:auto;
2 margin-right:auto;

3、不定宽块级元素

不定宽块级元素居中有三种方法:

  1. 加入 table 标签
  2. 设置 display:inline 方法
  3. 设置 position:relative 和 left:50%

方法一:

将元素用 table 标签包裹起来,包括 tbody、tr、td,但这种方法为了居中增加了无语义的标签。

---------------------------------------------------------举个栗子---------------------------------------------------------

HTML:

 1 <div>
 2   <table>
 3     <tbody>
 4       <tr>
 5         <td>
 6            <ul>
 7               <li><a href="#">我是要</a></li>
 8               <li><a href="#">居中的</a></li>
 9               <li><a href="#">ul标签</a></li>
10            </ul>
11         </td>
12       </tr>
13     </tbody>
14   </table>
15 </div>

CSS:

1 table{
2     margin:0 auto;
3 }
4 ul{list-style:none;margin:0;padding:0;}
5 li{float:left;margin-right:8px;}

现代浏览器表现正常:

IE7有时候会出现问题:

---------------------------------------------------------吃完栗子---------------------------------------------------------

 

方法二:

设置为 inline 行内元素后沿用行内元素居中的方法,这种方法改变了元素的 display 样式。

---------------------------------------------------------举个栗子---------------------------------------------------------

HTML:

1 <div>
2     <ul>
3        <li><a href="#">我是要</a></li>
4        <li><a href="#">居中的</a></li>
5        <li><a href="#">ul标签</a></li>
6   </ul>
7 </div>

CSS:

1 div{
2   text-align:center;
3 }
4 ul{list-style:none;margin:0;padding:0;display:inline;}
5 li{margin-right:8px;display:inline;}

各浏览器表现正常居中,IE7也没有出现什么问题。

---------------------------------------------------------吃完栗子---------------------------------------------------------

方法三:

通过给父元素设置 float/display:inline-block(IE7对块级元素设置 inline-block 支持性不好,需要 hack,即 *display:inline;*zoom:1;),然后给父元素设置 position:relative 和 left:50%,子元素设置 position:relative 和 left:-50% 来实现水平居中。

---------------------------------------------------------举个栗子---------------------------------------------------------

HTML:

1 <div>
2     <ul>
3        <li><a href="#">我是要</a></li>
4        <li><a href="#">居中的</a></li>
5        <li><a href="#">ul标签</a></li>
6     </ul>
7 </div>

CSS:

 1 div{
 2     display: inline-block;
 3     /*兼容IE6,IE7*/
 4     *display: inline;
 5     *zoom:1;
 6     position:relative;
 7     left:50%
 8 }
 9 ul{
10     /*兼容IE6*/
11     _display: inline;
12     _zoom:1;
13     list-style:none;
14     margin:0;
15     padding:0;
16     position:relative;
17     left:-50%;
18 }
19 li{
20     float:left;
21     margin-right:8px;
22 }

chrome,Firefox,opera,IE6+都可以表现正常。

注:

1、_display:inline 其实是触发IE6中块级元素表现出 inline-block 的效果,_zoom:1 触发IE6中 hasLayout 效果,这里其他浏览器不需要触发 inline-block 效果,原因不是很清楚;

2、其中display:inline-block 也可以替换为 float ,float的主要作用就是产生 inline-block 的效果,这样代码会更加简洁一些,不用考虑太多的兼容问题:

CSS:

 1 div{
 2     float: left;
 3     position:relative;
 4     left:50%
 5 }
 6 ul{
 7     /*兼容IE6*/
 8     _float:left;
 9     list-style:none;
10     margin:0;
11     padding:0;
12     position:relative;
13     left:-50%;
14 }
15 li{
16     float:left;
17     margin-right:8px;
18 }

---------------------------------------------------------吃完栗子---------------------------------------------------------

垂直居中

垂直居中主要是行内元素的居中比较麻烦,特别是多行文本的居中。

1、父元素高度确定的行内元素(单行文本),

通过设置父元素的 height 和 line-height 高度一致来实现的。

2、高度固定的块级元素垂直居中

高度固定的块级元素垂直居中有三种方法:

  1. 垂直居中元素设置 absolute,利用 absolute 元素居中的方法来居中;
  2. 垂直居中元素设置 absolute,通过 top 和 margin-top 属性来调整;
  3. 创建浮动元素;

方法一:

其实这个方法是 absolute 元素居中的方法,父元素设置 position:relative,垂直居中元素设置 position:absolute,当要垂直居中时,设置 top:0;bottom:0,然后为上下 margin 设置 auto,水平居中也是同理。IE6,IE7不支持此种居中方法。

这种方法适用于原本就设置了 position 为 absolute 的元素。

---------------------------------------------------------举个栗子---------------------------------------------------------

HTML:

1 <div class="wrap">
2   <div class="container">
3      <p>我是想要垂直居中的块级元素。</p>
4   </div>
5 </div>

CSS:

 1 .wrap{
 2     width:200px;
 3     height: 200px;
 4     background:#ccc;
 5     position: relative;
 6 }
 7 .container{
 8     width: 100px;
 9     height:100px;
10     background: #00ff00;
11     position:absolute;
12     right: 0;
13     left:0;
14     top:0;
15     bottom:0;
16     margin:auto;
17 }

chrome,Firefox,opera,IE8+表现如下,水平垂直居中:

---------------------------------------------------------吃完栗子---------------------------------------------------------

方法二:

父元素设置 position:relative,需要垂直居中的元素设置:

1 position:absolute;
2 top:50%;
3 height:2Hpx;
4 margin-top:-Hpx;

这里 top改为 bottom,margin-top 改为 margin-bottom 效果一样,这种方法适用于原本设置了 position 为 absolute 的元素。

---------------------------------------------------------举个栗子---------------------------------------------------------

HTML:

1 <div class="wrap">
2   <div class="container">
3      <p>我是想要垂直居中的块级元素。</p>
4   </div>
5 </div>

CSS:

 1 .wrap{
 2   width:100px;
 3   height: 200px;
 4   background:#ccc;
 5   position: relative;
 6 }
 7 .container{
 8     position:absolute;
 9     top:50%;
10     height:100px;
11     margin-top:-50px; /* 高度的一半 */
12     background: #00ff00;
13 }

chrome,Firefox,opera,IE6+都能够居中:

IE6 由于 3px bug表现稍微不同,不过由于这里主要讨论垂直居中,所以就不对其作过多留意。

---------------------------------------------------------吃完栗子---------------------------------------------------------

 

 

方法三:

在需要垂直居中的元素前创建浮动元素,浮动元素设置 margin-bottom 为垂直居中元素高度的一半,高度为父元素高度的一半,为了兼容IE6、IE7,还需要象征性地设置一下 width。垂直居中元素 清除浮动。但是这个方法创建了无语义的标签,还要做一些兼容性的处理。

---------------------------------------------------------举个栗子---------------------------------------------------------

HTML:

1 <div class="wrap">
2     <div class="floatdiv"></div>
3     <div class="container">
4         <p>我是想要垂直居中的块级元素。</p>
5     </div>
6 </div>

CSS:

 1 .wrap{
 2     width: 100px;
 3     height: 200px;
 4     background: #ccc;
 5 }
 6 .floatdiv {
 7     *width: 1px;/*兼容IE6、IE7*/
 8     float:left;
 9     height:50%;
10     margin-bottom:-50px;
11 }
12 .container {
13     clear:both;
14     height:100px;
15     position:relative;
16     background: #00ff00;
17 }

chrome,Firefox,opera,IE6+都能够居中:

---------------------------------------------------------吃完栗子---------------------------------------------------------

3、父元素高度确定的行内元素多行文本、图片)、块状元素

父元素高度确定的行内元素多行文本、图片)、块状元素垂直居中有两种方法

  1. 加入table标签;
  2. 设置 display 为 table-cell,激活 vertical-align 属性。

 

方法一:

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

---------------------------------------------------------举个栗子---------------------------------------------------------

HTML:

 1 <table>
 2   <tbody>
 3     <tr>
 4       <td class="wrap">
 5         <div>
 6           <p>我是想要垂直居中的一段文字。</p>
 7         </div>
 8       </td>
 9     </tr>
10   </tbody>
11 </table>

CSS:

1 .wrap{
2    width:100px;
3    height:200px;
4    background:#ccc
5 }

chrome,Firefox,opera,IE6+表现如下:

注:

1、因为 td 标签默认情况下就默认设置了 vertical-align 为 middle,所以我们不需要显式地设置了;

2、将 div 换为 img 效果一致。

---------------------------------------------------------吃完栗子---------------------------------------------------------

方法二:

在 chrome、Firefox 、opera、IE8 及以上的浏览器下可以设置块级元素的 display 为 table-cell,激活 vertical-align 属性,但注意 IE6、7 并不支持这个样式。

---------------------------------------------------------举个栗子---------------------------------------------------------

HTML:

1 <div>
2   <p>我是想要垂直居中的一段文字。</p>
3 </div>

CSS:

1 div{
2   width:100px;
3   height:200px;
4   background:#ccc;
5   display:table-cell;
6   vertical-align:middle;
7 }

chrome、Firefox 、opera、IE8 及以上的浏览器表现正常,IE6 和 IE7 则无法居中。

---------------------------------------------------------吃完栗子---------------------------------------------------------

垂直居中的方法比较多,至于用哪种方法还是要具体看情况,而且我相信还有更多的方法,欢迎大家补充。

时间: 2024-10-07 23:16:52

CSS:水平居中与垂直居中的相关文章

CSS 水平居中和垂直居中

转自:http://www.cnblogs.com/fu277/archive/2012/09/13/2400118.html 1.水平居中 (1) 文本.图片等行内元素的水平居中 给父元素设置text-align:center可以实现文本.图片等行内元素的水平居中. (2) 确定宽度的块级元素的水平居中 通过设置margin-left:auto;和margin-right:auto;来实现的. (3) 不确定宽度的块级元素的水平居中 方法一: 使用table标签,table本身并不是块级元素,

CSS水平居中和垂直居中解决方案

一.CSS 居中 — 水平居中 DIV等标签本身没有定义自己居中的属性,网上很多的方法都是介绍用上级的text-align: center,然后嵌套一层DIV来解决问题.可是这个方法有时候完全不起作用,而且对于布局是非常不科学的方法.正确的的设置写法如下(对页面构造没有影响):div {margin-left: auto; margin-right: auto; }这句CSS居中的意思就是让div自己调整左右margin间隔的距离以达到水平居中的效果.有时候我们还可以简写为 div { marg

css水平居中和垂直居中

水平居中:内联元素:text-align:center;相对于父级居中显示块级元素:margin:0 auto;但是需要同时width,否则无法看到效果多个块级元素居中:在此想要探讨一下display:inline-block;和display:flex;方法1:在父级上设置text-align:center;在元素上设置:display:inline-block;同时为了使文字向左显示,设置了text-align:left;在浏览器中的显示为,子元素高度自适应,底部对齐.方法2:在子元素上设置

css水平居中与垂直居中

一.水平居中 1.inline元素用tet-align:center; 2.block元素用margin:auto: 二.垂直居中 1.flex弹性盒子 父元素定义 display:flex;align-item:center; 2.absolute绝对定位 i.position:absolute;top:50%;left:50%;width:x;height:y;margin-left:-x/2;margin-top:-y/2; 缺点是必须指定元素的宽高,否则无法给定margin,显得不够灵活

html+css水平居中和垂直居中

水平居中 1.定宽.左右:margin:auto 2.弹性盒设置 justify-content:center 3.父元素设置 text-align:center 4相对定位元素 left:0:right:0:定宽:左右margin:auto 5.相对定位元素 margin-left:50%:transform:translateX(-50%)[margin,padding相对于包含块宽度的百分比] 垂直居中 1.line-height[单行文本垂直居中] 2.弹性盒设置 align-items

css水平居中和垂直居中的方法

html <div class="father"> <div class="child"></div></div> 法一:已知道两个盒子的宽高的情况,可以用margin来居中盒子: .father{ height: 200px; width: 200px; border: 1px solid red; } .child{ width: 100px; height: 100px; margin-top: 50px; ma

css图片居中(水平居中和垂直居中)

http://www.51xuediannao.com/html+css/htmlcssjq/css_img_center.html css图片居中分css图片水平居中和垂直居中两种情况,有时候还需要图片同时水平垂直居中,下面分几种居中情况分别介绍 css图片居中分css图片水平居中和垂直居中两种情况,有时候还需要图片同时水平垂直居中,下面分几种居中情况分别介绍. css图片水平居中 利用margin: 0 auto实现图片水平居中 利用margin: 0 auto实现图片居中就是在图片上加上c

CSS设置行内元素和块级元素的水平居中、垂直居中

CSS设置行内元素的水平居中 div{text-align:center} /*DIV内的行内元素均会水平居中*/ CSS设置行内元素的垂直居中 div{height:30px; line-height:30px} /*DIV内的行内元素均会垂直居中*/ PS:当然,如果既要水平居中又要垂直居中,那么综合一下 div{text-align:center; height:30px; line-height:30px} CSS设置块级元素的水平居中 div p{margin:0 auto; widt

CSS中元素水平居中和垂直居中的方法

#CSS中水平居中和垂直居中的方法 一. 水平居中 1.行内元素(文本,图片等) 如果被设置元素为文本.图片等行内元素时,可以通过给父元素设置` text-align:center;` 来实现 2.定宽块级元素 可以通过设置“左右margin”值为“auto”来实现居中 常用的有 `margin:0 auto; ` 也可以写成`margin-left:auto;margin-right:auto;` 3.不定宽块级元素 有三种实现方法: * 加入 table 标签   为需要设置的居中的元素外面

css确定元素水平居中和垂直居中

---恢复内容开始--- 首先,我们在了解如何通过css了解元素水平和垂直居中之前,先要了解下html都有哪些元素,这些元素与偶有哪些分类,因为不同类别的元素的水平垂直居中方法是完全不同的,究其根本当然是因为不同类别元素的性质不同.所以我们先来了解下html的元素类别. 一.HTML元素分类 1)内联(inline)元素: <a>--锚点 <abbr>--缩写 <acronym>--首字母缩写(HTML5不支持,请使用<abbr>代替) <b>-