GNVHSGNVHSDEBUG
Home/CSS/Layout and Positioning

CSS Layout and Positioning

CSS BasicsReading time: 9 min

Layout and positioning are essential aspects of CSS that determine how elements are arranged on a webpage. From traditional methods to modern techniques, CSS offers various ways to create complex layouts.

In this tutorial, you'll learn about different layout models, positioning techniques, and how to create responsive designs that work across all screen sizes.

In this tutorial

1Display Property

The display property determines how an element is rendered on the page and how it interacts with other elements. It's fundamental to CSS layout.

css
/* Common display values */

/* Block elements take full width and stack vertically */
.block {
  display: block;
}

/* Inline elements flow horizontally and wrap */
.inline {
  display: inline;
}

/* Combines block and inline features */
.inline-block {
  display: inline-block;
  width: 150px;  /* Can have width/height unlike inline */
  height: 80px;
}

/* Hides the element completely */
.none {
  display: none;
}

/* Visually hidden but still takes up space */
.invisible {
  visibility: hidden;
}

/* Makes element a flex container */
.flex-container {
  display: flex;
}

/* Makes element a grid container */
.grid-container {
  display: grid;
}

/* Makes element behave like a table */
.table {
  display: table;
}

.table-row {
  display: table-row;
}

.table-cell {
  display: table-cell;
}

Display Values Comparison:

Block vs. Inline:

Block element (takes full width)
Another block element
Inline elementAnother inline elementThird inline element

Inline-Block:

Inline-Block 1
Inline-Block 2
Inline-Block 3

Pro Tip:

Combining different layout techniques can create powerful and flexible designs. For example, you might use CSS Grid for the overall page layout, Flexbox for navigation components, and positioning for overlays or tooltips. Choose the right tool for each specific layout challenge.

2Positioning

CSS positioning allows you to precisely control the placement of elements on your page. The position property determines how an element is positioned in the document flow.

css
/* CSS Positioning */

/* Default positioning in normal document flow */
.static {
  position: static;
}

/* Positioned relative to its normal position */
.relative {
  position: relative;
  top: 20px;
  left: 30px;
}

/* Positioned relative to nearest positioned ancestor */
.absolute {
  position: absolute;
  top: 50px;
  right: 10px;
}

/* Positioned relative to the viewport */
.fixed {
  position: fixed;
  bottom: 20px;
  right: 20px;
}

/* Toggles between relative and fixed based on scroll position */
.sticky {
  position: sticky;
  top: 0;
}

/* Z-index controls stacking order of positioned elements */
.stacked {
  position: relative;
  z-index: 10;
}

Positioning Examples:

Relative vs. Absolute:

Parent (relative position)
Absolute child
Relative child

Fixed & Sticky Examples:

Fixed elements stay in place during scroll
Sticky elements stick after reaching threshold

Remember:

When using absolute positioning, the element is positioned relative to its nearest positioned ancestor (an element with position value other than static). If no positioned ancestor exists, it positions relative to the document body.

3Flexbox

Flexbox (Flexible Box Layout) is a one-dimensional layout method designed for arranging items in rows or columns. It's perfect for creating responsive components like navigation bars, card layouts, and centering elements.

css
/* Basic Flexbox Container Properties */
.flex-container {
  display: flex;
  
  /* Direction: row (default), row-reverse, column, column-reverse */
  flex-direction: row;
  
  /* Wrapping: nowrap (default), wrap, wrap-reverse */
  flex-wrap: wrap;
  
  /* Shorthand for direction + wrap */
  flex-flow: row wrap;
  
  /* Main axis alignment: flex-start, flex-end, center, space-between, space-around, space-evenly */
  justify-content: space-between;
  
  /* Cross axis alignment: stretch (default), flex-start, flex-end, center, baseline */
  align-items: center;
  
  /* Multi-line alignment: stretch (default), flex-start, flex-end, center, space-between, space-around */
  align-content: stretch;
}

/* Flexbox Item Properties */
.flex-item {
  /* Growth factor (default: 0) */
  flex-grow: 1;
  
  /* Shrink factor (default: 1) */
  flex-shrink: 1;
  
  /* Base size (default: auto) */
  flex-basis: 200px;
  
  /* Shorthand for grow, shrink, basis */
  flex: 1 1 auto;
  
  /* Individual alignment overriding container's align-items */
  align-self: flex-start;
  
  /* Controls order (default: 0) */
  order: 2;
}

Flexbox Examples:

Basic Row (justify-content):

Item 1
Item 2
Item 3
Centered 1
Centered 2
Evenly 1
Evenly 2
Evenly 3

Flex Direction & Alignment:

Top
Middle
Bottom
Short
Medium
Tall

Flexbox Use Cases:

Flexbox excels at handling one-dimensional layouts where you need alignment control. It's ideal for navigation bars, form controls, card layouts, and centering content both horizontally and vertically.

4CSS Grid

CSS Grid Layout is a two-dimensional layout system designed for creating complex grid-based layouts with rows and columns. It provides powerful control over both dimensions simultaneously.

