我需要制作一个基于屏幕宽度的正方形元素。为了将高度设置为与宽度相同,我尝试使用JS,但似乎有点错误。这是一个例子
var square = document.getElementById('square');
square.style.height = square.clientWidth + 'px';
#square {
background-color: blue;
width: calc(20vw - 16px);
padding: 8px;
}
<div id="square">Element</div>
上方的蓝色“正方形”不是正方形。能解释为什么吗?我尝试使用clientWidth
和scrollWidth
来代替offsetWidth
,但结果相似。我也没有得到style.width
来给出正确的数字。
即使您在Chrome上检查了蓝色正方形,您也会得到一个高度和宽度近似但仍然非常不同的数字。
答案 0 :(得分:4)
两个问题。首先,您需要考虑填充,因此添加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>
如果要让正方形保持在窗口大小上,则需要使用相同的指定值,而不要使用以像素为单位的计算值(How do you read CSS rule values with 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变量仅指定一次相同的值,或者检查一下:Maintain the aspect ratio of a div with 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>
答案 1 :(得分:1)
您可以对高度使用相同的计算
width: calc(20vw - 16px);
height: calc(20vw - 16px);