Два вопроса.Сначала вы должны рассмотреть заполнение, поэтому добавьте box-sizing:border-box
, затем вы определили ширину, используя vw
единицу, так что у вас будет квадрат только при первом открытии страницы и никогда изменить размер браузера.
var square = document.getElementById('square');
square.style.height = square.clientWidth + 'px';
#square {
background-color: blue;
width: calc(20vw - 16px);
padding: 8px;
box-sizing:border-box;
}
<div id="square">Element</div>
если вы хотите, чтобы размер квадрата оставался при изменении размера окна, вам нужно использовать то же заданное значение, а не вычисленное значение в пикселях (Как читать значения правил CSS с помощью JavaScript? )
Или изменить значение при изменении размера:
var square = document.getElementById('square');
square.style.height = square.clientWidth + 'px';
window.onresize=function() {
square.style.height = square.clientWidth + 'px';
};
#square {
background-color: blue;
width: calc(20vw - 16px);
padding: 8px;
box-sizing:border-box;
}
<div id="square">Element</div>
В качестве примечания вы можете рассмотреть переменную CSS, чтобы указать одно и то же значение только один раз, или отметьте это: Сохраните аспектсоотношение деления с CSS
#square {
--v:calc(20vw - 16px);
background-color: blue;
width: var(--v);
height: var(--v);
padding: 8px;
box-sizing:border-box;
}
<div id="square">Element</div>