The CSS Box Model

Every HTML element is a rectangular box. The box model defines how content, padding, border, and margin are sized and arranged.

Box Model Components

Code
┌─────────────────────────────┐
│          MARGIN             │
│  ┌───────────────────────┐  │
│  │       BORDER          │  │
│  │  ┌─────────────────┐  │  │
│  │  │    PADDING      │  │  │
│  │  │  ┌───────────┐  │  │  │
│  │  │  │  CONTENT  │  │  │  │
│  │  │  └───────────┘  │  │  │
│  │  └─────────────────┘  │  │
│  └───────────────────────┘  │
└─────────────────────────────┘
CSS
/* content-box (default) — width = content only */
.box {
    width: 200px;           /* Content width */
    padding: 20px;          /* 20px on each side */
    border: 5px solid;      /* 5px on each side */
    margin: 10px;           /* 10px on each side */
    /* Total width = 200 + 40 + 10 + 20 = 270px */
}

/* border-box — width = content + padding + border */
.box {
    box-sizing: border-box;
    width: 200px;           /* Total width including padding and border */
    padding: 20px;
    border: 5px solid;
    margin: 10px;
    /* Total width = 200 + 20 = 220px (margin separate) */
}

/* Global border-box (highly recommended!) */
*, *::before, *::after {
    box-sizing: border-box;
}

Margin

CSS
/* Shorthand */
.margin-all { margin: 20px; }                    /* All sides */
.margin-vh { margin: 10px 20px; }               /* top/bottom left/right */
.margin-trbl { margin: 10px 20px 30px 40px; }   /* top right bottom left */
.margin-center { margin: 0 auto; }               /* Center horizontally */

/* Individual */
margin-top: 10px;
margin-right: 20px;
margin-bottom: 30px;
margin-left: auto;    /* Push right */

/* Auto margins center block elements */
.container {
    width: 800px;
    margin: 0 auto;   /* Centers the element */
}

/* Margin collapse (block elements) */
.a { margin-bottom: 20px; }
.b { margin-top: 30px; }
/* Visual gap = 30px (not 50px!) — larger margin wins */

Padding

CSS
/* Same shorthand as margin */
.card { padding: 16px; }
.card { padding: 16px 24px; }         /* vertical horizontal */
.card { padding: 8px 16px 24px; }     /* top horizontal bottom */
.card { padding: 8px 16px 24px 32px; } /* top right bottom left */

/* Padding affects clickable area on buttons */
.button {
    padding: 12px 24px;
    cursor: pointer;
}

Border

CSS
/* Basic border */
.box { border: 1px solid #ccc; }

/* Individual sides */
.box { border-top: 2px solid red; }
.box { border-bottom: 1px dashed gray; }

/* Rounded corners */
.circle { border-radius: 50%; }
.rounded { border-radius: 8px; }
.subtle { border-radius: 4px; }

/* Border image */
.fancy-border {
    border: 3px solid;
    border-image: linear-gradient(45deg, red, blue) 1;
}

Dimensions

CSS
/* Width and height */
.box {
    width: 300px;        /* Fixed */
    max-width: 100%;     /* Never wider than container */
    min-width: 200px;    /* Never narrower than 200px */
    height: 200px;
    max-height: 100vh;   /* Never taller than viewport */
}

/* Percentage (relative to parent) */
.sidebar { width: 25%; }
.content { width: 75%; }

/* Viewport units */
.hero { height: 100vh; }              /* Full viewport height */
.title { font-size: 5vw; }            /* 5% of viewport width */

Knowledge Check

4 questions — test your understanding

1

What does `box-sizing: border-box` do?

2

Why do vertical margins collapse but horizontal margins don't?

3

What is the total width of an element with width: 200px, padding: 20px, border: 5px (border-box)?

4

What does `margin: 0 auto` do?

Next: Padding