css - flexbox CSS 可以根据宽高比调整大小吗?

标签 css

我有一个响应列,然后分为 3 个相等的子列。

我在每个图标中都有一个宽度为 100% 的图标占位符。有没有什么方法可以使用 CSS 的 flex 来确保我的高度始终等于我计算出的宽度?

如果可能的话,我真的想避免使用图片和 JavaScript。

最佳答案

您可以使用两种方法。一种是使用 vw 设置 flexbox 的高度。如果需要,您还可以使用 calc。当然,如果页面宽度在更宽的视口(viewport)上变为静态或设置了 max-width,那么您可以使用媒体查询以 px 为单位设置 flexbox 高度, em

第二种方法是在 flexbox 子元素上使用填充。与边距不同,100% 顶部或底部填充意味着 100% 的父宽度而不是高度。

.flex {
    display: flex;
    background-color: red;
    margin-bottom: 1px;
}
.flex div {
    flex: 1;
    background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIyOS4wMzE4MTMiIHZpZXdCb3g9IjAgMCAzMiAyOS4wMzE4MTMiPgo8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjAzMTI1LDAsMCwwLjAzMTI1LDAsLTAuOTY4MTg3NSkiPgo8cGF0aCBkPSJNIDEwMjQsNTkwLjQ0NCA1MTIsMTkzLjAxOCAwLDU5MC40NDYgMCw0MjguNDA4IDUxMiwzMC45ODIgMTAyNCw0MjguNDEgWiBNIDg5Niw1NzYgbCAwLDM4NCAtMjU2LDAgMCwtMjU2IC0yNTYsMCAwLDI1NiAtMjU2LDAgMCwtMzg0IDM4NCwtMjg4IHoiLz4KPC9nPgo8L3N2Zz4K) center no-repeat;
    background-size: 50%;
}
.flex.vw {
    height: 16.67vw;
}
.flex.padding div {
    padding-top: 16.67%;
}
<div class="flex vw">
    <div></div>
    <div></div>
    <div></div>
</div>
<div class="flex padding">
    <div></div>
    <div></div>
    <div></div>
</div>

关于css - flexbox CSS 可以根据宽高比调整大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27427098/

相关文章:

php - 使用 jQuery 计算 keyup 的值

javascript - 谷歌地图自动完成下拉列表

html - 向 CSS fling-minislide 添加标题

javascript - 将一个元素放在标题中间

css - 根据高度保持div纵横比

html - <td> 中的表格每边被压扁 2px

jquery - 如何使 jQuery 动画看起来流畅?

css - 使 Google Chrome 中的字体更清晰、更锐利

html - 将一个 div 的价格放在另一个 div 之上

html - Bootstrap : Slider on 2 spans ? - 一个跨度=图像,一个跨度=文本 block