2016-11-17 146 views
1

我正在学习CSS中的浮动元素,并遇到以下特殊行为。CSS - 意外浮动问题

下面是代码

<!DOCTYPE html> 
 
<html lang="en"> 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>Title</title> 
 
    <style> 
 

 
     #one { background-color: red; width: 200px; height: 200px; margin: 10px; } 
 
     #two { background-color: yellow; width: 200px; height: 205px; margin: 10px; } 
 
     #three { background-color: lightpink; width: 200px; height: 200px; margin: 10px; } 
 
     #four { background-color: green; width: 200px; height: 200px; margin: 10px; } 
 
     #five { background-color: coral; width: 200px; height: 200px; margin: 10px; } 
 
     #six { background-color: #b1ffea; width: 200px; height: 200px; margin: 10px; } 
 

 
     div{ 
 
      /*display: inline-block;*/ 
 
      float: left; 
 
      vertical-align: central; 
 
     } 
 

 

 
    </style> 
 

 
</head> 
 
<body> 
 

 
    <div id="one"> 
 
     First div 
 
    </div> 
 

 
    <div id="two"> 
 
     Second div 
 
    </div> 
 

 
    <div id="three"> 
 
     three div 
 
    </div> 
 

 
    <div id="four"> 
 
     four div 
 
    </div> 
 

 
    <div id="five"> 
 
     five div 
 
    </div> 
 

 
    <div id="six"> 
 
     six div 
 
    </div> 
 

 
</body> 
 
</html>

enter image description here

我的问题是,为什么 “四个格” 被放置在 “第三次DIV” 不是第一和第二下面?另一方面,如果我调整浏览器的大小(见下图),为什么在这种情况下它完美的工作?

enter image description here

回答

1

由于第二个div元素比第一个div高,第四个div与第二个div碰撞。当第四个div落到下一行时,它从右边开始,向左滑动,从第三个div开始,直到它与第二个div碰撞。如果你看看你的代码,每行有4个div元素,第五个div会下降到下一行。它从第四个div下面开始向左移动,直到它与第二个div碰撞,因为第二个div比第三个或第四个div元素长。

enter image description here

+0

它是如何滑动的?请详细说明或给你指的资源的网址 – Cody

+0

我添加了另一个例子,每行使用4个div元素。我会尽力找到一个资源指向你,但这就是浮动定位在元素高度不同时的工作原理。 –

+0

如果div元素具有预定的宽度,那么您可以使用CSS Media Queries将'clear:left;'添加到适当的':nth-​​of-type'中以使行均匀。 –

1

这是完全恢复正常运作。 div2的高度是205px而不是200px。将其更改为200px,它会正常工作。

0

我使用#two的CSS利润率检查这一调整...

enter image description here

这种变化后,div元素似乎都表现为你想让他们当浏览器的窗口宽度被调整了。

+0

我知道如何做到这一点。但我没有得到为什么“四格”没有放在第一格下面 – Cody

+0

w3schools.com有关于CSS盒模型的警告......重要提示:当您使用CSS设置元素的宽度和高度属性时,您只需设置内容区域的宽度和高度。要计算元素的完整大小,还必须添加填充,边框和边距。 (我希望能回答你的问题。) – JohnH

+0

@Cody正如我在我的回答中所说的,由于div 2比div 3高,因此div 4与div 2发生了碰撞。 –