Score code, devs, and debt fast.

Start free trial
HTML

HTML

HTML Layout Elements & Techniques

HTML layouts split a page into header, nav, main, aside, and footer. This structure allows users to scan content, helps search engines index pages, and keeps code simple. This tutorial covers HTML5 semantic elements and four layout techniques: CSS frameworks, floats, Flexbox, and Grid. You will learn to build responsive layouts from basic markup.

Learning Outcomes

After reading this tutorial, you will:

  • Name the HTML5 semantic elements for page layout.
  • Describe the purpose of <header>, <nav>, <main>, <aside>, and <footer>.
  • Build a minimal semantic HTML skeleton.
  • Apply a CSS framework grid to structure a page.
  • Use CSS floats to create two‑column layouts.
  • Use Flexbox to align and wrap items on a single axis.
  • Use CSS Grid to define two‑dimensional page regions.
  • Choose the right layout method for a given design.
  • Debug common layout issues in HTML and CSS.

HTML Layout Elements

HTML5 introduced landmark elements that describe the function of each section instead of its appearance. Use them to establish a clear document outline, improve accessibility (screen‑reader “landmark” navigation), and boost SEO.

Element Semantic Role Use
<header> Intro or branding region for the page or a section Logo, site name, primary navigation
<nav> Collection of links for in‑page or site‑wide navigation Menus, breadcrumb trails, table of contents
<main> Unique, central content of the page Articles, e‑commerce product, app dashboard
<section> Thematically related grouping inside <main> Feature block, chapter, hero banner
<article> Self‑contained piece that could stand on its own Blog post, forum thread, news story
<aside> Tangential or supplementary content Sidebars, pull quotes, ads
<footer> Closing region for page or section Copyright, secondary nav, disclaimers
<details> + <summary> Expand/collapse panel FAQs, additional specs, code samples

Minimal Semantic Skeleton:

<header>
  <h1>SitePoint</h1>

  <nav aria-label="Primary">
    <ul>
      <li><a href="https://www.sitepoint.com/html/">HTML</a></li>
      <li><a href="https://www.sitepoint.com/css/">CSS</a></li>
      <li><a href="https://www.sitepoint.com/javascript/">JavaScript</a></li>
    </ul>
  </nav>
</header>

<main>
  <article>
    <h2>Building a Semantic Layout</h2>
    <p>Learn how to structure pages with HTML 5 landmarks.</p>
  </article>

  <aside>
    <h3>Related Reading</h3>
    <ul>
      <li><a href="https://www.sitepoint.com/learn/html/">HTML Tutorials</a></li>
      <li><a href="https://www.sitepoint.com/flexbox/">Flexbox Guide</a></li>
    </ul>
  </aside>
</main>

<footer>&copy; 2025 SitePoint</footer>

Techniques for Creating HTML Layouts

Layout is a collaboration between semantic HTML and CSS positioning. Each technique below solves the same problem—arranging content on a screen—but with different trade‑offs in complexity, browser support, and design freedom. Choose the lightest option that meets your requirements, layer techniques when helpful (e.g., Grid for the page shell and Flexbox inside cards), and keep accessibility and performance front‑of‑mind from the start. We dive into individual methods.

CSS Frameworks — Rapid, Pre‑Built Grids

Best for fast prototypes, design‑system consistency, and teams that want layout + components out of the box.

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5/dist/css/bootstrap.min.css">

<div class="container-fluid">
  <header class="row bg-primary text-white p-3">
    <h1 class="col">Site Title</h1>
  </header>

  <div class="row">
    <nav  class="col-md-3 bg-light p-3"></nav>
    <main class="col-md-9 p-3"></main>
  </div>

  <footer class="row bg-primary text-white p-3">
    <p class="col">&copy; 2025</p>
  </footer>
</div>

Bootstrap’s grid is mobile‑first and flexbox‑based. The .container‑fluid wrapper sets a full‑width context; nested .row elements create horizontal groups; and column classes (e.g., .col-md‑3) assign a fractional width at specified breakpoints (md ≥ 768 px). Flexbox ensures equal‑height columns and automatic wrapping on smaller screens.

Strengths

  • Instant grid/utility classes
  • Consistent spacing and typography
  • Large ecosystem of ready components

Things to keep in mind

  • Trim unused CSS/JS to avoid large bundles
  • Expect to override variables or add custom CSS for unique branding

CSS Floats Layout — Legacy Columns in Two Lines of CSS

Best for quick two‑column splits in legacy projects where Flexbox or Grid can’t be introduced.

/* CSS */
.column          { float:left; width:50%; }
.clearfix::after { content:""; display:block; clear:both; }

/* HTML */
<section class="clearfix">
  <div class="column">Left content…</div>
  <div class="column">Right content…</div>
</section>

How it works

Each .column is removed from normal flow with float:left, letting them sit side‑by‑side at 50 % width. Because floated elements no longer stretch their parent, the .clearfix pseudo‑element re‑establishes a block formatting context so the parent <section> wraps around its children.

Strengths

  • Bullet‑proof support back to IE 6
  • Minimal code changes for older codebases

Things to keep in mind

  • Needs clearfix hacks
  • Equal‑height columns and full‑width backgrounds are awkward

CSS Flexbox Layout — One‑Dimensional, Responsive Rows & Columns

