负边距在布局中的应用

根据前几天对css负边距的研究(《浅析css负边距》),在理解负边距的原理之后,可以用在以下情况当中。

一、两列布局

1、右侧定宽,左侧宽度自适应

  思路:要实现效果,首先,左侧的宽度要能够自适应,那么宽度可选100%或auto,我们知道设置成100%会使左侧div的宽度为父元素的100%,设置成auto会根据左侧div的实际大小自适应宽度,那如果div里面有块级元素,右侧就会被挤到下一行,所以我们选择100%;然后我们需要在左侧div的右边空出位置给右侧div,那么只要把左侧div的宽度变短,设置右外边距为负值即可,然后负值是多少呢?当然是右侧div需要多少就是多少啦!

  实现:左侧和右侧的div都设置左浮动,左侧宽度100%,并设置margn-right为右侧宽度的负值。

  验证:代码如下。

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>右侧定宽,左侧宽度自适应布局</title>
 6 <style>
 7   #left{
 8     height: 200px;
 9     background-color: red;    
10     float: left;
11 
12     width: 100%;
13     margin-right: -200px;  
15   }
16   #right{
17     height: 200px;
18     background-color: blue;
19     width: 200px;
20     float: left;
21   }
22 </style>
23 </head>
24 <body>
25   <div id="wraper">
26     <div id="left"></div>
27     <div id="right"></div>
28   </div>
29 </body>
30 </html>

效果图如下图图一,且左侧缩放自如。

图一:

 

二、三列布局

1、左右两列定宽,中间一列宽度自适应

  思路:假设左右两列宽200px,要实现效果,可以让3个div都左浮动,然后给予一定的设置让它们能够显示在一行,主要就是让右列不要被挤下去,那么我们只要让中间列把右列的位置空出来即可,怎么空出来?不要再问了吧,不懂就看上文吧!

    实现:3个div都左浮动,左右两列定宽200px,中间列宽度设置为100%,留给右列的宽度绝对值为左列宽度加右列宽度400px。

    验证:代码如下。

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>右右定宽,中间宽度自适应布局</title>
 6 <style>
 7   *{
 8     margin: 0;
 9     padding: 0;
10   }
11   #left{
12     height: 200px;
13     width: 200px;
14     background-color: red;    
15     float: left;
16   }
17   #right{
18     height: 200px;
19     width: 200px;
20     background-color: blue;
21     float: left;
22   }
23   #middle{
24     height: 200px;
25     background-color: yellow;
26     float: left;
27 
28     width: 100%;
29     margin-right: -400px;
30   }
31 </style>
32 </head>
33 <body>
34   <div id="wraper">
35     <div id="left"></div>
36     <div id="middle"></div>
37     <div id="right"></div>
38   </div>
39 </body>
40 </html>

效果图如下图图二。

图二:

 

三、单列布局

  单列布局主要用在一个div垂直水平居中。

  思路:要实现效果,可以设置绝对定位,把top和left都设置为50%,这样div的左上角就到正中间了,但要实现效果我们是需要把div的中心点放到正中间,这时,我们可以利用负边距把div的中心点拉到正中间。怎么做呢?margin-top和margin-left再设置为width的一半的负值,使div向上、向左移动对应边长的一半,就把中心点拉过来了。

代码如下:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>垂直水平居中</title>
 6 <style>
 7   *{
 8       margin: 0;
 9       padding: 0;
10   }
11   #wraper{
12     width: 400px;
13     height: 200px;
14     background-color: red;
15 
16     position: absolute;
17     left: 50%;
18     top: 50%;
19     margin-left: -200px;
20     margin-top: -100px;
21   }
22 </style>
23 </head>
24 <body>
25   <div id="wraper"></div>
26 </body>
27 </html>

效果图如下:

posted @ 2015-08-31 17:54  lovelyun  阅读(375)  评论(0编辑  收藏  举报