使用CSS简单实现垂直居中(3)

作者:dudo 来源:dudo blog 时间:2008-06-23 07:32:00 

为什么这样可行呢?

实际上这里涉及到浮动的一个有趣的行为,而且也比较好理解它的原理。为什么当我们使用一个静态元素(或者是第一个示例中绝对定位元素)时内容会从窗口的顶端消失,而当我们使用float时却不会产生这个问题呢?

浮动的一个特点就是他们脱离了文本流(尽管你可以通过为后面的元素使用clear来重新控制它们)。浮动元素后面的内容会被移动以为浮动元素留空间(通常是通过浏览器对静态顶部填充来清除浮动)。如果浮动元素根本没有出现该位置,那么后面的内容会占居浮动元素原来在页面中的位置。因此对一个浮动元素使用负的顶部填充(margin),浮动元素会冲破任何包含它的块级元素限制,因为我们前面已经提到浮动元素一开始就脱离了文本流。但是如果我们把元素从包含它的块级元素向外拖动足够远以至于它完全超出父元素范围,那么它后面的任何元素将不会继续跟随其向上移动,但是重新设定包含块级元素的内部内容的大小,会使浮动元素继续浮动。

这就是我们的例子中发生的事情,浮动元素被从body中向上移动,它后面的元素被迫留在body形成的块级元素中。这可能有点难以直接去理解,但是我们可以看一下下面的这个演示。


.float{   
   width:200px;   
  height:100px;   
 background:red;   
   float:left;   
}   
.top{   
 background:green;   
 height:300px;   
 width:100%;   
}   
.follow-on{   
   clear:both;   
   background:blue;   
  height:100px  
}  

<div class="top">Top</div>
<div class="float">Float</div>
<div class="follow-on">Following content</div>

上面的代码在页面的顶端设置了一个静态元素,其后是一个浮动元素,再后是其它的静态内容,它就产生了如图5所示的效果,或者可看在线演示Horizontal-and-vertical-centerl.htm (.64 KB)

图5

没有什么特别需要注意的,一切如同我们相像的一样。

如果下面我们给浮动元素增加一个负的100px的顶端边距,我们就得到如图6所示的结果:

.float{   
   width:200px;   
  height:100px;   
 background:red;   
   float:left;   
   margin-top:-100px  
}  

图6


仍然和我们料想的一样,但是如果我们增加负的200px的顶端填充又会发生什么呢?

.float{   
   width:200px;   
  height:100px;   
 background:red;   
   float:left;   
   margin-top:-200px  
}  

图7显示了结果:

图7

和你看到的一样,浮动元素从后面的内容中移走,但是浮动元素后面的内容仍然会停留在包含它的元素的顶端(如在绿色元素的下面)。在我们的前面的例子中,当我们向外移动浮动元素时,也是发生了同样的事情。

但是如果我们从红色的div去掉float属性,那么红色的div和它后面下面的内容就会被移动到绿色元素的上面。

图8

浮动元素负的边距产生变化,后面的内容也会相应地向上移动。

我希望这个小的提示会让你感兴趣(即使你已经知道了),这也说明对于我们每一个人都有新的东西要去学习。前面的例子中所有的代码都已经放在了<head>中,方便大家查看。

如果你想了解一些更多高级的居中设计技术,我这里还有其它几个方法供参考。好运!

dudo注:在我前面的文章中,我已经总结果实现水平居中垂直居中的方法,你可以对比参照一下。

再p.s. 前几点做了几道,类似的题,好像也是犯了两样的毛病,汗~!

原谅链接:http://www.search-this.com/2008/05/15/easy-vertical-centering-with-css/

中文翻译:http://www.dudo.org/article.asp?id=251

标签:居中,css,浮动
0
投稿

猜你喜欢

  • css彩色虚线表格及JS鼠标指向单元格变色制作方法

    2007-08-10 13:08:00
  • Sql Server基本函数

    2008-08-20 18:28:00
  • 数据安全之MySQL安全的二十三条军规

    2008-12-24 16:26:00
  • swfupload上传使用代码说明ASP版

    2011-11-27 09:34:32
  • 使用 TRUNCATE TABLE 删除所有行

    2008-04-24 19:20:00
  • 关于CSS中字号控制的兼容性研究

    2010-01-23 12:48:00
  • 对学好网页设计很有价值的一句话

    2007-10-28 16:04:00
  • asp函数InstrRev()介绍及获取文件名例子

    2007-11-19 19:01:00
  • MySQL权限分配

    2011-01-29 16:37:00
  • Sql Server 2012 转换函数的比较(Cast、Convert和Parse)

    2012-08-21 10:21:40
  • 群组功能和用户沟通

    2009-07-19 14:07:00
  • 如何获知用户的IP?

    2009-11-24 20:52:00
  • 新功能的帮助与破坏

    2010-01-17 10:15:00
  • XML文件的显示——CSS和XSL

    2007-10-15 18:48:00
  • jQuery选择器 学习总结

    2008-06-15 15:41:00
  • 网站508规范(译)

    2008-04-03 13:26:00
  • 如何为Access数据库表添加日期或时间戳

    2008-11-21 12:46:00
  • 使用AJAX技术的十大理由

    2008-04-30 13:21:00
  • 从浏览器想开去

    2008-07-29 12:52:00
  • 浅谈web分析

    2008-12-02 15:52:00
  • asp之家 网络编程 m.aspxhome.com