css
/* Basic Grid Container Properties */
.grid-container {
  display: grid;
  
  /* Define columns (3 columns of 1fr each) */
  grid-template-columns: 1fr 1fr 1fr;
  
  /* Alternative using repeat() */
  grid-template-columns: repeat(3, 1fr);
  
  /* Define rows */
  grid-template-rows: 100px auto 100px;
  
  /* Gap between grid items */
  gap: 20px;
  /* Or individually: */
  column-gap: 20px;
  row-gap: 10px;
  
  /* Named grid areas */
  grid-template-areas:
    "header header header"
    "sidebar content content"
    "footer footer footer";
  
  /* Auto-fit and minmax for responsive grids */
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  
  /* Alignment of all items within cells */
  justify-items: center;
  align-items: center;
  
  /* Alignment of the grid within container */
  justify-content: center;
  align-content: center;
}

/* Grid Item Properties */
.grid-item {
  /* Span multiple columns */
  grid-column: 1 / 3;
  /* Shorthand for grid-column-start / grid-column-end */
  
  /* Span multiple rows */
  grid-row: 2 / 4;
  
  /* Using named lines or span keyword */
  grid-column: span 2;
  
  /* Placing item in a named area */
  grid-area: header;
  
  /* Aligning individual item within its cell */
  justify-self: end;
  align-self: center;
}

Grid Examples:

Basic Grid Layout:

1
2
3
4
5
6

Complex Grid Layout:

Header (span 4)
Sidebar
Content Top
Content Bottom
Footer (span 4)

Grid vs. Flexbox:

Use Grid for two-dimensional layouts where you need control over both rows and columns simultaneously. Use Flexbox for one-dimensional layouts where you need alignment in a single direction. Many complex designs use both: Grid for the overall page layout and Flexbox for component-level layouts.

5Responsive Layout

Responsive web design ensures your layouts look good on all devices, from desktop computers to mobile phones. CSS provides several tools to create responsive designs.

css
/* Responsive Design Techniques */

/* Media Queries */
@media screen and (max-width: 768px) {
  .container {
    flex-direction: column;
  }
  
  .sidebar {
    width: 100%;
  }
}

/* Mobile-first approach */
.card {
  width: 100%; /* Default for small screens */
}

@media screen and (min-width: 576px) {
  .card {
    width: 48%; /* Medium screens */
  }
}

@media screen and (min-width: 992px) {
  .card {
    width: 30%; /* Large screens */
  }
}

/* Fluid Typography */
html {
  font-size: calc(14px + 0.25vw);
}

/* Viewport Units */
.hero {
  height: 80vh;
  padding: 2vw;
}

/* Container Queries (modern browsers) */
@container (min-width: 400px) {
  .card-content {
    display: flex;
  }
}

Responsive Design Examples:

Responsive Grid:

Card 1
Card 2
Card 3
Card 4
Card 5
Card 6

This grid adjusts from 1 column on mobile to 2 columns on tablets and 3 columns on desktops.

Responsive Navigation:

Logo

This navigation shows a mobile hamburger menu on small screens and a full navigation bar on larger screens.

Responsive Best Practices:

  • Use relative units (%, em, rem, vh, vw) instead of fixed pixels
  • Design for mobile first, then enhance for larger screens
  • Test your layouts on multiple devices and screen sizes
  • Use responsive images with srcset or picture elements
  • Keep performance in mind, especially for mobile users

6Try It Yourself

Practice is essential for mastering CSS layout. Try these exercises to improve your skills with different layout techniques.

Exercise 1: Create a Card Layout

Build a responsive card layout that displays 1 card per row on mobile, 2 cards per row on tablets, and 3 cards per row on desktops.

html
<div class="card-container">
  <div class="card">Card 1</div>
  <div class="card">Card 2</div>
  <div class="card">Card 3</div>
  <div class="card">Card 4</div>
  <div class="card">Card 5</div>
  <div class="card">Card 6</div>
</div>

<style>
  /* Add your CSS here */
  .card-container {
    /* Use Grid or Flexbox */
  }
  
  .card {
    /* Style your cards */
  }
  
  /* Add media queries for responsiveness */
  @media (min-width: 768px) {
    /* Tablet styles */
  }
  
  @media (min-width: 1024px) {
    /* Desktop styles */
  }
</style>

Exercise 2: Holy Grail Layout

Create the classic "Holy Grail" layout with a header, footer, main content area, and two sidebars. Make it responsive so that on mobile devices, the layout stacks vertically.

Header
Left
Sidebar
Main Content
Right
Sidebar
Footer

Challenge:

Try implementing the same layout using different techniques: Grid, Flexbox, and traditional positioning. Compare the implementations and consider the advantages and limitations of each approach.

Summary

  • The display property controls how elements are rendered in the layout
  • Positioning (static, relative, absolute, fixed, sticky) allows precise control of element placement
  • Flexbox is ideal for one-dimensional layouts and aligning items in rows or columns
  • CSS Grid provides powerful tools for creating complex two-dimensional layouts
  • Responsive design techniques ensure layouts adapt to different screen sizes