css实现固定高度及未知高度文字垂直居中的完美解决方案

在工作当中我们经常碰到类似于"固定高度文字垂直居中及未知高度垂直居中问题",或者 "图片垂直居中问题",而我们最容易会想到使用表格来垂直居中,或者如果是单行文字的话使用height(高度)和line-height(行高)来解决,但是假如页面有多行文字的话 固定高度该怎么解决? 或者未知高度我们该用css怎么解决? 且兼容各个游览器!

一:单行文字垂直居中:

如果一个容器中只有一行文字的话,让他垂直居中比较简单 直接定义height(高度)和 line-height(行高)相等即可。

  如:<div style="height:25px;line-height:25px;overflow:hidden">aa</div>

二:多行文本固定高度垂直居中:

1. 除IE7及IE7以下游览器 多行文本固定高度垂直居中的解决方案。

  我们都知道 我们可以用表格的方式 实现文本垂直居中,同理 我们可以用css来模拟表格的方式垂直居中 vertical-align 属性只会对拥有valign特性的(X)HTML标签起作用,比如td等,但是对类似于span等这样的标签并不起作用,如果我们不考虑IE7及以下的话 我们可以用display:table 和 display:table-cell来模拟表格垂直居中。前者必须设置在父级元素上,后者必须设置在子元素上。比如 如下HTML代码:<div class="wrapper">

<div class="content">content age</div>

</div>

复制代码相对应的css代码如下:.wrapper{

height:400px;

display:table;

}

.content{

vertical-align:middle;

display:table-cell;

border:1pxsolid#FF0099;

background-color:#FFCCFF;

width:760px;

}

复制代码就可以实现除IE7及IE7以下的游览器支持文本垂直居中的问题!

2. 兼容IE6+ 火狐 google游览器的多行文本垂直居中的解决方案!

其实在标准游览器中 解决的方案如上,现在的问题我们该怎么解决IE7及以下的版本的问题了,我们可以考虑用定位的方式来解决,在IE6中对父元素进行定位后,如果再对子元素进行百分比计算时,计算的基础似乎是有继承性的(如果定位的数值是绝对数值没有这个问题,但是使用百分比计算的基础将不再是该元素的高度,而从父元素继承来的定位高度)。

比如HTML代码如下:<div class="wrap">

<div class="subwrap">

<div class="content">aaaaa</div>

</div>

</div>

复制代码我们可以对父级元素绝对定位 top:50%;然后在对子元素定位top:-50%,这样可以正好重叠了。css代码如下:.wrap{

border:1pxsolid#FF0099;

background-color:#FFCCFF;

width:760px;

height:400px;

position:relative;

}

.subwrap{

position:absolute;

border:1px solid #000;

top:50%;

}

.content{

border:1pxsolid#000;

position:relative;

top:-50%;

}

复制代码所以针对上面的解决方案,我们可以稍微优化下 在标准游览器下 我们使用类似于 表格的方式来解决  但是对于像IE7及以下的版本 我们可以使用绝对定位的方式来解决。所以优化下 css代码如下:.wrap{

display:table;

border:1pxsolid#FF0099;

background-color:#FFCCFF;

width:760px;

height:400px;

*position:relative;

overflow:hidden;

}

.subwrap{

vertical-align:middle;

display:table-cell;

*position:absolute;

*top:50%;

}

.content{

*position:relative;

*top:-50%;

}

复制代码三:多行文本 未知高度垂直居中的解决方案:

其实思路还是上面的一样 标准游览器版本下 采用类似于表格的方式来 垂直居中 解决,对于IE7 6下采用定位的方式来解决。如下代码

HTML:<div class="wrapper">

<div class="subwrap">

<div class="content">

关于 CSS 的未知高度水平垂直居中问题<br />

</div>

</div>

</div>

复制代码css:body {padding:0;margin:0;}

.content{border:1px solid red;width:500px;margin:0 auto;font-size:12px;line-height:1.8;}

/*标准游览器版本*/

html,body{height:100%;}

