Clemzd
Clemzd

Reputation: 945

How to resize the width of div left to another which has float:left;?

I still have problem to well understand how the float property works in CSS. I do apologize because I know this is css basics but I really want to understand that and get a good explanation. I've created an example to show you. Here is my page : image

I just want to resize the second div at the right. When I look at it in the Chrome Developer Tools, I see that this div begins at the top left of the window and not after the red square. I'd like it to begins just after the red square to change the width properly without calculating the size of the square and doing something like

width = square size + width i want

Do you know how this it happens and how to properly resize the width of the second div ?

EDIT: the solution consists in add the float property to the second div too. The explanation is the following : floated elements are removed from the flow, so they don't stack with the non-floated elements.

Upvotes: 0

Views: 1805

Answers (5)

UID
UID

Reputation: 4514

You have to set float for both DIVs

Here is the updated code:

HTML:

<div id="main_container">
    <div class="left"></div>
    <div class="right">
        <p>This is the description of the image <i>Random text</i>

        </p>
    </div>
    <!--Comment below <DIV> to see the result-->
    <div class="clear"></div>
</div>

CSS

#main_container {
    border:5px solid #000;
}
.left, .right {
    width: 100px;
    height: 100px;
    background: red;
    float:left;
}
.right {
    background: blue;
    width: calc(100% - 100px);
}
.clear {
    clear:both;
    margin:0;
    padding:0;
}

Also, just to add one more important fact related to "float" is, make sure you add "clear:both" property after "float".

Why?? Because, a common problem with float-based layouts is that the floats' container doesn't want to stretch up to accomodate the floats. If you want to add, say, a border around all floats (ie. a border around the container) you'll have to command the browsers somehow to stretch up the container all the way.

Here is the Fiddle for the same: http://jsfiddle.net/1867ud9p/7/

Hope this will help!

Upvotes: 0

Luca
Luca

Reputation: 9705

the reason is that floated elements are removed from the flow, so they don't stack with the non-floated elements. - therefore they don't "take up space" like before. This is why your text div starts at the top left of its container.

from MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/float

The float CSS property specifies that an element should be taken from the normal flow and placed along the left or right side of its container, where text and inline elements will wrap around it. A floating element is one where the computed value of float is not none.

Upvotes: 0

Bhojendra Rauniyar
Bhojendra Rauniyar

Reputation: 85545

You need to set float for another div too.

We generally do like below:

html

<div class="float-left">
  <p>floated left</p>
</div>

<div class="float-left"><!--- to float next to previous div--->
  <p>floated left</p>
</div>

css

.float-left{
  float: left;
}

As per your comment:

We do clear the float values because the container contents would never been collapsed.

Upvotes: 1

loveNoHate
loveNoHate

Reputation: 1547

You need to set

p { display:inline; }

or

div { display:inline; }

since paragraphs and divs are block elements.

http://www.w3.org/TR/CSS2/visuren.html#block-boxes

Upvotes: 0

crmepham
crmepham

Reputation: 4740

You need to float the second div.

Heres an example.

<div class="parent-div">
  <div class="left">
  </div>
  <div class="left">
    <p>This is the description of the image</p>
  </div>
</div>

Upvotes: 0

Related Questions