Когда overflow: hidden не работает
Есть несколько причин, по которым дочерние боксы элементов, могут «вываливаться» из родительских.
Например, когда в дочернем боксе есть длинное неразрывое слово типа Тунгнафедльсйёкюдль, «вырывающееся» за пределы контейнера.
Или когда дочернему боксу задана ширина или высота явно больше, чем у родительского бокса.
Также если дочернему боксу заданы отрицательное значение margin или элемент абсолютно спозиционирован так, что он выходит за пределы родителя.
И известный способ ликвидировать эффект «вываливания» — применить свойство overflow: hidden. В таком случае части бокса, вышедшие за пределы родительского элемента обрежутся без возможности доскроллить до них вручную.
Но overflow: hidden не всегда обрезает выходящее за пределы содержимое бокса. Есть исключение: абсолютно спозиционированный элемент не будет обрезаться родительским элементом с overflow: hidden, если родитель не является содержащим блоком (containing block), то есть ему не заданы position со значением absolute, relative или fixed.
Пример:
<div class="parent"> <div class="overflow"> <div class="absolute-child">LonglonglonglonglongAbsolute</div> <div class="static-child">LonglonglonglonglongStatic</div> </div></div>.parent { position: relative;}.overflow { overflow: hidden;}.absolute-child { position: absolute;}.static-child { position: static;}В примере бокс .absolute-child не обрезается по границам бокса .overflow, а
при этом .static-child — обрезается, так как он имеет обычное
позиционирование. Пример в codepen