展会信息港展会大全

css vertical-align:middle来实现垂直居中
来源:互联网   发布日期:2016-03-25 16:14:38   浏览:2400次  

导读:文章介绍了关于在css中如何实现垂直居中页面中间了,今天我们来介绍关于divvertical-align:middle来实现垂直居中的方法代码如下复制代码 <!DOC...

文章介绍了关于在css中如何实现垂直居中页面中间了,今天我们来介绍关于divvertical-align:middle来实现垂直居中的方法

代码如下

复制代码

<!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>

<title>404页面</title>

</head>

<body>

<div class="wall">

<a href="index.html"><img class="img404" src="images/404.jpg" alt="404页面" /></a>

</div>

</body>

</html>

代码很简单,就一个class="wall"的div标签,一个a标签,一个class=“img404”的img标签。

接下来就是写css了,先让class="wall"的div的宽和高都为100%,以填充整个页面,CSS如下:

代码如下

复制代码

<style type="text/css">

body{ margin:0; background:#333; _height:100%;}

.wall{ width:100%; height:100%; position:absolute; left:0; top:0; text-align:center;}

.img404{ border:0;width:700px;}

</style>

上CSS里面值得一说的恐怕就是为什么要用绝对定位(position:absolute)以及_height:100%这个样式了;我试了很多方法,结果我只能用绝对定位才能让它的height:100%生效,当然固定定位(position:fixed)也是可以的,可是IE6不支持;_height:100%是为了兼容IE6,让class="wall"的div在IE6里也能高度为100%。如果想验证一下class="wall"的div现在是否已经填充了整个页面,不妨在.wall里面设一个背景色就可以知道了,这里我就不做实验了。

目前整页的代码如下:

代码如下

复制代码

<!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>

<title>404页面</title>

<style type="text/css">

body{ margin:0; background:#333; _height:100%;}

.wall{ width:100%; height:100%; position:absolute; left:0; top:0; text-align:center;}

.img404{ border:0; width:700px;}

</style>

</head>

<body>

<div class="wall">

<a href="index.html"><img class="img404" src="images/404.jpg" alt="404页面" /></a>

</div>

</body>

</html>

vertical-align:middle来实现垂直居中了,因为class="wall"的div填充了整个页面,所以只要让图片在class="wall"的div里面垂直居中就达到目的了。以前总是以为vertical-align与text-align是同样的道理,一个是垂直居中,一个是水平居中,只要给class="wall"的div加上一个vertical-align:middle就能让图片垂直居中,结果一点效果也没有。事实上vertical-align与text-align完全不一样,给class="wall"的div加上一个text-align:center的话,毫无疑问是可以让里面的img水平居中,但vertical-align却不能这样子用。

先看一下W3C上对vertical-align的定义:vertical-align 属性设置元素的垂直对齐方式。该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。允许指定负长度值和百分比值。这会使元素降低而不是升高。在表单元格中,这个属性会设置单元格框中的单元格内容的对齐方式。

必须承认这句话我看了很久才看懂说的是神马意思,我的理解是它有两种用法:

第一种用法,先看后面一句“在表单元格中,这个属性会设置单元格框中的单元格内容的对齐方式。”这很容易理解,如果给一个表格的td加一个vertical-align:middle的样式,表格里面的内容会垂直居中,同样的如果给一个vertical-align:bottom就会底部对齐,如果给一个vertical-align:top就会顶部对齐。

第二种用法,看前页一句“该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。”专业的语言我不会说的,可以打个比喻:假设有两个行内元素a和b,a和b都是img,当a加了一个vertical-align:middle样式之后,b的底部(基线)就会对齐a的中间位置,如下图:

如果a和b都加了一个vertical-align:middle样式,那么就互相对齐了对方的中间位置,也就是它们在垂直方向上的中线对齐了,如下图:

说到这里,思路就清晰了(PS:理应知道vertical-align可以设middle,top,bottom等等,甚至可以设置具体的值或百分比,如果想知道会有怎样的效果,可以自己实验一下,这里就不多说了。)。

接下来回到这篇文章的主题,现在我要让class="img404"的img在class="wall"的div里面垂直居中,我可以在div里面加一个span空标签,把它的高度设为100%,再给它一个vertical-align:middle样式,同样地给img一个vertical-align:middle样式,那么img就可以在div里面垂直居中了。如图:

代码如下

复制代码

<!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>

<title>404页面</title>

<style type="text/css">

body{ margin:0; background:#333; _height:100%;}

.wall{ width:100%; height:100%; position:absolute; left:0; top:0; text-align:center; font-size:0;}

.img404{ border:0; width:700px; vertical-align:middle;}

.verticalAlign{ vertical-align:middle; display:inline-block; height:100%; width:1px; margin-left:-1px;}

</style>

</head>

<body>

<div class="wall">

<span class="verticalAlign"></span>

<a href="index.html"><img class="img404" src="images/404.jpg" alt="404页面" /></a>

</div>

</body>

</html>

以上的CSS里面值得一提的是.verticalAlign,加一个display:inline-block是为了触发它的layout,以让本来没有layout的span可以设置宽和高,margin-left:-1px是为了让span左移一个像素,而令img在水平方向上回到正中位置;另外.wall里面的font-size:0正如我上一篇文章所说的是为了消除代码换行所造成的空隙。

最终效果如下:

关于

I'm trying to align some text of different sizes vertically, however, Firefox displays the smaller text way above the middle.

CSS:

代码如下

复制代码

div.categoryLinks {

margin: 1em 16px;

padding: 0 4px;

border-width: 1px 0;

border-style: solid;

border-color: #ece754;

background: #f7f5b7;

color: #a49f1c;

text-align: center;

font-size: 1.4em;

}

div.categoryLinks em {

font-size: 0.6em;

font-style: normal;

vertical-align: middle;

}

HTML:

<div class="categoryLinks">

<em>SECTION:</em>

Page One

Page Two

<a href="link">Page Three</a>

</div>

Screenshot:

UPDATE: just to be clear, I am aware more-or-less how vertical-align works, i.e. I already know the common misconceptions.

赞助本站

人工智能实验室

相关热词: 开发 编程 android

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港