[网页基础]DIV+CSS学习笔记(三)盒子的定位与浮动

DIV+CSS学习笔记()

一、盒子的浮动

从这个例子开始学习:

<style type="text/css">

body{margin:50px;font-family:Arial; font-size:12px;   }

.father{background-color:#ffff99;border:1px solid #111111;padding:5px;}

.father div{padding:10px;margin:15px;border:1px dashed #111111;background-color:#90baff;}

.father p{border:1px dashed #111111;background-color:#ff90ba;}     

.son1{/* 这里设置son1的浮动方式*/}

.son2{/*这里设置son2的浮动方式*/}

.son3{/*这里设置son3的浮动方式*/}

</style>

<body>

    <div class="father">

                   <div class="son1">盒子-1</div>

                   <div class="son2">盒子-2</div>

                   <div class="son3">盒子-3</div>

                   <p>这里是浮动框外围的文字. 这里是浮动框外围的文字. 这里是浮动框外围的文字. 这里是浮动框外围的文字. 这里是浮动框外围的文字. 这里是浮动框外围的文字. 这里是浮动框外围的文字. 这里是浮动框外围的文字. 这里是浮动框外围的文字. 这里是浮动框外围的文字. 这里是浮动框外围的文字. 这里是浮动框外围的文字. 这里是浮动框外围的文字. 这里是浮动框外围的文字. 这里是浮动框外围的文字.</p>

         </div>

</body>

 

    一)设置第1个浮动的div

.son1{float:left ;height:10px;}/*盒子1浮动,且高度稍微缩小以便看出盒子2的状态*/

看看效果,如图:

 

说明:盒子2占据原来盒子1的位置,此时盒子1的宽度不再伸展,而是能容下最小宽度。盒子2的左边在原来盒子1的位置,因为此时盒子1己经脱离标准流,标准流中的盒子2会顶到原来盒子1的位置,而文字会围绕着盒子1排列。

二)设置第二个浮动的div

.son2{float:left;height:8px;}

 

说明:盒子3顶到原来盒子1的位置,但字符围绕着盒子1和盒子2排列。

三)设置第3个浮动的div

.son3{float:left;height:5px;}

 

说明:盒子1-3都浮动了,就象不存在了,最后的文字盒子占据第一个位置,但量,文字会围绕浮动的盒子排列。

四)改变浮动方向(将盒子3改为向右浮动)

.son3{float:right;height:5px;}

 

说明:盒子3向左浮动后,文字被挤在盒子2和3之间。

挤小浏览器窗口时如图:

 

再挤小浏览器窗口时如图:

 

挤到不能再小时,如图:

 

注意:并不一定都是盒子3被挤到下边,被挤到下边的盒子是越写在后边的盒子,越最先被挤到下边。

 

五)全部都向左浮动时:

当盒子1比较高时,缩小浏览器,谁会被挤到什么位置呢?挤到盒子1的下边还是盒子2的下边呢?这个很有趣:

.son1{float:left ;height:30px;}

.son2{float:left;height:8px;}

.son3{float:left;height:5px;}

<div class="father">

                   <div class="son1">盒子-1<br/>盒-1a</div>

                   <div class="son2">盒子-2</div>

                   <div class="son3">盒子-3</div>

                   <p>…… </p>

         </div>

 

说明:盒子3被挤到下一行,并向左移动,到了这个拐角的地方就会被卡住,而停留在盒子2的下边。

六)使用clear属性清除浮动的影响

clear 属性可以设置为left,right,或者both;特别注意:对clear属性的设置要放到文字所在的盒子里,例如一个p段落的CSS设置中,而不要放到对浮动盒子的设置里面。经常有人误以为在对某个盒子设置了float属性后,要消除它对外面的文字的影响,就要在它的CSS样式中增加一条clear,其实是没有用的。

.father p{border:1px dashed #111111;background-color:#ff90ba;clear:left;}

 

说明:这是清除左边,因为左边比较高,没看出右边的影响,意思是如果右边很高,清除左边,右边也可能会盖住文字的。

七)扩展盒子的高度

如果将文字所在的段落删除,这里在父div里面只有3个浮动的盒子,它们都不在标准流中,这时观察浏览器的效果如图:

 

父div缩成一条,是由padding和border构成的,也就是说一个div的范围是由它里面的标准流内容决定的,与里面的浮动内容无关,如果要使父div的范围包含这3个浮动盒子,有一个不算很理想的办法:

