CSS 宽度自适应总结

前些日谈到布局,学长说,你给我写个“一边固定宽度一边自适应”。我当时有点蒙圈,回去查了些资料现在总结了一下。

1.问题:什么叫做自适应?
    有两种情形,其实这两种还蛮不同的。放在一起来总结吧。
情形一:宽度自适应,一列定宽,一列自适应,随窗口大小改变而无滚动条出现。

      情形二:高度自适应,创建高度相等的列。


-------------这篇文先说【第一种情况】吧~ 就考虑左侧定宽200px,右侧自适应咯~----------------------


2.      思路?
定宽的列,自然会想到要设置宽度,暂且设置为200px。
自适应的列,其宽度需为100%。
高度均为200px,设置背景颜色用来区别两个Div。
贴上 代码
  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" xml:lang="en">

  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
  5. <title>Try</title>
  6. <style type="text/css">
  7.         *{
  8.                 margin: 0;
  9.                 padding: 0;
  10.         }
  11.         #left{
  12.                 width: 200px;
  13.                 height:200px;
  14.                 background-color: red;
  15.         }
  16.         #right{
  17.                 width: 100%;
  18.                 height: 200px;
  19.                 background-color: blue;
  20.         }
  21. </style>
  22. </head>

  23. <body>
  24. <div id = "wrapper">
  25.         <div id = "left">Left</div>
  26.         <div id = "right">Right</div>
  27. </div>
  28. </body>
  29. </html>

会是什么情形呢?




     不难理解。因为div是块元素,所以左div占据一行,宽度为200px。右侧div占据一行,宽度为100%(相对父元素wrapper)。


   3. OK, 现在【最重要的是】,考虑如何让两者同在一行!!!
    有2种方式:absolute方式和float方式。

 

     4.  absolute方式   
   
     左div设置position:absolute;使其脱离文档流,相对父div的最左绝对定位。它像不存在了一样,于是右div就‘上’来了。

#wrapper{

 position:relative;

_height:1%;/*IE6hack*/

}

#left{

position:absoult;

left:0;

}

 

    (IE 6在相对定位时有Bug,要给wrapper加个hack。这里就不赘述了。)
         看看效果吧~          
         看到了神马?!!
            对!右div是上来了,可左div无情的把右div的文字挡住了。
         这时候,我们只需要给父div加个padding-left,让右div往右串“左div的宽度”即可。

#wrapper{

Padding-left:200px;

}

看看效果咯。
         Chrome中


         IE6也如此哦~嘻嘻


         OK,absolute方式完毕,下面介绍float方式。


5.  float方式:

        这里稍稍调整一下HTML的代码。因为涉及到负margin的问题。
      (大家思考一下为什么要调整顺序,我也是想了好久才想明白的,但是说不太明白~可以调一下顺序再写写CSS,你会更理解的~)
贴上HTML代码:
  1. <div id = "right">
  2.         <div>Right</div>
  3. </div>
  4. <div id = "left">Left</div>       
复制代码

CSS的宽高和上面的例子一样,看看效果。
         



        因为块元素的问题,所以不难理解,两者各占据一行。HTML代码中右div在上,故蓝色的在上,红色在下。
        同样的,如何让2者在一行呢?!
        答案是,浮动呗!

 

#left{

float:left;

}

#right{

float:right;

}

 

你认为这就会在一行么?
       看看效果
         

             发现二者还是各占一行。为什么呢?因为右div的宽是100%,就算浮动了,该行也没有左div的位置啊,于是,牛X的负margin就出现了!

#right{

margin:0 0 0 -200px;

}

 

这句相当于右div的左边留了个200px宽的空儿,说:这地儿让给你们了。于是左div就浮了上来。
         

           又怎么了?
       可是发现左div又给右div挡住了。可以看到HTML中【别具匠心的】在右div里嵌套了一个div,控制它的位置就可以了。

#right div {

margin-left:200px;

}

 

 
看看效果:
         
         IE6也如此哦~大功告成!


6.  总结一下吧。
     其实最主要的是,如何让两个Div同处一行,而这两个div有一个的宽度还是特殊的100%。
     浏览器缩放的时候还不能有任何奇怪的事发生哦,这个只有试试才知道!
     要深刻的理解绝对定位absolute和浮动float,此处负margin是重头戏!参考《精通CSS 高级标准web解决方案》

     Over,第一篇技术文分享。有错误的地方,大家敬请指出!!!进步进步进步!!!!!
   
     刚刚还傻傻的用代码发芽网一次次的贴代码来着,原来帖子这样写啊~长见识长见识。。。。。嘻嘻
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值