Я предполагаю, что вы хотите, чтобы он выглядел так, как он выглядит, но с зеленой рамкой, не выступающей за синей, и все это умещается внутри 120px * 120px
.
Вы не указываете тип документа в этом коде, поэтому становится трудно заставить вещи работать между различными браузерами - некоторые браузеры переходят в «режим причуд».
С кодом, который вы дали, IE8, например, растягивает макет до ширины окна.
Первый шаг к тому, чтобы он выглядел согласованно, - это добавление типа документа, такого как тип документа HTML5:
<!DOCTYPE html>
Добавление, которое делает его похожим между Chrome, IE8, Firefox, Opera:
![](https://i.stack.imgur.com/6Tps8.png)
.. но это также заставляет его выглядеть неправильно, и не существует простого способа исправить это, потому что вы пытаетесь смешать измерения на основе %
и px
(простое решение - использовать просто %
или просто px
). Использование height: 100%
и padding: 20px
сделает элемент слишком высоким, потому что его общая высота будет заполнением плюс высота родительского элемента (это и является причиной вашего «переполнения»).
Итак, вот новый код, который дает визуальный эффект, который вы ищете, используя другой метод:
![](https://i.stack.imgur.com/tDPSo.png)
Демонстрация в реальном времени
<!DOCTYPE html>
<html>
<body style="width:120px; height:120px">
<div style="background:blue; width:100%; height:100%; position:relative">
<div style="background:green; position:absolute; top:20px; right:20px; bottom:20px; left:20px">
<div style="background:white; position:absolute; top:20px; right:20px; bottom:20px; left:20px"></div>
</div>
</div>
</body>
</html>