CSS布局中说到定位就不得不提浮动,浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。
### 一,float属性的定义和用法
float属性:设置元素浮动
可能的值:
none 不浮动,在文档流内,默认
left 左浮动,脱离文档流
right 右浮动,脱离文档流
inherit规定应该从父元素继承 float属性的值。
float属性定义元素在哪个方向浮动。以往这个属性总应用于图像,使文本围绕在图像周围,不过在CSS中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。如果浮动非替换元素,则要指定一个明确的宽度;否则,它们会尽可能地窄。假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止。
我们用图示和实例来理解元素的浮动:
(1)三个不浮动元素的图示和效果:
![](https://box.kancloud.cn/2016-04-28_5721559a96005.jpg)
~~~
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>CSS布局之漂浮</title>
<style type="text/css">
#test {
border:#FF00FF solid 1px;
width:700px;
height:400px;
margin:auto;
}
#div_1 {
background-color:#00FF00;
width:200px;
height:100px;
}
#div_2 {
background-color:#FFFF00;
width:200px;
height:100px;
}
#div_3 {
background-color:#FF0000;
width:200px;
height:100px;
}
</style>
</head>
<body>
<div id="test">
<div id="div_1">区域1</div>
<div id="div_2">区域2</div>
<div id="div_3">区域3</div>
</div>
</body>
</html>
~~~
![](https://box.kancloud.cn/2016-04-28_5721559aa7515.jpg)
当没有设置元素浮动的时候,由于我们使用的是div元素是块级元素,我们看到三个元素依次排列到元素的下面,而不会是接着元素排列。
(2)第一个元素向左浮动的图示和效果:
![](https://box.kancloud.cn/2016-04-28_5721559ab81a2.jpg)
改写第一个元素向左浮动的代码:
~~~
#div_1 {
background-color:#00FF00;
width:200px;
height:100px;
float:left;
}
~~~
![](https://box.kancloud.cn/2016-04-28_5721559ad2f7f.jpg)
当元素1向左浮动时,它脱离文档流并且向左移动,直到它的左边缘碰到包含框的左边缘。因为它不再处于文档流中,所以它不占据空间,实际上覆盖住了元素2,使元素2从视图中消失。
(3)第一个元素向右浮动的图示和效果:
![](https://box.kancloud.cn/2016-04-28_5721559ae270d.jpg)
改写第一个元素向右浮动的代码:
~~~
#div_1 {
background-color:#00FF00;
width:200px;
height:100px;
float:right;
}
~~~
![](https://box.kancloud.cn/2016-04-28_5721559b0699c.jpg)
当把元素1向右浮动时,它脱离文档流并且向右移动,直到它的右边缘碰到包含框的右边缘。
(4)设置三个元素均向左浮动的图示和效果:
![](https://box.kancloud.cn/2016-04-28_5721559b196c1.jpg)
改写三个元素都向左浮动的代码:
~~~
#div_1 {
background-color:#00FF00;
width:200px;
height:100px;
float:left;
}
#div_2 {
background-color:#FFFF00;
width:200px;
height:100px;
float:left;
}
#div_3 {
background-color:#FF0000;
width:200px;
height:100px;
float:left;
}
~~~
![](https://box.kancloud.cn/2016-04-28_5721559b2a382.jpg)
如果把所有三个框都向左移动,那么框 1 向左浮动直到碰到包含框,另外两个框向左浮动直碰到前一个浮动框。
(5)如果包含框太窄,无法容纳水平排列的三个浮动元素,那么其它浮动块向下移动,直到有足够的空间:
![](https://box.kancloud.cn/2016-04-28_5721559b3caa9.jpg)
~~~
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>CSS布局之漂浮</title>
<style type="text/css">
#test {
border:#FF00FF solid 1px;
width:500px;
height:400px;
margin:auto;
}
#div_1 {
background-color:#00FF00;
width:200px;
height:100px;
float:left;
}
#div_2 {
background-color:#FFFF00;
width:200px;
height:100px;
float:left;
}
#div_3 {
background-color:#FF0000;
width:200px;
height:100px;
float:left;
}
</style>
</head>
<body>
<div id="test">
<div id="div_1">区域1</div>
<div id="div_2">区域2</div>
<div id="div_3">区域3</div>
</div>
</body>
</html>
~~~
![](https://box.kancloud.cn/2016-04-28_5721559b4ddaf.jpg)
(6)如果浮动元素的高度不同,那么当它们向下移动时可能被其它浮动元素“卡住”:
![](https://box.kancloud.cn/2016-04-28_5721559b5ef6d.jpg)
改写第一个元素的高度的代码:
~~~
#div_1 {
background-color:#00FF00;
width:200px;
height:150px;
float:left;
}
~~~
![](https://box.kancloud.cn/2016-04-28_5721559b71e41.jpg)
那么我们会在第二个实例中看到浮动元素遮住了文档流的区域,那么我们怎么做,才能看到元素2的内容呢?下面我们就来解决这个问题:使用clear属性。
### 二,clear属性
浮动清除的定义和用法
clear属性规定元素的哪一侧不允许其他浮动元素。在CSS1和CSS2中,这是通过自动为清除元素(即设置了clear属性的元素)增加上外边距实现的。在CSS2.1中,会在元素上外边距之上增加清除空间,而外边距本身并不改
变。不论哪一种改变,最终结果都一样,如果声明为左边或右边清除,会使元素的上外边框边界刚好在该边上浮动元素的下外边距边界之下。
可能的值
left 在左侧不允许浮动元素。
right 在右侧不允许浮动元素。
both 在左右两侧均不允许浮动元素。
none 默认值。允许浮动元素出现在两侧。
inherit规定应该从父元素继承 clear 属性的值。
我们用图示和实例来理解元素的清除浮动:
实例:先回过头来看实例(2)的效果,我们设置第二个元素有清除浮动元素属性:
~~~
#div_2 {
background-color:#FFFF00;
width:200px;
height:100px;
clear:left;
}
~~~
![](https://box.kancloud.cn/2016-04-28_5721559b82afd.jpg)
### 三,浮动和清除浮动的结合
我们先来看个例子:
~~~
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>CSS布局</title>
<style type="text/css">
#test {
margin:auto;
}
#div_1 {
background-color:#00FF00;
width:200px;
height:100px;
float:left;
}
#div_2 {
background-color:#FFFF00;
width:200px;
height:100px;
float:left;
}
#div_3 {
background-color:#FF0000;
width:200px;
height:100px;
float:left;
}
</style>
</head>
<body>
<div>欢迎访问某某网站</div>
<div id="test">
<div id="div_1">区域1</div>
<div id="div_2">区域2</div>
<div id="div_3">区域3</div>
</div>
<div>这是一些文本内容</div>
</body>
</html>
~~~
![](https://box.kancloud.cn/2016-04-28_5721559b97e83.jpg)
我们从结果中看出浮动的元素并没有融入到我们编辑的整个文档流中,从布局来看,文本内容应该紧接着区域块的内容向下另起一行排列,但是并没有达到预期的效果。
如何让浮动元素融入到整个文档流布局中?
结合实际我们找到了一个可行的方法,在浮动元素的区域块中再添加一个div,设置这个div为清除浮动属性,这样浮动元素就真实存在文档流中。
~~~
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>CSS布局</title>
<style type="text/css">
#test {
margin:auto;
}
#div_1 {
background-color:#00FF00;
width:200px;
height:100px;
float:left;
}
#div_2 {
background-color:#FFFF00;
width:200px;
height:100px;
float:left;
}
#div_3 {
background-color:#FF0000;
width:200px;
height:100px;
float:left;
}
#clear {
clear:both;
}
</style>
</head>
<body>
<div>欢迎访问某某网站</div>
<div id="test">
<div id="div_1">区域1</div>
<div id="div_2">区域2</div>
<div id="div_3">区域3</div>
<div id="clear"></div>
</div>
<div>这是一些文本内容</div>
</body>
</html>
~~~
看一下效果:
![](https://box.kancloud.cn/2016-04-28_5721559baa8c3.jpg)
- 前言
- HTML学习1:Dreamweaver8的安装
- HTML学习2:初识HTML
- HTML学习3:常用标签之文本标签
- HTML学习4:常用标签之列表标签
- HTML学习5:常用标签之图像标签
- HTML学习6:常用标签之超链接标签
- HTML学习7:常用标签之表格标签
- HTML学习8:常用标签之框架标签
- HTML学习9:常用标签之表单标签
- HTML学习10:表单格式化
- HTML学习11:HTTP 方法
- HTML学习12:其他常见标签之头标签
- HTML学习13:其他常见标签之体标签
- 轻松学习JavaScript一:为什么学习JavaScript
- 轻松学习JavaScript二:JavaScript语言的基本语法要求
- 轻松学习JavaScript三:JavaScript与HTML的结合
- 轻松学习JavaScript四:JS点击灯泡来点亮或熄灭这盏灯的网页特效映射出JS在HTML中作用
- 轻松学习JavaScript五:JavaScript的变量和数据类型
- 轻松学习JavaScript六:JavaScript的表达式与运算符
- 轻松学习JavaScript七:JavaScript的流程控制语句
- 轻松学习JavaScript八:JavaScript函数
- 轻松学习JavaScript九:JavaScript对象和数组
- 轻松学习JavaScript十:JavaScript的Date对象制作一个简易钟表
- 轻松学习JavaScript十一:JavaScript基本类型(包含类型转换)和引用类型
- 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(一)
- 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(二)
- 轻松学习JavaScript十三:JavaScript基于面向对象之继承(包含面向对象继承机制)
- 轻松学习JavaScript十四:JavaScript的RegExp对象(正则表达式)
- 轻松学习JavaScript十五:JavaScript之BOM简介
- 轻松学习JavaScript十六:JavaScript的BOM学习(一)
- 轻松学习JavaScript十七:JavaScript的BOM学习(二)
- 轻松学习JavaScript二十九:JavaScript中的this详解
- CSS基础学习一:CSS概述
- CSS基础学习二:如何创建 CSS
- CSS基础学习三:CSS语法
- CSS基础学习四:元素选择器
- CSS基础学习五:类选择器
- CSS基础学习六:id选择器
- CSS基础学习七:属性选择器
- CSS基础学习八:派生选择器
- CSS基础学习九:伪类
- CSS基础学习十:伪元素
- CSS基础学习十一:选择器的优先级
- CSS基础学习十二:CSS样式
- CSS基础学习十三:盒子模型
- CSS基础学习十四:盒子模型补充之display属性设置
- CSS基础学习十五:盒子模型补充之外边距合并
- CSS基础学习十六:CSS盒子模型补充之border-radius属性
- CSS基础学习十七:CSS布局之定位
- CSS基础学习十八:CSS布局之浮动
- CSS基础学习十九:CSS布局之图文混排,图像签名,多图拼接和图片特效
- DIV+CSS实操一:经管系网页总体模块布局
- DIV+CSS实操二:经管系网页添加导航栏和友情链接栏
- DIV+CSS实操三:经管系网页内容模块添加标题栏和版权信息模块
- DIV+CSS实操四:经管系网页内容模块内容添加(一)
- DIV+CSS实操五:经管系网页内容模块内容添加(二)
- DIV+CSS实操六:经管系网页添加导航栏下拉菜单
- DIV+CSS实操七:中文系内容模块控制文本不换行和超出指定宽度后用省略号代替
- JS中实现字符串和数组的相互转化