Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8688355
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 12, 20262026-06-12T23:20:32+00:00 2026-06-12T23:20:32+00:00

What does the following CSS rule do: .clear { clear: both; } And why

  • 0

What does the following CSS rule do:

.clear { clear: both; }

And why do we need to use it?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-12T23:20:33+00:00Added an answer on June 12, 2026 at 11:20 pm

    I won’t be explaining how the floats work here (in detail), as this question generally focuses on Why use clear: both; OR what does clear: both; exactly do…

    I’ll keep this answer simple, and to the point, and will explain to you graphically why clear: both; is required or what it does…

    Generally designers float the elements, left or to the right, which creates an empty space on the other side which allows other elements to take up the remaining space.

    Why do they float elements?

    Elements are floated when the designer needs 2 block level elements side by side. For example say we want to design a basic website which has a layout like below…

    enter image description here

    Live Example of the demo image.

    Code For Demo

    /*  CSS:  */
    
    * { /* Not related to floats / clear both, used it for demo purpose only */
        box-sizing: border-box;
        -moz-box-sizing: border-box;
        -webkit-box-sizing: border-box;
    }
    
    header, footer {
        border: 5px solid #000;
        height: 100px;
    }
    
    aside {
        float: left;
        width: 30%;
        border: 5px solid #000;
        height: 300px;
    }
    
    section {
        float: left;
        width: 70%;
        border: 5px solid #000;
        height: 300px;
    }
    
    .clear {
        clear: both;
    }
    <!-- HTML -->
    <header>
        Header
    </header>
    <aside>
        Aside (Floated Left)
    </aside>
    <section>
        Content (Floated Left, Can Be Floated To Right As Well)
    </section>
    <!-- Clearing Floating Elements-->
    <div class="clear"></div>
    <footer>
        Footer
    </footer>

    Note: You might have to add header, footer, aside, section (and other HTML5 elements) as display: block; in your stylesheet for explicitly mentioning that the elements are block level elements.

    Explanation:

    I have a basic layout, 1 header, 1 side bar, 1 content area and 1 footer.

    No floats for header, next comes the aside tag which I’ll be using for my website sidebar, so I’ll be floating the element to left.

    Note: By default, block level element takes up document 100% width,
    but when floated left or right, it will resize according to the
    content it holds.

    1. Normal Behavior Of Block Level Element
    2. Floated Behavior Of Block Level Element

    So as you note, the left floated div leaves the space to its right unused, which will allow the div after it to shift in the remaining space.

    1. div‘s will render one after the other if they are NOT floated
    2. div will shift beside each other if floated left or right

    Ok, so this is how block level elements behave when floated left or right, so now why is clear: both; required and why?

    So if you note in the layout demo – in case you forgot, here it is..

    I am using a class called .clear and it holds a property called clear with a value of both. So lets see why it needs both.

    I’ve floated aside and section elements to the left, so assume a scenario, where we have a pool, where header is solid land, aside and section are floating in the pool and footer is solid land again, something like this..

    Floated View

    So the blue water has no idea what the area of the floated elements are, they can be bigger than the pool or smaller, so here comes a common issue which troubles 90% of CSS beginners: why the background of a container element is not stretched when it holds floated elements. It’s because the container element is a POOL here and the POOL has no idea how many objects are floating, or what the length or breadth of the floated elements are, so it simply won’t stretch.

    1. Normal Flow Of The Document
    2. Sections Floated To Left
    3. Cleared Floated Elements To Stretch Background Color Of The Container

    (Refer [Clearfix] section of this answer for neat way to do this. I am using an empty div example intentionally for explanation purpose)

    I’ve provided 3 examples above, 1st is the normal document flow where red background will just render as expected since the container doesn’t hold any floated objects.

    In the second example, when the object is floated to left, the container element (POOL) won’t know the dimensions of the floated elements and hence it won’t stretch to the floated elements height.

    enter image description here

    After using clear: both;, the container element will be stretched to its floated element dimensions.

    enter image description here

    Another reason the clear: both; is used is to prevent the element to shift up in the remaining space.

    Say you want 2 elements side by side and another element below them… So you will float 2 elements to left and you want the other below them.

    1. div Floated left resulting in section moving into remaining space
    2. Floated div cleared so that the section tag will render below the floated divs

    1st Example

    enter image description here


    2nd Example

    enter image description here

    Last but not the least, the footer tag will be rendered after floated elements as I’ve used the clear class before declaring my footer tags, which ensures that all the floated elements (left/right) are cleared up to that point.


    Clearfix

    Coming to clearfix which is related to floats. As already specified by @Elky, the way we are clearing these floats is not a clean way to do it as we are using an empty div element which is not a div element is meant for. Hence here comes the clearfix.

    Think of it as a virtual element which will create an empty element for you before your parent element ends. This will self clear your wrapper element holding floated elements. This element won’t exist in your DOM literally but will do the job.

    To self clear any wrapper element having floated elements, we can use

    .wrapper_having_floated_elements:after {  /* Imaginary class name */
      content: "";
      clear: both;
      display: table;
    }
    

    Note the :after pseudo element used by me for that class. That will create a virtual element for the wrapper element just before it closes itself. If we look in the dom you can see how it shows up in the Document tree.

    Clearfix

    So if you see, it is rendered after the floated child div where we clear the floats which is nothing but equivalent to have an empty div element with clear: both; property which we are using for this too. Now why display: table; and content is out of this answers scope but you can learn more about pseudo element here.

    Note that this will also work in IE8 as IE8 supports :after pseudo.


    Original Answer:

    Most of the developers float their content left or right on their pages, probably divs holding logo, sidebar, content etc., these divs are floated left or right, leaving the rest of the space unused and hence if you place other containers, it will float too in the remaining space, so in order to prevent that clear: both; is used, it clears all the elements floated left or right.

    Demonstration:

    ------------------ ----------------------------------
    div1(Floated Left) Other div takes up the space here
    ------------------ ----------------------------------
    

    Now what if you want to make the other div render below div1, so you’ll use clear: both; so it will ensure you clear all floats, left or right

    ------------------
    div1(Floated Left)
    ------------------
    <div style="clear: both;"><!--This <div> acts as a separator--></div>
    ----------------------------------
    Other div renders here now
    ----------------------------------
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I want to know, what does the following CSS mean? .twoCol #sidebar Isn't #sidebar
If i have the following CSS: .contactUsDiv label, input { display:block; } Does that
I'm trying to use the following CSS styles. They are working on most browsers,
I have the following css which needs to alter the last-child which does not
Suppose I have the following CSS rule in my page: body { font-family: Calibri,
When I use the following CSS: input[type=button] { background-color: white; border: 1px solid black;
I use the following css: /* style.css */ #someId { background-color: red; } #someId.medium
Why does the following CSS not work? a { width: 60px; overflow: hidden; white-space:
What does the following CSS do and is it valid? h4 { width: 83%;
Following css does not work in IE 8. content: ' '; position: absolute; left:

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.