Search code examples
htmlcsssemantic-markup

What is the benefit of tableless design if you need clearing blocks everywhere?


I understand that the goal of moving towards <div> tags from <table> makes sense since it is more semantic. However, I don't understand the benefit gained if you still need a clearing block to make column-based layouts work. For example:

<!-- Note: location-info & personal-info both float left. -->
<div class="contact"> 
    <div class="personal-info">
        <p>
           Shawn, etc, etc
        </p>
    </div>
    <div class="location-info">
        <p><address>etc</address></p>
    </div>
    <br style="clear:both" /> <!-- clearing block -->
 </div>

The extraneous <br> tag is used strictly to describe style, and is required to make the layout work. Doesn't this ruin all benefits gained from removing tables?


Solution

  • What if I told you you didn't need a clearing block?

    .clear-block:after {
        content: ".";
        display: block;
        height: 0;
        clear: both;
        visibility: hidden;
    }
    
    .clear-block {
        display: inline-block;
    }
    <div id="wrapper" class="clear-block">
        <div style="float:right">
            Your content here
        </div>
        <div style="float:left">
            More content here
        </div>
    </div>

    JSFiddle