Best for nav bars, card decks, toolbars, and any layout driven along a single axis with flexible alignment.

.container {
  display:flex;
  flex-wrap:wrap;   /* stacks on small screens */
  gap:1rem;
}

.card { flex:1 1 220px; }

How it works

display:flex establishes a flex formatting context. Children become flex items that share available space. flex:1 1 220px means “start at 220 px, then grow or shrink as needed.” flex‑wrap:wrap moves overflowing items onto new rows, and gap injects uniform spacing without extra margins.

Strengths

  • Effortless alignment and spacing
  • Auto‑wrapping for mobile layouts

Things to keep in mind

  • One‑axis only—combine with Grid for page‑level shells
  • gap unsupported in very old browsers (IE 11)

CSS Grid Layout — Two‑Dimensional Control for Complex Layouts

Best for full page shells, magazine‑style multi‑column designs, dashboards, and overlapping card layouts.

.layout {
  display:grid;
  grid-template-areas:
    "header header"
    "nav    main"
    "footer footer";
  grid-template-columns:240px 1fr;
  gap:1rem;
}

@media (max-width:768px){
  .layout{
    grid-template-areas:
      "header"
      "nav"
      "main"
      "footer";
    grid-template-columns:1fr;
  }
}
<div class="layout">
  <header style="grid-area:header"></header>
  <nav    style="grid-area:nav"></nav>
  <main   style="grid-area:main"></main>
  <footer style="grid-area:footer"></footer>
</div>

How it works

display:grid splits the container into two columns (240px 1fr). grid‑template‑areas names each cell, letting you assign elements via grid‑area. At the 768 px breakpoint, the template collapses to a single column, stacking regions vertically while preserving source order.

Strengths

  • Precise two‑dimensional placement with named areas
  • Media‑query remapping is straightforward

Things to keep in mind

  • Not supported in very old browsers (≤ IE 10)
  • Slightly steeper learning curve—use when true 2‑D control is required

How to Choose the Right HTML Layout Technique

Selecting the one layout engine for every project is a myth; most real‑world pages mix techniques at different layers. Use the checklist and decision map below to pick— or combine—the options that fit your goals.

Question Lean Toward → Why
Do you need a fast prototype with built‑in components? CSS Framework Gives you grids and UI widgets out of the box, perfect for MVPs and hackathons.
Is the page shell strictly two‑dimensional (rows + columns)? CSS Grid Grid excels at page‑level regions and magazine‑style layouts.
Are you aligning items along a single row or column? Flexbox Simpler syntax than Grid, with automatic spacing, wrapping, and equal‑height tricks.
Are you locked into very old browsers (≤ IE 10) or a legacy codebase? Floats Guaranteed support without polyfills; minimal refactor risk.
Does the design system already mandate Bootstrap or Tailwind? Stay Framework Reduces cognitive load—developers follow the same class conventions.
Is bundle size a top KPI? Bespoke Flexbox / Grid Vanilla CSS beats full frameworks for weight, especially with tree‑shaken utility classes.

HTML Layout Elements — Common Pitfalls & Quick Debugging

  • Missing landmarks – Omitting a single <main> (or mis‑using multiple) leaves screen‑reader users without a clear content region.

    Fix: Ensure exactly one <main> per page and label other landmarks (<nav aria‑label="Primary">, etc.).

  • Unbalanced tags – Forgetting a closing </section> or </article> collapses the document outline and can cascade layout errors.

    Fix: Validate HTML or use IDE linting to catch mismatches early.

  • Floats without containment – Floated columns drop gutters and pull following elements upward.

    Fix: Add a .clearfix helper or apply overflow:auto to the float’s parent.

  • Flexbox “shrink‑wrap” squeeze – Items without a min-width may contract to their smallest content size.

    Fix: Set a sensible min-width or use flex:1 1 0 to prevent over‑shrinking.

  • Grid gap + margin overlap – Combining gap with outer margins on the same axis produces double spacing.

    Fix: Choose one spacing method per axis—gap or margin, not both.

  • Out‑of‑order media queries – Larger breakpoints declared before smaller ones override mobile‑first rules.

    Fix: List media queries in ascending order (min-width values increasing).

  • Under‑used DevTools overlays – Skipping layout inspectors leads to blind debugging.

    Fix: Toggle Chrome/Edge DevTools Layout panel (or Firefox Layout tab) to see Flexbox and Grid lines, gaps, and areas in real time.

FAQs on HTML Layout Elements and Techniques

What’s the difference between HTML structure and HTML layout?

Structure is the semantic outline (headers, sections, articles) that conveys meaning. Layout is the visual arrangement produced by CSS (grid lines, column widths). Think content vs. presentation.

How do you create a table and lay it out?

Inside <table>, use <thead>, <tbody>, and <th> for structure. Around the table, apply Flexbox or Grid to center or size it within the overall page layout.

What is 'form layout' in HTML?

Form layout refers to organizing <label><input> pairs, groups, and actions so users can scan fields easily. Use Flexbox for inline labels, Grid for multi‑column forms, and landmarking (<fieldset>, <legend>) for accessibility.

Subscribe to our newsletter

Get the freshest news and resources for developers, designers and digital creators in your inbox each week

© 2000 – 2025 SitePoint Pty. Ltd.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.