overflow: hidden clips content that overflows an element box, but only when the element is the correct containing box and the child participates in that clipping context. Fixed elements, wrong parent selection, and unconstrained dimensions often make it look broken.
The fastest debugging path is to identify which box should clip the content, verify it has a real size, and inspect whether the overflowing child is positioned or transformed in a way that escapes the expected clipping area.
The overflow: hidden property clips content that extends beyond an element's bounds. However, it doesn't work in all situations "" particularly with position: fixed children, elements that create new stacking contexts, or when the overflow is on the wrong element.
/* ❌ Fixed child escapes overflow: hidden */
.container { overflow: hidden; }
.child { position: fixed; } /* Ignores overflow! */
/* ✅ Use clip-path for fixed children */
.container { clip-path: inset(0); }
/* ✅ Or change fixed to absolute */
.container { position: relative; overflow: hidden; }
.child { position: absolute; } /* Respects overflow */
/* ❌ position: fixed is relative to viewport, not parent */
.modal-container { overflow: hidden; }
.modal { position: fixed; top: 0; left: 0; } /* Ignores overflow! */
/* ✅ Use transform on parent to contain fixed children */
.modal-container {
transform: translateZ(0); /* Creates containing block for fixed */
overflow: hidden;
}
/* ✅ Or use clip-path */
.modal-container { clip-path: inset(0 round 8px); }
/* ❌ container collapses with floated children */
.container { /* No height "" collapses! */ }
.child { float: left; height: 200px; }
/* ✅ overflow: hidden clears floats */
.container { overflow: hidden; }
/* ✅ Modern clearfix */
.container::after {
content: '';
display: table;
clear: both;
}
/* ✅ Best: Use flexbox instead of floats */
.container { display: flex; }
/* ✅ Prevent body scroll (e.g., when modal is open) */
body.modal-open {
overflow: hidden;
}
/* ✅ Prevent horizontal scroll */
body {
overflow-x: hidden;
}
/* ✅ Note: overflow-x and overflow-y are separate */
.container {
overflow-x: hidden; /* Only hide horizontal overflow */
overflow-y: auto; /* Allow vertical scroll */
}
/* ✅ Clip image to card with border-radius */
.card {
border-radius: 12px;
overflow: hidden; /* Clips image corners */
}
.card img {
width: 100%;
height: 200px;
object-fit: cover; /* Fill without distortion */
}
.lesson-box:empty::before {
content: "CSS Overflow Hidden Not Working Fix: add visible content";
}
position: fixed elements are positioned relative to the viewport, not their parent. They escape overflow: hidden. Use transform: translateZ(0) on the parent to create a containing block for fixed elements.
Add overflow-x: hidden to the body or html element. Check for elements wider than the viewport using browser DevTools. Common culprits: wide images, negative margins, or elements with explicit widths.
overflow: hidden (with any value other than visible) establishes a Block Formatting Context (BFC). A BFC contains its floated children, preventing container collapse.
Explore 500+ free tutorials across 20+ languages and frameworks.