Guilherme Oderdenge
Guilherme Oderdenge

Reputation: 5001

Margin-bottom just working with float-left

On my markup I expect the footer with 25 pixels of bottom margin. I did this:

div.footer {
   margin-bottom: 25px;
}

Without success — there is no bottom margin. If I do this:

div.footer {
   margin-bottom: 25px;
   float: left;
}

It works!

I know! I can solve the problem with floating, but it is a good practice? There is no other way?

Thanks in advance.

== UPDATE! / A little piece of my code ==

CSS:

div.rlside-margin {
    margin: 0 25px;
}

div.tpside-margin {
    margin: 25px 0;
}

div.allside-margin {
    margin: 25px;
}

div.max-width {
   width: 60em;
   margin: 0 auto;
}

div.header {
   background-color: #efefef;
   width: 100%;
   height: 90px;
}

div.post-header {
   background-image: url("/Images/PostHeader_Background.jpg");
   width: 960px;
   height: 50px;
}

div.content {
   position: relative;
}

div.footer {
   margin-bottom: 25px;
}

HTML:

<div class="header">
    <div class="max-width">
       <a href="@Url.Action("Index", "Home")" class="logo float-left"></a>
       <ul class="navigation float-right">
          <li><a href="@Url.Action("Index", "Home")" rel="Home">Home</a></li>
          <li><a href="@Url.Action("Index", "Sobre")">Sobre</a></li>
          <li><a href="@Url.Action("Index", "Contato")">Fale conosco</a></li>
       </ul>
    </div>
</div>

<div class="max-width">
    <div class="post-header">
        <ul class="options float-left">
            <li><a href="#"><span>Ofertas</span></a></li>
            <li><a href="#"><span>Lista de compras (0)</span></a></li>
        </ul>

        <div class="search-bar float-right">
            <form>
                <input class="float-left" type="text" placeholder="Por qual produto você procura? Digite aqui" />
                <button class="magnifier"></button>
            </form>
        </div>
    </div>
</div>

<div class="content">
    @RenderBody()
</div>

<div class="max-width">
    <div class="footer">
        <div class="tbside-margin">
            <hr />
            <ul class="bottom-navigation">
                <li><a href="@Url.Action("Index", "Home")" rel="Home">Home</a></li>
                <li><a href="@Url.Action("Index", "Sobre")">Sobre</a></li>
                <li><a href="@Url.Action("Index", "Contato")">Fale conosco</a></li>
            </ul>
        </div>
    </div>
</div>

Upvotes: 2

Views: 6405

Answers (4)

omar j
omar j

Reputation: 541

You need to clear the float on the floated item's parent element.

    Some left floated text Some more left floated text

ul li span {
    float: left;
}
.clearfix {
    *zoom: 1;
}
.clearfix:before, .clearfix:after {
    content: " ";
    display: table;
}
.clearfix:after {
    clear: both;
}

Upvotes: 0

Guilherme Oderdenge
Guilherme Oderdenge

Reputation: 5001

I've solved!

At my footer's navigation, I have the follow markup:

<ul class="bottom-navigation">
    <li><a href="@Url.Action("Index", "Home")" rel="Home">Home</a></li>
    <li><a href="@Url.Action("Index", "Sobre")">Sobre</a></li>
    <li><a href="@Url.Action("Index", "Contato")">Fale conosco</a></li>
</ul>

And my CSS:

div.footer ul.bottom-navigation li {
    float: left;
}

The question is: I can't float my menu items to the left. Why? I don't know, but I did this to resolve:

div.footer ul.bottom-navigation li {
    display: inline;
}

It works — but I don't know why. The explanation will be very welcome.

Thanks!

Upvotes: 0

tin
tin

Reputation: 842

That's gonna depend a lot on your layout. Showing some html or URL would help. But, as Christian said, setting up the position would help. You might also try with position:relative; or also, instead of margin, try padding-bottom:25px;

Upvotes: 1

Alex
Alex

Reputation: 35409

This is occurring because you've taken div out of the "normal flow." You've likely floated other elements, effectively taking them out of the main flow. Now that you want to position the div with margins it's not relative to the elements that have been taken out of the normal flow. That's why adding the float works, it places it into a new flow.

"A floated box is positioned within the normal flow, then taken out of the flow and shifted to the left or right as far as possible. Content may flow along the side of a float. [...] When a box is taken out of normal flow, all content that is still within normal flow will ignore it completely and not make space for it."

http://coding.smashingmagazine.com/2007/05/01/css-float-theory-things-you-should-know/

Upvotes: 1

Related Questions