2012-11-03 39 views
0

说我有这样的HTML:为什么需要将两个块左移才能对齐?

​<div class = "block1">hi</div> 
<div class = "block2">hi</div> 

而这个CSS:

​.block1 { 
    width:100px; 
    border:1px solid; 
    float: left; 
} 

​.block2 { 
    width:100px; 
    border:1px solid; 
} 

为什么块2需要有float:left;以是块1的对不对? block1(float:left)的属性不够吗?

JsFiddle

+0

你必须在浮动后清除。 – Vucko

+0

froznekoi,现在它。对不起 –

+0

哪里是小提琴...没有链接... – Pranav

回答

3

block2被显示为缺省一个块级元素,这意味着它占用了一整行。

它不一定要有float:left出现在block1的右侧;如果它通过display:inlinedisplay:inline-block显示为内嵌级元素,则它将显示在其兄弟的旁边。

http://jsfiddle.net/8GF4B/1/

为了更详细地解释,让我们假设你已经在block2,而不是设置float:left

.block1 { 
    width:100px; 
    border:1px solid; 
} 

​.block2 { 
    width:100px; 
    border:1px solid; 
    float: left; 
} 

会发生的是,块2将被定位的第一件事,它通常会被定位。让我们找出在哪里。

  • BLOCK1被显示为块级元素,就好像它们之前和元件后
  • BLOCK2因此将默认显示在第二行
  • 有换行符
  • 块级元素呈现

现在block2被取出正常流程,并尽可能向左移动,但它已经在左边缘!这导致块2显示在块1下面。

看一看这里的内联和块级元素之间的区别的一个很好的解释:https://developer.mozilla.org/en-US/docs/HTML/Block-level_elements

+0

但我设置宽度为100px,所以它应该能够去右... –

+0

正确,但那种“横向堆叠”行为只适用于内联元素或浮动元素。 –

+0

好的,但是当它是一个display:block时,为什么我需要设置float:left,使元素位于第一个块的右侧?这个属性并不意味着“去正确的”,是吗? –

0

<div>元素是块级元素意味着这将是其单独的线,所以你需要在floatblock2,因为它是一个div元素。

相关问题