Learnwizy Technologies Logo

Learnwizy Technologies

Class 4: CSS Box Model & Layout Basics

In this class, we will explore the foundational concepts of CSS layout, focusing on the CSS Box Model and the fundamental differences between block-level and inline-level elements. Understanding these concepts is crucial for effectively controlling the spacing, size, and positioning of elements on your web page.


Understanding the CSS Box Model

Every HTML element on a web page is considered a rectangular box, and this concept is known as the CSS Box Model. This model describes how elements are rendered in terms of their content, padding, border, and margin.

The Box Model consists of four main parts, from the innermost to the outermost:

  1. Content: The actual content of the element, such as text, images, or video. Its size is determined by width and height properties.
  2. Padding: The clear space between the content and the border. Padding is inside the element and takes on the background color of the element.
  3. Border: A line that goes around the padding and content. You can set the width, style, and color of the border.
  4. Margin: The clear space outside the border. Margins are used to create space between elements. Margins are transparent.

Here's a visual representation:

CSS Box Model Diagram

Example:

Consider a div element. We can apply styles to each part of the box model:

// index.html
<div class="box-example">
  This is content inside the box.
</div>
// styles.css
.box-example {
  width: 200px;         /* Content width */
  height: 100px;        /* Content height */
  padding: 20px;        /* 20px space between content and border */
  border: 5px solid blue; /* 5px blue solid border */
  margin: 30px;         /* 30px space outside the border */
  background-color: lightgray;
}

In the example above:

box-sizing Property:

By default, the width and height properties only apply to the content area. This means if you set width: 200px; and then padding: 20px;, the total width of the element will be 200px (content) + 20px (left padding) + 20px (right padding) = 240px.

To make width and height include padding and border (making layout calculations more intuitive), you can use box-sizing: border-box;. This is a commonly used best practice.

.box-example {
  box-sizing: border-box; /* Width and height include padding and border */
  /* ... other properties ... */
}

With box-sizing: border-box;, if width: 200px; and padding: 20px;, the content area will shrink to accommodate the padding, so the total visible width of the element (content + padding + border) remains 200px.


Block-level vs. Inline-level Elements

HTML elements have a default display property that categorizes them as either block-level or inline-level, which affects how they behave in the document flow.

Block-level Elements

<div style="background-color: lightcoral;">Block 1</div>
<div style="background-color: lightgreen;">Block 2</div>
<p style="background-color: lightblue;">Paragraph</p>

Each div and p element will appear on its own line and stretch across the available width.

Inline-level Elements

<p>This is a <span style="background-color: yellow; padding: 5px;">span element</span>
 within a paragraph.</p>
<a href="#" style="background-color: orange;">Link</a>
<strong style="background-color: pink;">Strong Text</strong>

The span, a, and strong elements will flow within the same line as surrounding text, and their width will be determined solely by their content.


Controlling Element Display with display Property

The display CSS property allows you to change the default display behavior of an element.

display: block

Forces an inline element to behave like a block-level element.

<span style="display: block; background-color: lightblue; width: 100px; margin: 10px;">
I am a block span</span>
<span style="display: block; background-color: lightgreen; width: 100px; margin: 10px;">
I am another block span</span>

Even though they are span elements, setting display: block makes them stack vertically, take up full width (or specified width), and allows all margin/padding properties to work.

display: inline

Forces a block-level element to behave like an inline element.

<div style="display: inline; background-color: lightpink; padding: 5px;">
I am an inline div</div>
<div style="display: inline; background-color: lightsalmon; padding: 5px;">
I am another inline div</div>

The div elements will now appear on the same line, and width/height will have no effect.

display: inline-block

This is a very useful display value that combines aspects of both block and inline elements.

<div style="display: inline-block; width: 150px; height: 70px; margin: 10px;
 background-color: lightcyan;">Box 1</div>
<div style="display: inline-block; width: 150px; height: 70px; margin: 10px;
 background-color: lightyellow;">Box 2</div>
<div style="display: inline-block; width: 150px; height: 70px; margin: 10px;
 background-color: lightpink;">Box 3</div>

These boxes will appear side-by-side (if there's enough space) and maintain their specified width, height, and margins.

This is very common for creating grids of items before more advanced layout methods like Flexbox or Grid.


Introduction to width and height

The width and height properties allow you to explicitly define the dimensions of an element's content area (unless box-sizing: border-box is used, in which case they include padding and border).

.card {
  width: 300px;
  height: 200px;
  background-color: #eee;
  padding: 15px;
}

Understanding the Box Model and display properties is fundamental to creating well-structured and visually appealing web layouts. It forms the basis upon which more advanced layout techniques like Flexbox and CSS Grid are built.