Introduction to CSS layout
CSS page layout techniques allow us to take elements contained in a web page and control where they're positioned relative to the following factors: their default position in normal layout flow, the other elements around them, their parent container, and the main viewport/window. The page layout techniques we'll be covering in more detail in this module are:CSS page layout techniques allow us to take elements contained in a web page and control where they're positioned relative to the following factors: their default position in normal layout flow, the other elements around them, their parent container, and the main viewport/window. The page layout techniques we'll be covering in more detail in this module are:
- Normal flow
- The
display
property - Flexbox
- Grid
- Float
Each technique has its uses, advantages, and disadvantages. No technique is designed to be used in isolation. By understanding what each layout method is designed for you'll be in a good position to understand which method is most appropriate for each task.
Normal flow
Normal flow is how the browser lays out HTML pages by default when you do nothing to control page layout.
Note how the HTML is displayed in the exact order in which it appears in the source code, with elements stacked on top of one another — the first paragraph, followed by the unordered list, followed by the second paragraph.
The elements that appear one below the other are described as block elements, in contrast to inline elements, which appear beside one another like the individual words in a paragraph.
Flexbox
Flexbox is the short name for the Flexible Box Layout CSS module, designed to make it easy for us to lay things out in one dimension — either as a row or as a column. To use flexbox, you apply display: flex
to the parent element of the elements you want to lay out; all its direct children then become flex items. We can see this in a simple example.
Setting display: flex
The HTML markup below gives us a containing element with a class of wrapper
, inside of which are three
elements. By default these would display as block elements, that is, below one another in our English language document.Grid Layout
While flexbox is designed for one-dimensional layout, Grid Layout is designed for two dimensions — lining things up in rows and columns.
Setting display: grid
Similar to flexbox, we enable Grid Layout with its specific display value —
display: grid
. The below example uses similar markup to the flex example, with a container and some child elements. In addition to usingdisplay: grid
, we also define some row and column tracks for the parent using thegrid-template-rows
andgrid-template-columns
properties respectivelyFloats
Floating an element changes the behavior of that element and the block level elements that follow it in normal flow. The floated element is moved to the left or right and removed from normal flow, and the surrounding content floats around it.
The
float
property has four possible values:
left
— Floats the element to the left.right
— Floats the element to the right.none
— Specifies no floating at all. This is the default value.inherit
— Specifies that the value of the float property should be inherited from the element's parent element.