首页论坛

纯css三列等高且高度自适应原理

投稿人:Even

前些日子在jq群上看到小魔兄发的一个纯css三列等高且高度自适应的代码.很是不解.而且前几天自己也没什么时间去研究.今天就仔细地看看了.(脑子清醒了.看东西也简单了...)
原来是这么个道理.利用padding跟margin的互补来解决.下面我就来解释一下这个原理.
先贴一下源码:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>CSS等高布局</title>
  6. <style type="text/css">
  7. * {
  8.         margin:0;
  9.         padding:0;
  10. }
  11. .wrap {
  12.         overflow:hidden;
  13.         width:1000px;
  14.         margin:0 auto;
  15. }
  16. .left, .center, .right {
  17.         margin-bottom:-10000px;
  18.         padding-bottom:10000px;
  19. }
  20. .left {
  21.         float:left;
  22.         width:250px;
  23.         background:#00FFFF;
  24. }
  25. .center {
  26.         float:left;
  27.         width:500px;
  28.         background:#FF0000;
  29. }
  30. .right {
  31.         float:right;
  32.         width:250px;
  33.         background:#00FF00;
  34. }
  35. </style>
  36. </head>
  37. <body>
  38. <div class="wrap">
  39.   <div class="left">
  40.     <p>左边内容</p>
  41.     <p>左边内容</p>
  42.   </div>
  43.   <div class="center">
  44.     <p>中间内容</p>
  45.     <p>中间内容</p>
  46.     <p>中间内容</p>
  47.     <p>中间内容</p>
  48.     <p>中间内容</p>
  49.     <p>中间内容</p>
  50.   </div>
  51.   <div class="right">
  52.     <p>右边内容</p>
  53.   </div>
  54. </div>
  55. </body>
  56. </html>
首先.我们要了解这里的padding的效果.这里的假设简略了一些样式设置:
一个height为10px的div,padding-bottom为100的话.它的总高度为110吧.而且背景也为110px.那他对他的父元素的高度其实也就是110px.是吧?
好.那这时.我再给一个margin-bottom:-100px.你们认为会怎样呢?
实际显示高度仍然为110px的div对于父元素来说却只有10px那么高.能理解么?
也就是说.就box-model上讲.padding是加了100px的内边距.这个padding内是不可编辑的.但是可以看到的.而从外边距margin确实负数的,这时为了反过来去掉因为padding而增加的总高度.也就是说.这个div对外的实际高度为10px,而实际显示的内容(包括背景)为110px.

理解了上面的原理.再回头看这代码..好好地整理一下思绪吧.
哦.发现了没?实际上.你最高的那个div对外的实际高度减去其他任何div对外的实际高度之后,那个差值只要是小于padding与margin那个值.这三列div看起来就是等高的..
但是.实质上.并不是等高的.只是背景上看起来等高而已.其实就是因为父元素根据最高的那个div截断了所有的div的因padding-bottom多出的高度.
如果你去设置border,你就会发现.其实下面的部分.全部都被隐藏了...这时.你们应该知道是怎么回事了吧.

别告诉我还不明白啊...
有不明白的,后期我再看看有没有时间搞个图片来说明

好累啊...完全用文字表达...对偶来说,太有挑战了...{:3_61:}

最新评论
  • Even: 回复 9# Sunny     xhtml+css.所以要注意!do
  • Sunny: !doctype....这么细致的问题都看见了····E锅就是锅····
  • 简单: 啊哦,确实的,是我选错模板了,书上有写,没想起来是这个问题。 我用netbeans编写HTML的,
  • Even: 回复 6# 简单 <!DOCTYPE html PUBLIC "-//W3C//DT
  • 简单: 回复 5# Even     真见鬼了,我把你的源码复制到ie
  • Even: <b>回复 <a href="http://bbs.cn09.com/r
  • 简单: 嗯,刚刚试验了。高度自适应问题解决,这个解决方式比我那本<精通CSS>里面提到的方法要好
  • 偶然音: {:2_31:}小E好犀利!
  • 简单: <DIV class=test>试试看</DIV>
更多评论...