.wrapper{text-align:center;width:100%;height:100%;display:table;}

.subwrap{display:table-cell;vertical-align:middle;}

/*IE6*/

*html .wrapper{position:absolute;top:50%;width:100%;text-align:center;display:block;height:auto}

*html .subwrap{position:relative;top:-50%;text-align:center;}

/*IE7 可以合并 但是为了更好说明 没有合并*/

*+html .wrapper{position:absolute;top:50%;width:100%;text-align:center;display:block;height:auto}

*+html .subwrap{position:relative;top:-50%;text-align:center;}

时间: 2024-12-16 14:04:05

css实现固定高度及未知高度文字垂直居中的完美解决方案的相关文章

如何让未知高度div垂直居中

如何让未知高度div垂直居中:让div垂直居中对齐方法有多种多样,可以使用CSS让div在父元素中垂直居中,但是如果在不知道div高度的情况下将其在父元素中实现它的垂直居中对齐有难度,因为涉及到浏览器兼容性,下面就介绍一下通过js让未知高度的div在父元素中垂直居中,代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/htm

兼容各个浏览器的未知高度div垂直居中效果

兼容各个浏览器的未知高度div垂直居中效果:让div垂直居中与它的父对象中,并不像是让div在父元素中水平居中那么简单,只要简单的为此元素设置margin:0px auto即可,虽然将一些属性配合使用也可以将div垂直居中与父元素中,但是在某些浏览器中并不兼容,下面就介绍一种兼容各大浏览器的方式.先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta

多行文字垂直居中(完美兼容chrome firefox IE6 7 8 9)

在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有valign特性的元素才生 效,例如表格元素中的<td>.<th>.<caption>等,而像<div>.<span>这样的元素是没有valign特性的,因此使用vertic

关于未知高度的垂直居中

1.内容为纯文字的时候的垂直居中 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>未知高度垂直居中</title> <style type="text/css"> .box{width: 200px;height: 500px;background-color: yello

用CSS如何实现单行图片与文字垂直居中

从上面的代码可以看出错误就是把样式应用在块元素中了 我们只需要改样式为 以下为引用的内容:.style img{vertical-align:middle;.....} 如果STYLE中有其它如INPUT或其它内联元素可写成 以下为引用的内容:.style img,.style.input{vertical-align:middle;.....}或.style *{vertical-align:middle;.....}/*在不影响其它元素的情况下使用这个通配符*/ 以上是在没有设置高度/行高的

固定高度的多行文字垂直居中

假设有一个高度为100px的 div,在这里放一行文字,垂直居中显示,这个大家都会,line-height设置为100px即可!那如果有两行.三行......多行呢?还能通过 line-height 解决么?答案很明显不能!下面一起来看下: 方法: 一.HTML结构 <div class="wrap"> <div class="subwrap"> <div class="content">aaaaa<br

div垂直居中的N种方法 单行/多行文字(未知高度/固定高度)

说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的 CSSHack技术就可以啊!所以在这里我还要啰嗦两句,CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有 valign特性的元素才生 效,例如表格元素中的<td>.<th>.<caption>等,而 像<div>.<span>这样的元素是没有valign特性的,因此使用verti

CSS解决未知高度垂直居中

尽管有CSS的vertical-align特性,但是并不能有效解决未知高度的垂直居中问题(在一个DIV标签里有未知高度的文本或图片的情况下). 标准浏览器如Mozilla, Opera, Safari等.,可将父级元素显示方式设定为TABLE(display: table;) ,内部子元素定为table-cell (display: table-cell),通过vertical-align特性使其垂直居中,但非标准浏览器是不支持的. 非标准浏览器只能在子元素里设距顶部50%,里面再套个元素距顶部

DIV+CSS如何让文字垂直居中?(转)

此篇文章转自网络,但是我忘了原文地址,如果有人知道,麻烦告知一声~ 在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有valign特性的元素才生效,例如表格元素中的<td>.<th>.<caption>等,而像<div>.<spa