CSS:使div宽度与高度成比例

ind*_*two 31 html css scale css3

这有点难以解释,但是:我想要一个响应高度div(height: 100%),它将缩放与高度成比例的宽度(反之亦然).

我知道这种方法利用padding-top黑客来使高度与宽度成正比,但我需要它以相反的方式工作.话虽如此,我并不是非常热衷于对该方法中内容的绝对定位元素的额外要求,所以我意识到我可能会在这里要求月球.

为了帮助可视化,这是一个图像:

期望效果的视觉表示

......这里是一个jsFiddle,说明了几乎相同的东西.

值得注意的是,我已经使用:before:after伪元素垂直对齐我想按比例缩放的框的内容.

我真的非常非常喜欢不必恢复到jQuery,只是因为调整大小处理程序的内在要求以及通常更多的调试...但如果这是我唯一的选择,那么命令.

fee*_*ela 14

哦,你可能会使用那种"填充顶部"技巧.

width: 50%;
height: 0;
padding-bottom: 50%;
Run Code Online (Sandbox Code Playgroud)

http://absolide.tumblr.com/post/7317210512/full-css-fluid-squares

要么:

.square-box{
    position: relative;
    width: 50%;
    overflow: hidden;
    background: #4679BD;
}
.square-box:before{
    content: "";
    display: block;
    padding-top: 100%;
}
Run Code Online (Sandbox Code Playgroud)

http://codeitdown.com/css-square-rectangle/

CSS中的垂直填充与元素的宽度有关,而不是高度.

  • 是的,我知道那个; 遗憾的是,这种设计的规格是宽度必须相对于高度按比例设置,而不是相反.看起来我可能会转向使用jQuery. (2认同)

Pat*_*nka 14

我一直想知道这个问题的纯css解决方案有一段时间了.我终于想出了一个使用ems的解决方案,可以使用vws逐步增强:

有关完整工作演示和说明,请参阅codepen链接:

http://codepen.io/patrickkunka/pen/yxugb

简化版:

.parent {
  font-size: 250px; // height of container
  height: 1em;
}

.child {
  height: 100%;
  width: 1em; // 100% of height
}
Run Code Online (Sandbox Code Playgroud)

  • 在这里使用`font-size`真的看起来像是一个丑陋且可能不方便的黑客. (6认同)

小智 7

字体解决方案要求高度已知.我找到了一个解决方案,使元素在父div中具有未知宽度和高度的比例.这是一个演示.

我正在使用的技巧是将图像用作间隔物.代码解释说:

<div class="heightLimit">
 <img width="2048" height="2048" class="spacer"
  src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAA
       P///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">
 <div class="filler">
  <div class="proportional">
  </div>
 </div>
</div>
Run Code Online (Sandbox Code Playgroud)

所以它不是最漂亮的两个额外的div和一个无用的图像.但情况可能更糟.图像元素需要具有所需尺寸的宽度和高度.宽度和高度需要与允许的最大尺寸一样大(一个特征!).

css:

.heightLimit {
 position: absolute;
 top: 0;
 left: 0;
 height: 100%;
 width: auto;
 max-width: 100%;
 overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)

此元素用于限制高度,但要水平扩展(width: auto),但永远不会超出父(max-width).需要隐藏溢出,因为有些孩子会突然出现在div之外.

.spacer {
 width: auto;
 max-height: 100%;
 visibility: hidden;
}
Run Code Online (Sandbox Code Playgroud)

此图像与高度成比例不可见和缩放,同时调整宽度并强制调整父级的宽度.

.filler {
 position: absolute;
 top: 0;
 left: 0;
 bottom: 0;
 right: 0;
}
Run Code Online (Sandbox Code Playgroud)

需要此元素以使用绝对定位的容器填充空间.

.proportional {
 position: relative;
 width: 100%;
 height: 0;
 padding-bottom: 100%;
}
Run Code Online (Sandbox Code Playgroud)

在这里,我们的比例元素通过熟悉的填充底部技巧获得与宽度成比例的高度.

不幸的是,Chrome和IE中存在一个错误,因此如果您使用Javascript修改父元素,例如在我的演示中,尺寸将不会更新.有一个hack可用于解决这个问题,如我的演示中所示.