Если вы хотите, чтобы #header
была такой же ширины, как и ваш контейнер, с отступом 10px, вы можете опустить декларацию ширины. Это приведет к тому, что он неявно займет всю ширину своего родителя (поскольку div по умолчанию является элементом уровня блока).
Тогда, поскольку вы не определили ширину, 10px отступа будет правильно применен внутри элемента, а не добавлен к его ширине:
#container {
position: relative;
width: 80%;
}
#header {
position: relative;
height: 50px;
padding: 10px;
}
Вы можете увидеть это в действии здесь .
Ключ при использовании процентной ширины и отступов / полей в пикселях не позволяет определять их для одного и того же элемента (если вы хотите точно контролировать размер). Примените процентную ширину к родительскому элементу, а затем отступы / поля пикселей для display: block
дочернего элемента без установленной ширины.
Обновление
Другим вариантом решения этой проблемы является использование box-sizing CSS-правила:
#container {
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box; /* Firefox, other Gecko */
box-sizing: border-box; /* Opera/IE 8+ */
/* Since this element now uses border-box sizing, the 10px of horizontal
padding will be drawn inside the 80% width */
width: 80%;
padding: 0 10px;
}
Вот пост, рассказывающий о том, как размеры ящика работают .