Creating layouts in CSS has always been notoriously difficult. We've always had to rely on hacks to achieve any sort of complex layouts. Before CSS we used tables to hack together layouts that mimicked print layouts.
After CSS overtook tables for styling web pages we relied on floats. And while complex layouts are possible with floats they come with a lot of trade offs.
With the addition of Flexbox and CSS Grid we finally have real layout tools. We no longer need to hack together floated layouts! However its still useful to understand how float based layouts work because chances are you will need to maintain sites that use them. I don't recommend refactoring float based layouts to flex/grid layouts unless its absolutely necessary. Don't "fix" whats already working. Use flex and grid layouts on your new projects.
The purpose of CSS floats is to allow text to wrap around images and other blocks. You should still use floats for this purpose.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores, corporis neque nobis, minima modi iure nemo voluptates optio possimus impedit reprehenderit ullam corrupti dolore voluptatibus assumenda illum ipsam earum ducimus! Aliquid nesciunt nulla, nobis velit quia aliquam modi ducimus pariatur optio a facilis omnis sapiente sequi quaerat dolorum dicta, illo dolor itaque officia perspiciatis placeat iusto tempore neque.
Voluptatem similique temporibus exercitationem officia alias blanditiis debitis tempora nostrum obcaecati molestiae, itaque sunt velit incidunt nulla atque eum tenetur accusantium voluptatum dignissimos! Veritatis consequuntur provident quos hic animi perferendis,
distinctio sequi minus omnis voluptates odio vero repudiandae sed, eum recusandae dolorem et ipsam? Commodi reprehenderit vitae magnam, quibusdam enim, excepturi tenetur quam, quaerat id ut assumenda earum. Facere tenetur ullam dolorem autem est pariatur et corporis ab aut maxime omnis ea reprehenderit asperiores harum iste, nisi ut, nam deleniti? Tenetur blanditiis iste modi error? Obcaecati fugit nostrum quod, minus ipsam quae natus, maiores aperiam, explicabo nesciunt facere cum recusandae. Optio odit sed sint quis nam reiciendis veritatis vel adipisci maiores vitae. Iure ab, vitae quos aliquam earum, sequi quas, aut modi corporis consequatur labore libero deleniti ratione? Sed voluptate id magni officiis quaerat rerum voluptas eveniet eius! Deserunt nulla veritatis a.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Qui quia quo quam vel error repellat consequuntur! Nesciunt saepe dolorum, fuga expedita eligendi suscipit rem quam fugit ipsa molestiae quidem dignissimos! Accusantium autem enim, facere error alias non laboriosam vel dolores, repellat totam aspernatur, rem beatae veniam ducimus officiis culpa numquam id dicta distinctio molestiae quis. Magni aspernatur voluptatum facilis voluptas quidem.
Minima delectus molestiae minus ratione ab illum totam suscipit ipsum, esse rerum atque sunt facere ad praesentium molestias? Error reiciendis consectetur, autem fugiat rem exercitationem sunt laudantium placeat. Nemo veniam nihil quas sapiente praesentium. Accusantium facilis voluptatibus soluta magnam explicabo quo necessitatibus ipsum, repudiandae ea eum. Rem quidem voluptate unde nisi porro quaerat ut eligendi quod repudiandae nesciunt id consequuntur error, ab vel quae eveniet ipsa sint reiciendis veritatis odit dolore. Repellat nemo amet iure hic officiis cumque repellendus ab corporis magnam expedita distinctio ut, libero obcaecati illo at.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Omnis, cumque asperiores architecto mollitia sapiente blanditiis doloremque enim non.
Nostrum ullam alias, id accusamus tenetur perspiciatis eaque accusantium consequuntur dolore similique dicta iure, dolor iusto! Sapiente sed quasi facilis, officia inventore dolore laudantium consectetur architecto, aut voluptates voluptas fugit, doloribus esse perferendis odit expedita. Optio, voluptatum velit. Deleniti voluptates dolor labore sed nam assumenda molestias beatae adipisci culpa veritatis. Quod sunt voluptate, recusandae expedita corporis animi placeat natus. Sed, vitae quos, impedit perferendis asperiores at tempore vel explicabo, maxime expedita qui adipisci corrupti aperiam. Eos incidunt cumque beatae expedita harum! Assumenda.
<div class="elr-pull-left"></div>
<div class="elr-pull-right"></div>
<div class="elr-no-float"></div>
<div class="elr-center-block"></div>
Use the clear helper class for quick and dirty old school float clearing. Avoid using this unless you have a very good reason.
<div class="elr-clear"></div>
When the text that is displayed to visitors reads awkwardly it may be useful to provide some well written text to visitors who are using screen readers. Add the screen-reader class to a line of text and it will be hidden from view but it will be read aloud by screen readers.
For screen readers only
<p class="elr-screen-reader">Something for screen readers only.</p>
The CSS box model includes a block's margin, border, padding and content. The width of all of these values is added to calculate the total width of a block.
An element's width property will include its content. The border width and padding is included if the block has a box-sizing property value of border-box. Margin is never include in the width. So box with a width property value of 200px, padding of 20px and a margin of 20px will take up 280px of the screen.
By default all blocks have a box-sizing property value of "content-box". This means that if you set a box to have a width of 200px the width of the border will be added on to the width. So a box with a 1px border will have a total width of 202px.
In the past few years its become more common to apply a box-sizing property value of "border-box" to all elements. This means that if you set a box to have a width of 200px the width of the border and padding will be included in width. So a box with a 1px border and 20px of padding will have a total width of 200px.
width: 250px; margin: 20px; padding: 20px; border: 3px solid #333; Notice how the content box is so much larger.
margin: 0 padding: 20px 1px border
margin: 20px; padding: 0; 1px border
margin: 20px; padding: 20px; 0 border
The overflow property dictates how content will display if its too large for its parent container.
By default all boxes have an overflow property value of show. This means that if the content is too large for its container it will just break out. Sometimes this is desireable. Its generally better to have text break out of its box but still be readable than to cut off text.
Overflow hidden will hide anything that doesn't fix in the parent container. Notice how the text is just arbitrarily cut off. You can't see it unless you go into the source HTML!
Note: Sometimes overflow hidden is used as a quick and dirty way to clear floats. Avoid using overflow in this manner since content may be hidden from visitors.
If you need to clear floats and can't use a CSS only option I would advise that you use the empty div method instead. Its gross but not as gross as using overflow: hidden to clear floats.
<div style="clear: both"></div>
Overflow scroll will hide the content initially but make it visible when the container is scrolled.
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Sequi ratione, sunt voluptate quis quo adipisci atque distinctio. Ullam maxime amet dolorem corporis fugiat itaque ea perspiciatis, voluptate ipsam est dignissimos eveniet sed laudantium, quaerat necessitatibus nihil harum perferendis tenetur optio assumenda dolore, omnis porro cumque! Similique corrupti molestiae ratione aspernatur!
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Eum amet fugiat a at soluta reiciendis architecto incidunt obcaecati quae assumenda. Ea animi maiores ab rem!
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Consectetur at modi veritatis quia non tempora accusantium reprehenderit aut distinctio obcaecati nihil perspiciatis, explicabo labore dignissimos, ullam impedit natus sequi perferendis accusamus consequuntur illum sit!
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Dicta provident quaerat neque explicabo harum, placeat possimus omnis corporis. Unde deserunt optio expedita quibusdam doloremque odit, suscipit consequatur quidem iusto temporibus ratione excepturi, numquam quasi. Laudantium, doloribus voluptate nostrum molestias beatae laborum magni? Dicta reiciendis cupiditate, aspernatur possimus necessitatibus mollitia velit error quidem animi reprehenderit sapiente autem magni qui expedita corrupti, neque, nulla fugiat veritatis dolore nisi? Quasi, excepturi! Distinctio natus commodi maxime.
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Sequi ratione, sunt voluptate quis quo adipisci atque distinctio. Ullam maxime amet dolorem corporis fugiat itaque ea perspiciatis, voluptate ipsam est dignissimos eveniet sed laudantium, quaerat necessitatibus nihil harum perferendis tenetur optio assumenda dolore, omnis porro cumque! Similique corrupti molestiae ratione aspernatur!
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Eum amet fugiat a at soluta reiciendis architecto incidunt obcaecati quae assumenda. Ea animi maiores ab rem!
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Consectetur at modi veritatis quia non tempora accusantium reprehenderit aut distinctio obcaecati nihil perspiciatis, explicabo labore dignissimos, ullam impedit natus sequi perferendis accusamus consequuntur illum sit!
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Dicta provident quaerat neque explicabo harum, placeat possimus omnis corporis. Unde deserunt optio expedita quibusdam doloremque odit, suscipit consequatur quidem iusto temporibus ratione excepturi, numquam quasi. Laudantium, doloribus voluptate nostrum molestias beatae laborum magni? Dicta reiciendis cupiditate, aspernatur possimus necessitatibus mollitia velit error quidem animi reprehenderit sapiente autem magni qui expedita corrupti, neque, nulla fugiat veritatis dolore nisi? Quasi, excepturi! Distinctio natus commodi maxime.
Sometimes you need to add some margin to an element.
Sometimes you need to add some padding to an element.