CSS Box Model
Understanding how elements are sized and spaced in CSS
📦 What is the CSS Box Model?
The CSS Box Model describes how every HTML element is represented as a rectangular box. Each box consists of content, padding, border, and margin areas.
/* Every element is a box with these parts */
.box {
width: 200px; /* Content width */
padding: 20px; /* Space inside */
border: 2px solid blue; /* Border around */
margin: 10px; /* Space outside */
}
Parts of the Box Model
Content
The actual content (text, images, etc.)
width: 200px;
height: 100px;
Padding
Space between content and border
padding: 20px;
Border
Line around the padding and content
border: 2px solid black;
Margin
Space outside the border
margin: 10px;
🔹 Box Model Visualization
Here's how the box model works with a visual example:
/* Box Model Example */
.demo-box {
width: 200px; /* Content width */
height: 100px; /* Content height */
padding: 20px; /* 20px space inside */
border: 5px solid #3498db; /* 5px blue border */
margin: 15px; /* 15px space outside */
background-color: #ecf0f1; /* Background color */
}
<div class="demo-box">
This is the content area
</div>
Visual Result:
🔹 Box Model Calculation
Total element size = width/height + padding + border + margin. Understanding this calculation is essential for precise layout control. Modern CSS with box-sizing: border-box simplifies this by including padding and border within specified dimensions. Mastering the box model creates consistent, predictable layouts that render correctly across devices—improving user experience and technical SEO performance.
📏 Total Element Size Formula:
- Total Width = margin-left + border-left + padding-left + width + padding-right + border-right + margin-right
- Total Height = margin-top + border-top + padding-top + height + padding-bottom + border-bottom + margin-bottom
/* Example Calculation */
.calculated-box {
width: 100px; /* Content width */
height: 50px; /* Content height */
padding: 10px; /* All sides */
border: 2px solid red; /* All sides */
margin: 5px; /* All sides */
}
/* Total width = 5 + 2 + 10 + 100 + 10 + 2 + 5 = 134px */
/* Total height = 5 + 2 + 10 + 50 + 10 + 2 + 5 = 84px */
Calculation Example:
• Content: 100px × 50px
• Padding: 10px on all sides
• Border: 2px on all sides
• Margin: 5px on all sides
• Total space taken: 134px × 84px
🔹 Box-Sizing Property
The box-sizing property controls how element dimensions are calculated. border-box includes padding and border in the width/height, while content-box adds them externally. Using * { box-sizing: border-box; } creates predictable layouts and prevents overflow issues. This results in more stable pages with fewer layout shifts—a critical factor for Core Web Vitals and search engine rankings.
🔸 content-box (Default)
/* Default behavior */
.content-box {
box-sizing: content-box;
width: 200px;
padding: 20px;
border: 5px solid blue;
}
/* Total width = 200 + 20 + 20 + 5 + 5 = 250px */
🔸 border-box (Recommended)
/* Width includes padding and border */
.border-box {
box-sizing: border-box;
width: 200px;
padding: 20px;
border: 5px solid blue;
}
/* Total width = 200px (padding and border included) */
Comparison:
💡 Pro Tip:
Many developers use
box-sizing: border-box
for all elements to make sizing more predictable:
* {
box-sizing: border-box;
}
🔹 Practical Box Model Examples
🔸 Card Component
/* Card with proper spacing */
.card {
width: 300px;
padding: 20px; /* Inner space */
margin: 20px auto; /* Center with outer space */
border: 1px solid #ddd; /* Subtle border */
border-radius: 8px; /* Rounded corners */
background-color: white;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
box-sizing: border-box; /* Include padding in width */
}
.card h3 {
margin-top: 0; /* Remove top margin */
margin-bottom: 15px;
color: #333;
}
.card p {
margin-bottom: 0; /* Remove bottom margin */
color: #666;
line-height: 1.5;
}
<div class="card">
<h3>Card Title</h3>
<p>This is a well-structured card component using the box model principles.</p>
</div>
Result:
Card Title
This is a well-structured card component using the box model principles.
🔸 Button with Proper Spacing
/* Button with box model considerations */
.btn {
display: inline-block;
padding: 12px 24px; /* Inner space for clickable area */
margin: 5px; /* Space between buttons */
border: 2px solid #007cba; /* Visible border */
border-radius: 4px;
background-color: #007cba;
color: white;
text-decoration: none;
font-size: 16px;
box-sizing: border-box;
cursor: pointer;
}
.btn:hover {
background-color: transparent;
color: #007cba;
}
Button Example:
🔹 Common Box Model Issues
⚠️ Common Problems & Solutions:
-
Unexpected element sizes:
Use
box-sizing: border-box - Elements not fitting: Check total width including padding, border, margin
- Margin collapse: Vertical margins between elements can collapse
- Inline elements: Width and height don't work on inline elements