Ova

How to align boxes side by side in HTML?

Published in HTML Layout 5 mins read

To align boxes side by side in HTML, the most effective and modern methods involve using CSS to manipulate their display property. Primarily, you can achieve this with Flexbox (display: flex;) or by setting elements to inline-block (display: inline-block;).

Mastering Side-by-Side Layouts with CSS

The display property is fundamental for controlling how an element is rendered and how it interacts with other elements on the page. By carefully applying display: flex; to a parent container or display: inline-block; to the individual elements, you can effortlessly arrange your boxes horizontally.

1. Using Flexbox (display: flex;)

Flexbox, or the Flexible Box Layout module, is a one-dimensional layout method designed to arrange items within a container along a single axis (either row or column). It's incredibly powerful for creating flexible and responsive layouts. Applying display: flex; to the parent container of your boxes creates a flexible row layout, automatically positioning its direct children side by side.

How it works:

  • You designate a parent element as a flex container by setting display: flex;.
  • Its direct children become flex items and automatically arrange themselves in a row.
  • Flexbox offers a suite of properties to control alignment, spacing, and order of these items within the container.

HTML Structure Example:

<div class="flex-container">
    <div class="box">Box 1</div>
    <div class="box">Box 2</div>
    <div class="box">Box 3</div>
</div>

CSS for Flexbox:

.flex-container {
    display: flex; /* Makes the container a flex container */
    justify-content: space-around; /* Distributes space around items */
    align-items: center; /* Vertically centers items */
    gap: 20px; /* Adds space between flex items */
    border: 2px solid #333;
    padding: 10px;
    background-color: #f0f0f0;
}

.box {
    background-color: #007bff;
    color: white;
    padding: 20px;
    text-align: center;
    width: 120px;
    height: 80px;
    border-radius: 5px;
}

Key Flexbox Properties for Alignment:

  • justify-content: Controls horizontal alignment of items within the container.
    • flex-start: Items align to the start of the container.
    • flex-end: Items align to the end of the container.
    • center: Items center in the container.
    • space-between: Items are evenly distributed with space between them.
    • space-around: Items are evenly distributed with space around them.
    • space-evenly: Items are distributed so that the space between any two items (and the space to the edges) is equal.
  • align-items: Controls vertical alignment of items across the cross-axis.
    • flex-start: Items align to the top of the container.
    • flex-end: Items align to the bottom of the container.
    • center: Items vertically center in the container.
    • stretch: Items stretch to fill the container (default).
    • baseline: Items align according to their baselines.
  • gap: Sets the gap (gutter) between flex items. This is a shorthand for row-gap and column-gap.

For a comprehensive guide, refer to the MDN Web Docs on Flexbox.

2. Using Inline-Block (display: inline-block;)

The display: inline-block; property allows elements to behave like both inline and block elements. This means they will sit horizontally next to each other like inline elements, but you can also apply block-level properties such as width, height, margin, and padding.

How it works:

  • You apply display: inline-block; to each individual box you want to align side by side.
  • These boxes will flow like text, allowing them to appear on the same line if there's enough space.
  • Unlike pure inline elements, inline-block elements respect width and height settings.

HTML Structure Example:

<div class="inline-block-container">
    <div class="box-inline">Box A</div>
    <div class="box-inline">Box B</div>
    <div class="box-inline">Box C</div>
</div>

CSS for Inline-Block:

.inline-block-container {
    text-align: center; /* Can be used to center inline-block elements */
    border: 2px solid #666;
    padding: 10px;
    background-color: #e9e9e9;
}

.box-inline {
    display: inline-block; /* Makes elements sit side-by-side */
    background-color: #28a745;
    color: white;
    padding: 20px;
    text-align: center;
    width: 120px;
    height: 80px;
    margin: 0 10px; /* Adds horizontal margin between boxes */
    border-radius: 5px;
}

Considerations for Inline-Block:

  • Whitespace: A common issue with inline-block is that HTML whitespace (spaces, tabs, newlines) between the closing tag of one inline-block element and the opening tag of the next will render as a visible space. This can be mitigated by removing the whitespace in HTML, using negative margins, or setting font-size: 0; on the parent and resetting it on the children.
  • Vertical Alignment: Use the vertical-align property (e.g., vertical-align: top;, middle;, bottom;) on the inline-block elements to control their vertical positioning relative to each other.

For more details on inline-block, visit W3Schools on Inline-Block.

Comparison: Flexbox vs. Inline-Block

Both methods achieve side-by-side alignment, but they excel in different scenarios:

Feature Flexbox (display: flex; on parent) Inline-Block (display: inline-block; on children)
Control Axis One-dimensional (row or column) Flows like text, respecting block properties
Responsiveness Highly flexible and responsive with built-in tools Requires more manual adjustments for complex responsiveness
Alignment Powerful properties (justify-content, align-items) for precise control text-align on parent for horizontal, vertical-align on elements for vertical
Spacing gap property for easy spacing between items margin property is typically used
Whitespace Not affected by HTML whitespace between elements Affected by HTML whitespace, potentially creating unwanted gaps
Use Case Ideal for distributing items, complex alignments, and responsive grids Simple, straightforward side-by-side placement of elements that need width/height

Other Methods (Less Common for Simple Side-by-Side)

While Flexbox and Inline-Block are preferred, you might encounter or use other methods:

  • CSS Grid (display: grid;): A two-dimensional layout system that's incredibly powerful for entire page layouts. While it can place items side by side, it's often overkill for simply aligning a few boxes in a row.
  • Floats (float: left; or float: right;): An older layout method, often used to wrap text around images or align elements side-by-side. It requires clearing floats (using clear: both; or overflow: hidden; on the parent) to prevent layout issues. Generally, Flexbox is a superior alternative for modern layouts.

By choosing between Flexbox for its robust flexibility and inline-block for its simplicity, you can effectively arrange your HTML boxes side by side to create organized and visually appealing web layouts.