#html #css
#HTML #css
Вопрос:
Я хочу установить ширину header
объекта на conatiner
ширину с учетом header
поля
div.container {
width: 100%;
height: 300px;
border: 1px solid red;
position:relative;
}
header{
width: 100%;
border: 1px solid green;
height: 20px;
margin: 10px;
}
<div class="container">
<header></header>
</div>
но header
элемент выходит за пределы контейнера на несколько пикселей с правой стороны.
Также box-sizing: border-box;
пытался header
добавить в стиль, ничего не произошло. Почему?
Ответ №1:
Установить width: calc(100% - 22px);
для header
. Это 100% минус удвоенная граница (2 * 1px) минус удвоенное поле (2 * 10px), что составляет 22px.
div.container {
width: 100%;
height: 300px;
border: 1px solid red;
position:relative;
}
header{
width: calc(100% - 22px);
border: 1px solid green;
height: 20px;
margin: 10px;
}
<div class="container">
<header></header>
</div>
Комментарии:
1. поскольку ни одна из доступных настроек для определения размера поля (border-box, content-box, padding-box) не учитывает поля — поля находятся за пределами элемента.
2. есть ли более элегантный способ вычисления ширины? Что, если я захочу изменить поле позже или даже добавить отступы? Мне также нужно изменить
calc
функцию3. затем вам нужно будет использовать javascript / jQuery для динамического получения этих значений
4. или вы используете LESS или SASS — тогда вы можете определить это значение поля как переменную и использовать его в своем LESS / SASS. Таким образом, вам нужно будет внести только одно изменение, но это менее очевидно.
Ответ №2:
Я предлагаю вместо использования полей для дочернего div — использовать padding:10px
для родительского div. Я обновил ваш фрагмент кода.
div.container {
width: 100%;
height: 300px;
border: 1px solid red;
position:relative;
padding:10px;
}
header{
width: 100%;
border: 1px solid green;
height: 20px;
}
<div class="container">
<header></header>
</div>