我想创建一个div,它保持纵横比与父级的高度和宽度变化 .
在上面的gif中,你可以看到我在改变宽度时能够保持box div的宽高比,但在更改父级的高度时我无法保持它 .
.box {
width: 100px;
background-color: #dfdfdf;
max-width: 100%;
}
.box:after {
content: '';
display: block;
width: 100%;
height: 100%;
padding-bottom: 160%;
}
.wrap9 {
width: 125px;
height: 190px;
}
<div class="wrap9">
<div class="box"></div>
</div>
我希望灰盒子的行为如下:
4 回答
使用您的默认宽度和高度:
宽度较低的宽度和高度:
这是预期的效果吗?
我不得不说现在不可能 . 虽然您可以使用
calc()
和变量,但无法保持对对象的当前width
和height
的动态引用 .当我用
js
看着这样做时,也没有干净的方法 . 您只需编写一个间隔来定期检查父元素的宽度或高度是否已更改 .谷歌正在推动dom element observer,但目前规格非常有限 .
有趣的是,就像在你的例子中,图像默认情况下这样做 . 然而,似乎绝对没有干净的方式与另一个元素这样做 .
我写了一篇关于多年前的博客文章,名为Easily Calculate Image Scaling to Fit or Fill a Destination Box . 尽管我最初写的是关于图像缩放的,但它可以应用于任何对象 .
总而言之,您可以使用JavaScript来计算对象与父对象之间的宽度和高度的比率 . 然后你可以缩放到FILL父对象(想想CSS background-size:contains;)或缩放到FIT父对象(CSS:background-size:cover;)
两种缩放方法的示例 . (A)左边显示SCALE-TO-FILL,(B)右边我们使用SCALE-TO-FIT .
当您的父对象缩放时,您需要确定这些比率 .
看看嵌入式示例,您可以看到它是如何工作的 .
编辑#2:我也继续前进并添加了两个不同比例方法的实例 .
....工作完美 .