首先,让我解释一下我所知道的并尝试过各种变化的东西:
- 典型的长宽比hack,它根据宽度来管理元素的高度。
- Stackoverflow答案,其中高度是由图像确定的,这就决定了容器的宽度。
我感兴趣的是纯CSS解决方案,使用任何您可以想到的hacky、新奇和实验性属性,以实现以下结果:
卡片的高度基于内容(在本例中是标题和段落)。我们将其称为 h
。卡片内的另一个元素应该是相同的 h
高度(基于同级别的内容),并且无论那个 h
量是多少,它也应该是该元素的宽度(以创建正方形)。
编辑(2019-28-02):对于下一个问题,我对此没有明确说明,但为了使文本换行,文本所在的区域应该有最大宽度。Marc Bellêtre的解决方案 今天已经非常接近了。
这个问题与旧问题非常相似,该问题没有收到任何响应。不同之处在于,在这种情况下,父级没有收到任何明确的高度值。父卡片的高度完全由其中的文本确定。如果那个问题没有得到任何响应/解决方案,那么这可能不会有所不同,特别是因为这稍微困难一些。然而,自那时以来出现了新技术(例如:flexbox/grid),可能会有所帮助。
请勿使用JavaScript解决方案。 我非常清楚如何使用它来实现此目的。
有时当我加载此代码时,框甚至不是正方形的。大问题是它根本不尊重 height: 100%
,但是在调整浏览器或内容大小后,它将成为正方形。更新比率会使框意外地变大。
.card {
background: #ddd;
display: inline-flex;
}
.aspect-ratio {
border: 1px solid;
padding: 1em;
aspect-ratio: 1 / 1;
background: #ccc;
}
.content {
padding: 1em;
flex: 1 1 200px;
}
h3,
p {
margin: 0;
}
<div class="card">
<div class="aspect-ratio">(h)</div>
<div class="content">
<h3>Title</h3>
<p contenteditable>The more I type, the taller this box gets (h)</p>
</div>
</div>
width: 100%; padding-top: 100%;
对于正方形。 在css Tricks中有一些很好的例子:https://css-tricks.com/aspect-ratio-boxes/ - Ina