Ответ 1
Если вы хотите, чтобы #header
была той же ширины, что и ваш контейнер, с 10px отступов, вы можете оставить объявление ширины. Это заставит его неявно взять всю свою родительскую ширину (поскольку div по умолчанию является элементом уровня блока).
Затем, поскольку вы не указали ширину на нем, 10px отступов будет правильно применено внутри элемента, а не добавляется к его ширине:
#container {
position: relative;
width: 80%;
}
#header {
position: relative;
height: 50px;
padding: 10px;
}
Здесь вы можете увидеть здесь.
Ключ при использовании процентной ширины и заполнения/полей пикселей не должен определять их на одном и том же элементе (если вы хотите точно контролировать размер). Примените процентную ширину к родительскому элементу, а затем добавление/размер пикселя к дочернию display: block
без установленной ширины.
Обновление
Другим вариантом для этого является использование правила CSS box-sizing:
#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;
}
Здесь рассказывается о том, как размер окна будет.