.father .clear{margin:0;padding:0;border:0;clear:both;}

<body>

    <div class="father">

                   <div class="son1">盒子-1<br/>盒子-1a</div>

                   <div class="son2">盒子-2</div>

                   <div class="son3">盒子-3</div>

                   <div class ="clear "></div>

         </div>

</body>

 

二、盒子的定位

一)static静态定位

默认的就是静态定位,表示块在原来应该在的位置上,即该值没有任何移动的效果。下边以这个静态例子作为试验讲解:

CSS代码如下:
<style type="text/css"> 
body{
 margin:20px;
 font :Arial 12px;
}
#father{
 background-color:#a0c8ff;
 border:1px dashed #000000;
 padding:15px;
}
 
#block1{
 background-color:#fff0ac;
 border:1px dashed #000000;
 padding:10px;
}
</style>

BODY代码如下:

<body>
 <div id="father">
       <div id="block1">Box-1</div>
 </div>
</body>

 

    二)相对定位position:relative;

    #block1{
 background-color:#fff0ac;
 border:1px dashed #000000;
 padding:10px;
 position:relative;      /* relative相对定位 */
 left:30px;
 top:30px;
}

 

说明:这里不是左边30,上边30像素,而是相对原来的位置(或应该在的位置),左边加30,上边加30像素的移动。还要记住:相对定位的盒子仍在标准流中,它对父块没有任何影响。

详细的比较,可以多设置几个子块来进行实验,总之相对偏移后,其它的子块会“以为”它还在原来的位置。

对于相对定位,就是以盒子本身在标准流中或者浮动时原本的位置作为偏移基准的。

三)绝对定位position:absolute;

以下边这个例子作为分析对象:

body{
 margin:20px;
 font-family:Arial;
 font-size:12px;
}
#father{
 background-color:#a0c8ff;
 border:1px dashed #000000;
 padding:15px;
}
#father div{
 background-color:#fff0ac;
 border:1px dashed #000000;
 padding:10px;
 }
#block2{
}
<body>
 <div id="father">
       <div >Box-1</div>
       <div id="block2">Box-2</div>
       <div >Box-3</div>
 </div>

 

1、使用绝对定位测试

#block2{
position:absolute;
top:0px;
right:0px;}
 

 

 

 

说明盒子3紧贴盒子1,仿佛盒子2不存在一样,盒子2脱离标准流。绝对定位是以浏览器窗口为基准来定位的。

2、改一下代码,为父div增加一个相对定位:

 #father{

   background-color:#a0c8ff;

   border:1px dashed #000000;

   padding:15px;

   position:relative;         /*相对定位*/

}

 

这时,父div是相对定位,盒子2就以父窗口为基准定位了。

四)固定定位fixed

固定定位跟绝对定位相似,区别在于定位的基准不是祖先元素,而是浏览器窗口。

 

三、z-index空间位置

想象页面为x-y轴,垂直于面面的方向为z轴,z-index整数值的大小决定大的显示在前。

 

四、盒子的display属性

这个属性很重要,将在很多地方发挥巨大的作用:

例:

<body>
 <div >Box-1</div>
 <div >Box-2</div>
 <div >Box-3</div>
 <span >Box-4</span>
 <span >Box-5</span>
 <span >Box-6</span>
 <div >Box-7</div>
 <span >Box-8</span>
</body>
 


原图如上,没有什么特殊效果,块级元素和行内元素,就应该是上边的效果,下边来做一个实验:
<body>
 <div style="display:inline">Box-1</div>
 <div style="display:inline">Box-2</div>
 <div style="display:inline">Box-3</div>
 <span style="display:block">Box-4</span>
 <span style="display:block">Box-5</span>
 <span style="display:block">Box-6</span>
 <div style="display:none">Box-7</div>
 <span style="display:none">Box-8</span>
</body>
显示的效果如下:

 

分析一下:
原来应该是块级元素的div变成了行内元素,原来是行内元素的span变成了块级元素,设置为none的两个盒子消失了。
可见:display属性可以将某个标记本来的元素类型改变或隐藏,呵呵,这个可以增加很大很大的灵活性。
 
posted @ 2012-10-29 01:30  小颗豆  阅读(4330)  评论(0编辑  收藏  举报