Почему абсолютно позиционированный div растягивает вёрстку?

Есть div с контентом сайта. Стоит задача по бокам от него разместить блоки с рекламой.
Естественно, ширина контентного div'а неизвестна и меняется, размеры рекламы также произвольны.
Вёрстку удалось свести вот к такому простейшему примеру:
<div class="site">
  <div class="content">content</div>
  <div class="ads left">ads-left</div>
  <div class="ads right">ads-right</div>
</div>
* смотри пример на JsFiddle

Рекламные блоки позиционированы абсолютно.
Левый блок отрисовывается как задумано: на узком экране показывается частично, остальное благополучно обрезается.
Правый же, если не помещается в экран, порождает горизонтальную полосу прокрутки.
Почему так происходит и как побороть?

Сразу говорю: вариант с "body { overflow-x: hidden; }" точно не подходит, т.к. он только скрывает саму прокрутку (а не обрезает страницу), и на мобильных устройствах при масштабировании странички получается некрасиво.

"CSS is awesome" ©

UPD: Решение на JsFiddle, спасибо demimurych
Впрочем, решение найдено, но ответ на вопрос, почему body слева обрезает выступающие абсолютно позиционированные элементы, а справа нет - остается открытым.
  • Вопрос задан
  • 3764 просмотра
Решения вопроса 1
demimurych
@demimurych
Оберните ваш div.site в еще один div нужного размера и к нему примените overflow:hidden
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Tesla
@Tesla
Почему бы не воспользоваться float вместо position: absolute? http://jsfiddle.net/mkwfv/3/
Ответ написан
@Masterme
> Левый блок отрисовывается как задумано: на узком экране показывается частично, остальное благополучно обрезается.

Это так, только толку от этого ноль, потому что левый блок шириной остаётся такой же, просто он скрывается за левой границей body вместе с контентом. Если бы ты был внимательнее - ты бы увидел, куда пропадает текст "ads left" внутри этого блока.

> т.к. он только скрывает саму прокрутку (а не обрезает страницу)

С каких пор это не одно и то же?

> Почему так происходит и как побороть?

Происходит потому что левая граница body скрывает контент, а правая - нет. Правильно это решается таблицей.
Ответ написан
@axeax
Размер рекламы произвольный и по ширине и по высоте?
Ответ написан
Комментировать
@wdtime_ru
про position и overflow, на примерах: position css | overflow css
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы