Expectation vs. Reality of CSS Float Behavior
In CSS, the float property is commonly used to align elements horizontally. However, there can be unexpected behaviors when using it alongside other elements.
The Issue
The following example illustrates a common misunderstanding:
<code class="html"><div class="inline"> first line<br> second line<br> third line<br> </div> <div class="yellow">floated div</div></code>
<code class="css">.inline { float:left; } .yellow { background-color:yellow; }</code>
In this example, you might expect the second div (with the yellow background) to align to the right of the first div. However, as seen in the live example, it still occupies the entire width of its container.
Understanding the Behavior
This behavior is actually the intended result of float positioning. When an element is floated, subsequent content flows down the right side of that element. However, the width of the containing block (set by the following element) is still reserved.
As per the CSS specification, block-level elements (such as div and p) that are not positioned disregard the float. Line boxes, on the other hand, flow along the float's side, but their width is shortened.
The Solution
To achieve the expected result, where the second div aligns correctly, you can add an overflow property with a value other than visible to the second div. This prevents it from overlapping the floated element, as specified in the CSS level 2.1 spec.
Example
<code class="css">.yellow { overflow: hidden; }</code>
With this addition, the second div will no longer extend beyond the floated element, creating the desired alignment.
Overlapping's Purpose
Overlapping is useful in situations where the subsequent content is long enough to continue beyond the floated element. If overlapping were restricted by default, the content would not continue under the floated element, creating unexpected results.
The above is the detailed content of Why Doesn\'t My Floated Element Align Correctly?. For more information, please follow other related articles on the PHP Chinese website!