`
yiminghe
  • 浏览: 1431699 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

元素容器内垂直居中问题

阅读更多

以前这个问题也一直出现过,因为不是什么大问题,就用table随便搞搞

 

html ,body {height:100%}  

<table height='100%' align="center"   valign="center">
   			<tr>
   				<td><div id='content'></div></td>
   			</tr>   			
</table>
 

注意 : html ,body {height:100%} 一定要写 ,使得 table 的参考对象 height  得到窗体的高度,这样 table 中td 的内容才能在窗体范围内居中。

详见: html body 100% 解析和应用

 

现在越来越注意css 了,想用css实现一下,自己一试,还真难,汗,ff行了,ie就不行 ,一找,原来真的挺难 :垂直居中问题解释整理


 

以下为转载

 

1. 单行文字在固定高度容器中垂直居中

这个最简单,只要让行间距 line-height 与容器高度 height 相等即可;

 

#box { height: 120px; line-height: 120px; overflow: hidden }


2. 多行文字在未知高度容器中垂直居中

这个也很简单,将 padding-top 与 padding-bottom 设置成相同的值即可;

 

#box2 { padding: 10px 0 }


3. 多行文字在固定高度容器中垂直居中(非 IE 浏览器)

 

#box3_wrapper {
   display: table;
   height: 311px;
   background: #eee
}
#box3 {
   display: table-cell;
   vertical-align: middle
}

 

<div id="box3_wrapper">
   <div id="box3">
        作者:shimano<br />
        如何既给用户提供最大限度的编辑权限<br />
        又能保证网页整体的规范和美观?<br />
        真 TMD 难啊!
   <div>
</div>


注意:这其中有个关于字号的问题,在 XP 和 Vista 及 Mac 下即使设定了像素为单位的字号,文字大小也依旧不同,这个在我之前一个篇日志里也提到过,在 XP 下,12px 宋体是 11x11(px)的,在 Vista 下有些文字高 11px 有些高 12px,这也是为什么 Vista 下的宋体看起来比较奇怪,Mac 下默认就是平滑边缘的黑体,再有就是 safari 下平滑边缘的宋体,所以更不容易辨别。

如果细究,在不设定高度和行间距的容器中,12px 宋体文字上下边沿依旧会有 1px 到 2px 的间距,XP 的 IE6 下,字下沿有 3px ,字上沿为 0;Firefox 下,字上沿为 1px,下沿为2px;Vista 下,文字上下各 1px 间距(考虑同等高度文字);这可以理解为默认 line-height,在 这篇日志 中我也是遇到了同样的问题。

关于 IE6 下 line-height 的问题我在 这篇日志 中有提。

4. 多行文字在固定高度容器中垂直居中(IE 浏览器)

因为 IE 不支持将 div 显示为 table 及其同胞,所以我们要另想办法:

 

#box3_wrapper {
   position: relative;
}
#box3_inner {
   position: absolute;
   top: 50%
}
#box3 {
   position: relative;
   top: -50%;
   background: #eee
}

 

<div id="box3_wrapper">
   <div id="box3_inner">
      <div id="box3">
         这种方法<br />
         在下面的未知高度 div 垂直居中<br />
         也用到了
      </div>
   </div>
</div>


下面有个权衡 IE 与 非 IE 浏览器浏览效果的实现方法,请继续看

5. 未知高度 div 的垂直居中

 

#box4_wrapper {
   height: 100%;
   width: 100%;
   overflow: hidden;
   position: relative
}
#box4_wrapper[id] {
   display: table;
   position: static
}
#box4_outer {
   position: absolute;
   top: 50%
}
#box4_outer[id] {
   display: table-cell;
   vertical-align: middle;
   position: static
}
#box4_inner {
   position: relative;
   top: -50%;
   margin: 0 auto;
   background: #eee
}

 

<div id="box4_wrapper">
   <div id="box4_outer">
      <div id="box4_inner">
         这是一种无 hack 的方式<br />
         虽然环保,但是臃肿:(
      </div>
   </div>
</div>


CSS2 选择符 #value[id] 相当于 #value,但是 IE 不支持这种类型的选择符,使用这种方式区分浏览器避免 hack:)

6. 未知尺寸图片(小与容器高度)在固定高度容器中垂直居中

 

#box5 {
   display: table-cell;
   *display: block;
   *font-size: 175px;
   *font-family: Arial;
   vertical-align: middle;
   height: 200px;
   width: 200px
}
#box5 img {
   vertical-align: middle
}

 

<div id="box5">
   <img src="img/ctba.png" alt="扯谈社" />
</div>


方法2: 找一张图片 1*1 ,高度设为 div 的高度 ,待居中图片紧随其后 , 这样的话 由于行内元素 基于 中线对其 ,则待居中图片 垂直居中了 ,至于水平居中则用 div {text-align:center}

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Vertical Middle</title>
<style>
.itm{border:2px solid #ccc;width:160px;height:160px;text-align:center;}
.blank{width:0;height:160px;}
.itm img{vertical-align:middle;}
</style>
</head>

<body>
<div class="itm">
<img src="blank.gif" class="blank" />
<a href=""><img src="m060616.jpg"/></a>
</div>
</body>
</html>

 

淘宝 UED 07 前端开发原题。解释下针对 IE 的 hack:在 IE 下,将字号设置为容器高度的 0.873(本例中即 200*0.873 = 175)图片便会垂直居中;字体设置为 Arial 主要防止非 utf-8 引起的 hack 失效问题,如 gbk 编码(摘自译飞的博客)

当然如果只是图片,在针对非 IE 浏览器时利用单行文字的垂直居中方法也可以。

分享到:
评论

相关推荐

    CSS解决页面图片水平垂直居中问题的方法

    做为一个前端设计人员,对于产品展示页面的设计一定不会陌生,其中...所谓的图片水平垂直居中就是把图片放在一个容器元素中(容器大于图片尺寸或是指定了大小的容器),并且图片位居此容器正中间(中间是指元素容器的正

    div+css有实例,易学易懂

    6.3.3 已知容器的大小而未知内容大小的水平和垂直居中问题 6.3.4 容器的大小和内容大小均未知的水平和垂直居中 6.3.5 修饰图片的水平和垂直居中 6.4 字体的综合属性 6.4.1 字体的选择 6.4.2 字体的大小 6.4.3 字体的...

    css图片垂直居中 css中如何实现图片垂直居中

    在曾经的 淘宝UED 招聘 中有这样一道题目: “使用纯CSS实现+未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中。” 当然出题并不是随意,而是有其现实的原因,垂直居中是淘宝工作中最常遇到的...

    纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示

    本章节介绍一下如何实现未知宽高的元素在指定元素下实现垂直水平居中效果,代码简单易懂,需要的朋友可以参考下本

    Flex布局实现div内部子元素垂直居中的示例

    1、Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状...容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main en

    div图片垂直居中 如何使div中图片垂直居中

    “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中。” 当然出题并不是随意,而是有其现实的原因,垂直居中是 淘宝 工作中最常遇到的一个问题,很有代表性。 题目的难点在于两...

    div 垂直居中的多种方法详细介绍

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

    CSS设置DIV垂直居中的N种方法 兼容IE浏览器

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

    让图片垂直居中的使用方法

    “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中。” 当然出题并不是随意,而是有其现实的原因,垂直居中是 淘宝 工作中最常遇到的一个问题,很有代表性。 题目的难点在于两...

    浅谈最全面的水平垂直居中方案与flexbox布局

    最近又遇到许多垂直居中的问题,这是Css布局当中十分常见的一个问题,诸如定长定宽或不定长宽的各类容器的垂直居中,其实都有很多种解决方案。而且在Css3的flexbox出现之后,解决各类居中问题变得更加容易了。搜了搜...

    CSS中垂直居中的简单实现方法

    大家都知道css里面用text-align:center加上margin:0 auto就可以实现水平居中了,但是垂直居中却没有相应的css属性来设置,而如果要设置元素能够垂直居中必须得将容器设置为display:table,然后将子元素也就是要垂直...

    CSS教程:网页图片垂直居中的使用技巧

    “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中。” 当然出题并不是随意,而是有其现实的原因,垂直居中是 淘宝 工作中最常遇到的一个问题,很有代表性。 题目的难点在于两...

    全面总结使用CSS实现水平垂直居中效果的方法

    说起水平垂直居中大家常看到的是使用绝对定位与负margin的配合或者是inline-block配合vertical-align:middle等...为了更好的阐述后面的方案,我们这里有一个命题:让未知大小容器(未知行数的文本)实现水平垂直居中。

    未知长宽元素在已知300px*300px的容器中垂直居中(IE6/7/8/FF)

    加了很多HACK,顺便复习一下! *+property:value; /* IE7 */ _property:value; /* IE6 */ *property:value; /*IE6、IE7 共用*/ &lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” ...

    CSS教程之div垂直居中的多种方法

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

    css实现的让图片垂直居中的方法

    下图是理想中的效果图,外部容器的宽度和高度是固定的,中间的图片宽度和高度未知,但是图片要始终要相对于外部的容器垂直居中。 但是实际中实现的效果并不是很完美,由于各浏览器的解析都各不相同,所以各浏览器...

    对未知高度的图片设置垂直居中的方法详解

    该方法是将外部容器的显示模式设置成display:table,img标签外部再嵌套一个span标签,并设置span的显示模式为display:table-cell,这样就可以很方便的使用vertical-align象表格元素那样对齐了,当然这只是在标准...

    利用CSS3的flexbox实现水平垂直居中与三列等高布局

    因为对于三列等高自适应布局和水平垂直居中对齐需要一些对css3中flexbox基础概念的理解,所以会对flexbox的概念做一个简单的介绍,以为后面的实例做一个铺垫。本人一直认为,不管学习任何知识,对于概念的理解都十分...

Global site tag (gtag.js) - Google Analytics