哈哈哈哈哈哈哈,我懂了原理啦
clear清除的是浮动的高度(就是跑到位置),而不影响浮动的方向.
原理如下:
clear清除的是元素本身,但不会影响方向。通俗点说就是clear清除的是浮动产生的文档流。举个例子,就是有2个div,当第二个div产生浮动时,第二个div会脱离第二行,到达第一行。当你清除它的时候,清除的就是这个跑的距离。
浮动的特性导致了与想象中的不一样。这特性指脱离文档流和上前补位。只要前面一个元素浮动了,空出了位置,后面一个元素就会跟着往前跑。直到把位置占领了为止。这里比较特殊的一点是,浮动有两个方向,左浮动和右浮动。而脱离文档流的div元素却并不怎么管这件事,他们的逻辑是只要有位置我就可以占领,直到没有位置为止。举个例子,有3个div,第一个div左浮动,此时,第二个div和第三个div会同时往上跑,第二个div就看不见了。但当第二个div也产生了浮动还是向右浮动时,第二个div就会在右边,能被看见,这时第三个div在第一个div下面看不见。当第三个div也向左浮动时,第三个div就会在第一个div的后面,被看见,此时他们成为一行。假设此页面现在一行一共只能容纳5个div,那么在给他一个向左浮动的div,这一行能放下,在给一个div则放不下了,此时这个div会在第一个div下面重新进行顺序排列。
clear
情况如下
两个div
第一:两个div
1.代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width:100px;
height:100px;
}
#d1{
background: rebeccapurple;
}
#d2{
background: plum;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
</body>
效果图如下
</html>
第一 1.两个div左浮动
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width:100px;
height:100px;
float: left;
}
#d1{
background: rebeccapurple;
}
#d2{
background: plum;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
</body>
效果如下
第一 2.两个div左浮动 第一个div深紫色清除左浮动
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width:100px;
height:100px;
float: left;
}
#d1{
background: rebeccapurple;
clear: left;
}
#d2{
background: plum;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
</body>
</html>
效果如下
原理如下:第一个深紫色div清除浮动,消除了脱离的文档流,但第一个文档流比较特殊,无法肉眼看见。因为清除并不影响它的方向,div的方向由浮动决定,所以此div还是在左。第二个div所占据的位置本来就是第一div剩下来的,现在第一个div跑回来了,第二个div也只能让位,反正无论如何,第二个div都活着第一个div的阴影下,向左浮动则救助了它,让他活成了自已
第一 3.两个div左浮动 第一个div深紫色清除右浮动
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width:100px;
height:100px;
float: left;
}
#d1{
background: rebeccapurple;
clear: right;
}
#d2{
background: plum;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
</body>
</html>
效果如下
第一 4.两个div左浮动 第二个div浅紫色清除左浮动
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width:100px;
height:100px;
float: left;
}
#d1{
background: rebeccapurple;
}
#d2{
background: plum;
clear: left;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
</body>
</html>
效果图如下
第一 5.两个div左浮动 第二个div 浅紫色清除右浮动
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width:100px;
height:100px;
float: left;
}
#d1{
background: rebeccapurple;
}
#d2{
background: plum;
clear: right;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
</body>
</html>
效果图如下
第一 6.两个div左浮动,第一个div深紫色都清除
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width:100px;
height:100px;
float: left;
}
#d1{
background: rebeccapurple;
clear: both;
}
#d2{
background: plum;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
</body>
</html>
效果图如下
第一 7.两个div左浮动 第二个div浅紫色都清除
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width:100px;
height:100px;
float: left;
}
#d1{
background: rebeccapurple;
}
#d2{
background: plum;
clear: both;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
</body>
</html>
效果图如下
第一 第一个div左浮动,第二个div右浮动
代码如下
<html lang="en">
<head>
<style>
div{
width: 100px;
height:100px;
}
#d1{
background: red;
float:left;
}
#d2{
background: green;
float: right;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
</body>
</html>
效果图如下
考虑到第一个div比较特殊,于是那第二个和第三个再次实验进行对比
第二.3个div
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width: 100px;
height:100px;
}
#d1{
background: red;
}
#d2{
background: green;
}
#d3{
background: gold;
}
</style>
</head>
<body>
<div id="#d1"></div>
<div id="#d2"></div>
<div id="#d3"></div>
</body>
</html>
效果图如下
第二 1.三个div 给第二个和第三个div进行float
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width: 100px;
height:100px;
}
#d1{
background: red;
}
#d2{
background: green;
float: left;
}
#d3{
background: gold;
float: left;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
</body>
</html>
效果图如下
第二 2.三个div 第三个元素清除左浮动-------这样考虑 是因为 元素清除浮动只能影响本身
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width: 100px;
height:100px;
}
#d1{
background: red;
}
#d2{
background: green;
float: left;
}
#d3{
background: gold;
float: left;
clear:left;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
</body>
</html>
效果图如下
第三 三个div都加了左浮动
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width: 100px;
height:100px;
}
#d1{
background: red;
float:left;
}
#d2{
background: green;
float: left;
}
#d3{
background: gold;
float: left;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
</body>
</html>
效果图如下
第三 1.三个div都加了左浮动 第二个元素清除左浮动
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width: 100px;
height:100px;
}
#d1{
background: red;
float:left;
}
#d2{
background: green;
float: left;
clear: left;
}
#d3{
background: gold;
float: left;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
</body>
</html>
效果图如下
第三 2.三个div都加了左浮动 第二个元素清除右浮动
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width: 100px;
height:100px;
}
#d1{
background: red;
float:left;
}
#d2{
background: green;
float: left;
clear: right;
}
#d3{
background: gold;
float: left;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
</body>
</html>
效果图如下
第四 这三个div第一个元素和第三个元素左浮动,第二个元素右浮动
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width: 100px;
height:100px;
}
#d1{
background: red;
float:left;
}
#d2{
background: green;
float: right;
}
#d3{
background: gold;
float: left;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
</body>
</html>
效果图如下
第四 1.这三个div 第一个和第三个左浮动,第二个绿色右浮动 清除第二个右浮动
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width: 100px;
height:100px;
}
#d1{
background: red;
float:left;
}
#d2{
background: green;
float: right;
clear: right;
}
#d3{
background: gold;
float: left;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
</body>
</html>
效果图如下:
第四 2.这三个div 第一个和第三个左浮动,第二个绿色右浮动 清除第二个左浮动
代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<style>
div{
width: 100px;
height:100px;
}
#d1{
background: red;
float:left;
}
#d2{
background: green;
float:right;
clear:left;
}
#d3{
background: gold;
float: left;
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
</body>
</html>
效果图如下
特别例子清除
我希望的效果是清除第4个div的浮动,让他位于前面三个div的下方。
clear:both和clear:left都实现了这个效果。
但是clear:right没有实现这个效果。
个人猜测是因为第四个元素的浮动方向是左侧,所以清除右侧的浮动无效,而clerr:both是两个方向的浮动都清除,所以才有效。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.one,.two,.c{
width:100px;
height:30px;
border:1px solid aquamarine;
float:left;
}
.d{
width:400px;
height:30px;
border:1px solid darkgoldenrod;
clear:right;
}
</style>
</head>
<body>
<div class="one"></div>
<div class="two"></div>
<div class="c"></div>
<div class="d"></div>
</body>
</html>