Adjust margin, border, padding, and content dimensions in real time. The diagram updates instantly — just like Chrome DevTools — and the ready-to-copy CSS output updates alongside it.
Settings
<!-- Presets -->
<div>
<div class="bm-section-header">
<span class="bm-section-label" style="background:#e8eaff;color:#3a3a6e;">Presets</span>
</div>
<div class="bm-presets">
<button class="bm-preset-btn active" onclick="bmApplyPreset('card',this)">Card</button>
<button class="bm-preset-btn" onclick="bmApplyPreset('button',this)">Button</button>
<button class="bm-preset-btn" onclick="bmApplyPreset('input',this)">Input</button>
<button class="bm-preset-btn" onclick="bmApplyPreset('container',this)">Container</button>
<button class="bm-preset-btn" onclick="bmApplyPreset('reset',this)">Reset</button>
</div>
</div>
<!-- Box-sizing -->
<div>
<div class="bm-section-header">
<span class="bm-section-label" style="background:#e8eaff;color:#3a3a6e;">box-sizing</span>
</div>
<div class="bm-sizing-toggle">
<label><input type="radio" name="bm-sizing" value="content-box" onchange="bmUpdate()"> content-box</label>
<label><input type="radio" name="bm-sizing" value="border-box" onchange="bmUpdate()" checked> border-box</label>
</div>
</div>
<!-- Content -->
<div>
<div class="bm-section-header">
<span class="bm-section-label bm-label-content">Content</span>
</div>
<div class="bm-four-grid">
<label>Width<input type="number" id="bm-cw" value="200" min="20" max="800" oninput="bmUpdate()"></label>
<label>Height<input type="number" id="bm-ch" value="100" min="20" max="800" oninput="bmUpdate()"></label>
</div>
</div>
<!-- Padding -->
<div>
<div class="bm-section-header">
<span class="bm-section-label bm-label-padding">Padding</span>
<label class="bm-link-toggle"><input type="checkbox" id="bm-link-padding" checked onchange="bmLinkChanged('padding')"> Link sides</label>
</div>
<div class="bm-four-grid">
<label>Top<input type="number" id="bm-pt" value="16" min="0" max="200" oninput="bmSideInput('padding','t')"></label>
<label>Right<input type="number" id="bm-pr" value="16" min="0" max="200" oninput="bmSideInput('padding','r')"></label>
<label>Bottom<input type="number" id="bm-pb" value="16" min="0" max="200" oninput="bmSideInput('padding','b')"></label>
<label>Left<input type="number" id="bm-pl" value="16" min="0" max="200" oninput="bmSideInput('padding','l')"></label>
</div>
</div>
<!-- Border -->
<div>
<div class="bm-section-header">
<span class="bm-section-label bm-label-border">Border</span>
<label class="bm-link-toggle"><input type="checkbox" id="bm-link-border" checked onchange="bmLinkChanged('border')"> Link sides</label>
</div>
<div class="bm-four-grid">
<label>Top<input type="number" id="bm-bt" value="1" min="0" max="50" oninput="bmSideInput('border','t')"></label>
<label>Right<input type="number" id="bm-br" value="1" min="0" max="50" oninput="bmSideInput('border','r')"></label>
<label>Bottom<input type="number" id="bm-bb" value="1" min="0" max="50" oninput="bmSideInput('border','b')"></label>
<label>Left<input type="number" id="bm-bl" value="1" min="0" max="50" oninput="bmSideInput('border','l')"></label>
</div>
<div class="bm-border-style-row">
<label>Border style</label>
<select id="bm-bstyle" onchange="bmUpdate()">
<option value="solid" selected>solid</option>
<option value="dashed">dashed</option>
<option value="dotted">dotted</option>
<option value="double">double</option>
<option value="groove">groove</option>
<option value="none">none</option>
</select>
</div>
</div>
<!-- Margin -->
<div>
<div class="bm-section-header">
<span class="bm-section-label bm-label-margin">Margin</span>
<label class="bm-link-toggle"><input type="checkbox" id="bm-link-margin" checked onchange="bmLinkChanged('margin')"> Link sides</label>
</div>
<div class="bm-four-grid">
<label>Top<input type="number" id="bm-mt" value="16" min="0" max="200" oninput="bmSideInput('margin','t')"></label>
<label>Right<input type="number" id="bm-mr" value="16" min="0" max="200" oninput="bmSideInput('margin','r')"></label>
<label>Bottom<input type="number" id="bm-mb" value="16" min="0" max="200" oninput="bmSideInput('margin','b')"></label>
<label>Left<input type="number" id="bm-ml" value="16" min="0" max="200" oninput="bmSideInput('margin','l')"></label>
</div>
</div>
Box Model Diagram
margin
border
padding
200 × 100
content
<!-- Computed size -->
<div class="bm-totals">
<div class="bm-total-box">
<div class="bm-total-val" id="bm-total-w">—</div>
<div class="bm-total-lbl">Total width (px)</div>
</div>
<div class="bm-total-box">
<div class="bm-total-val" id="bm-total-h">—</div>
<div class="bm-total-lbl">Total height (px)</div>
</div>
</div>
Generated CSS
How to Use
- Choose a preset — Card, Button, Input, or Container loads sensible defaults instantly.
- Adjust values — Each area (margin, border, padding, content) has independent top/right/bottom/left fields. Enable Link sides to keep all four sides equal.
- Toggle box-sizing — Switch between
content-boxandborder-boxto see how the computed total changes. - Read the diagram — Colors match Chrome DevTools: orange = margin, yellow = border, green = padding, blue = content.
- Copy CSS — Hit Copy CSS and paste directly into your stylesheet.
Understanding the CSS Box Model
Every HTML element is a rectangular box made of four concentric layers:
| Layer | Color | Description |
|---|---|---|
| Content | Blue | Where text and child elements live. Set by width / height. |
| Padding | Green | Space between content and border. Background color fills this area. |
| Border | Yellow | The visible edge of the element. Can have width, style, and color. |
| Margin | Orange | Invisible space outside the border. Separates elements from each other. |
content-box vs border-box
With content-box (the CSS default) width refers to the content area only — padding and border are added on top. With border-box width includes content, padding, and border, making layouts far more predictable. Most modern projects use box-sizing: border-box globally.
*, *::before, *::after {
box-sizing: border-box;
}
Margin shorthand reference
| Syntax | Meaning |
|---|---|
margin: 16px | All four sides = 16 px |
margin: 8px 16px | Top/Bottom = 8 px, Left/Right = 16 px |
margin: 8px 16px 24px | Top = 8, Left/Right = 16, Bottom = 24 |
margin: 8px 12px 16px 20px | Top / Right / Bottom / Left |
Related Tools
- CSS Spacing Generator — Generate consistent spacing scales
- CSS Grid Generator — Build grid layouts visually
- Flexbox Generator — Design flex containers and items
