Skip to content

HTML Blocks

Every HTML element has a default display behavior, typically either block or inline. Understanding this distinction is crucial for controlling layout and structure.

Characteristics:

  • Always start on a new line.
  • Take up the full width available within their container (stretching left and right).
  • Can contain other block-level and inline elements.
  • Respect width, height, margin (top/bottom/left/right), and padding properties.

Think of them as distinct blocks or paragraphs in a document.

Common Block-level Elements:

  • <div> (generic block container)
  • <p> (paragraph)
  • <h1> - <h6> (headings)
  • <ul> (unordered list)
  • <ol> (ordered list)
  • <li> (list item - though visually indented, it’s a block)
  • <form>
  • <table>
  • <header>, <footer>, <nav>, <main>, <article>, <section>, <aside> (semantic layout elements)

Example:

<p style="background-color: lightblue;">I am a paragraph (block-level). I take up the full width.</p>
<div style="background-color: lightgreen;">I am a div (block-level). I also take the full width and start on a new line.</div>

Characteristics:

  • Do not start on a new line.
  • Only take up as much width as necessary to fit their content.
  • Generally should only contain other inline elements or data (text, images).
  • Respect horizontal margin (left/right) and padding, but typically ignore width, height, and vertical margin (top/bottom).

Think of them as flowing within the lines of text.

Common Inline Elements:

  • <span> (generic inline container)
  • <a> (anchor/link)
  • <img> (image)
  • **, <em>, **, <i> (text formatting)
  • <button>, <input>, <label>, <select>, <textarea> (form controls)
  • ```, <kbd>, <samp> (code-related)
  • <br> (line break - special case)
  • <q> (inline quote)

Example:

<p>
This paragraph contains
<span style="background-color: yellow;">an inline span</span>,
which flows within the text. It also contains
<a href="#" style="background-color: pink;">a link (inline)</a>
and an <img src="favicon.ico" alt="icon" style="height: 1em;"> (inline) image.
</p>

The <div> (division) element is the primary generic block-level container.

It has no inherent semantic meaning. Its main purpose is to group other elements together, usually for:

  • Applying CSS styles (using class or id attributes).
  • Targeting with JavaScript.
  • Structuring content when no other semantic block element (<article>, <section>, etc.) is appropriate.

Example: Grouping content for styling.

<div style="border: 1px solid blue; padding: 10px; margin-bottom: 10px;">
<h2>Section Title</h2>
<p>This content is grouped inside a styled div.</p>
</div>
<div class="info-box"> <!-- Styled via CSS using .info-box class -->
<p>Another group of content.</p>
</div>

The <span> element is the primary generic inline container.

Like <div>, it has no semantic meaning. Its main purpose is to group a small piece of inline content (usually text or other inline elements) for:

  • Applying CSS styles to a specific word or phrase.
  • Targeting a specific piece of text with JavaScript.

Example: Styling part of a paragraph.

<p>
Most of this text is normal, but
<span style="color: red; font-weight: bold;">this part</span>
is highlighted using a span.
</p>

While elements have default display types, you can change their behavior using the CSS display property.

Common display values include:

  • block: Makes an element behave like a block-level element.
  • inline: Makes an element behave like an inline element.
  • inline-block: A hybrid – flows inline but respects width, height, and vertical margins/padding.
  • none: Hides the element completely (removes it from layout).
  • flex: Enables Flexbox layout for child elements.
  • grid: Enables CSS Grid layout for child elements.

Example: Making list items appear side-by-side for a horizontal menu.

<ul class="horizontal-menu">
<li>Home</li>
<li>About</li>
<li>Contact</li>
</ul>
<style>
.horizontal-menu li {
display: inline-block; /* Or display: inline; */
margin-right: 15px;
}
</style>
TagDefault DisplayPurpose
<div>BlockGeneric container for block-level grouping (styling, scripting).
<span>InlineGeneric container for inline grouping (styling parts of text).

Remember to use semantic elements (<p>, <h1>, <nav>, etc.) whenever possible before resorting to generic <div> and <span> containers.