具有动态高度的CSS方块

时间:2016-12-28 12:39:06

标签: css css3

我需要制作div方格。 div的高度是动态变化的,我希望宽度等于高度。我已经看到很多解决方案将 height 设置为等于 width (在伪元素上使用padding-bottom),但是我需要它方式arround。这可以用纯CSS吗?

1 个答案:

答案 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>