Проблема: body
по умолчанию position:static
. Добавление поля к прямому ребенку приведет к его смещению пропорционально независимо от его высоты.
Решение: Обеспечить position:fixed
к body
, чтобы предотвратить смещение и удалить полосы прокрутки.
Demo: http://jsfiddle.net/abhitalks/mZKC5/18/
CSS:
html, body {
height: 100%; width: 100%;
}
body {
position: fixed; /* important to keep it fixed */
margin: 0; padding: 0px 10px;
font-family: helvetica;
background: black; color: yellow;
}
#page {
height: calc(100% - 60px); /* 10+10 padding + 20+20 margin = 60px is ok */
width: 100px;
padding: 10px;
margin: 20px auto;
background-color: rgba(255, 255, 255, .2);
}
Редактировать: (на @ AWolff-х предложение)
Вышеприведенный пример показывает, является причиной тело свитки, когда маржа применяется к прямому ребенку. Но, поскольку побочным эффектом создания является то, что он больше не будет прокручиваться, даже если вы захотите добавить более относительный контент.
Лучшим решением было бы использовать абсолютное позиционирование для размещения элементов, если вам нужно совершенство пикселя.
Или следовать @NoobEditors предложение использовать относительную positioning
вместо margins
относительно, потому что это будет по отношению к body
в любом случае (даже если он является абсолютным).
.
Кажется, что элемент на самом деле «больше, чем тело» ... Однако - переполнение-y: скрытое на теле удаляет полосу прокрутки, если вы этого хотите? – sinisake