我需要制作div
方格。 div
的高度是动态变化的,我希望宽度等于高度。我已经看到很多解决方案将 height 设置为等于 width (在伪元素上使用padding-bottom
),但是我需要它方式arround。这可以用纯CSS吗?
答案 0 :(得分:2)
不......好吧,有这个技巧,其中一个使用隐藏的图像
div {
display: inline-block;
height: 170px;
background: red;
}
div img {
visibility: hidden;
height: 100%;
}
<div>
<img src="http://placehold.it/50">
</div>
更新
这是一个脚本版本,也将它保持在宽度
之内Stack snippet
(function (d,t) {
window.addEventListener("resize", throttler, false);
window.addEventListener("load", throttler(), false); /* run once on load to init */
function throttler() {
if ( !t ) {
t = setTimeout(function() {
t = null;
keepSquared(d.querySelector('.container'),
d.querySelector('.squared'));
}, 66);
}
}
function keepSquared(co,el) {
var s = window.getComputedStyle(co, null);
var m = Math.min(
parseFloat(s.getPropertyValue("width")),
parseFloat(s.getPropertyValue("height")));
el.style.cssText =
'width: ' + m + 'px; height: ' + m + 'px;';
}
})(document,null);
html, body {
height: 100%;
margin: 0;
}
.container {
position: relative;
width: 50%;
height: 50%;
top: 50px;
left: 50px;
border: 1px solid black;
box-sizing: border-box;
}
.squared {
background-color: red;
}
<div class="container">
<div class="squared">
</div>
</div>
注意:由于resize
events可以高速率触发,因此限制器用于降低速率,因此处理程序不会经常执行昂贵的操作,例如DOM修改。 < / p>