是否可以使用 CSS calc() 来计算宽度/高度比?

Posted

技术标签:

【中文标题】是否可以使用 CSS calc() 来计算宽度/高度比?【英文标题】:Is it possible to use CSS calc() in order to calculate an width/height ratio? 【发布时间】:2016-08-30 11:34:01 【问题描述】:

这是我目前拥有的代码(它还不能工作):

html

<div class="chi_display_header" style="background-image:url('http://localhost/.../header-dummy-small.png');"></div>

CSS:

.chi_display_header 
    background-size:contain;
    width:100%;
    min-height:100px;
    height:calc(1vw * 270 / 1280px);
    max-height:270px;
    max-width:1280px;
    margin:0 auto;

这是一个居中的响应式背景图片 - 容器应该有可变的宽度/高度,我不想使用 jQuery。

已知属性:

比率:1280:270

最小高度:100px

最大高度:270px

最大宽度:1280px

我尝试做的是用 calc 神奇地计算 .chi_display_header 的容器高度:

高度 = 计算(CURRENT_SCREEN_WIDTH * 270 / 1280);

不过我目前的做法

height:calc(1vw * 270 / 1280px);

还不行。有 CSS 解决方案吗?

【问题讨论】:

相关:***.com/questions/1495407/… 100vw 是全角,不是 1vw @aziz - 有 calc 的解决方案吗? @circusdei 对.....也许它似乎几乎可以用这个有一点背景尺寸削减:覆盖它可以削减一点 【参考方案1】:

解决方案(ty 4 cmets):

.chi_display_header 
    background-size:cover;
    width:100%;
    min-height:100px;
    height:calc(100vw * 270.0 / 1280.0);
    max-height:270px;
    max-width:1280px;
    margin:0 auto;

【讨论】:

【参考方案2】:

我将 Blackbam 的解决方案应用于将 div 放置在 body 中并且 body 具有 15px 的左右填充的情况。从计算出的高度中减去总的左右内边距 (30px),删除了出现在 div 上方和下方的空白。

height:calc(100vw * aspect_ratio - 30px);

【讨论】:

【参考方案3】:

没有calc() 也可以做到这一点。 padding(甚至-top-bottom)是相对于元素的宽度,所以你可以得到相同的效果:

.chi_display_header 
    background-size: cover;
    width: 100%;
    min-width: 474px;
    max-width: 1280px;
    height: 0;
    padding-bottom: 21.09375%;

您还可以使用相对/绝对技巧在内部添加带有内部 &lt;div&gt; 的元素,但如果内容超过包含高度,事情就会开始出错:

.chi_display_header 
    ...
    position: relative;


.chi_display_header .inner 
    position: absolute;
    top: 0; left: 0; right: 0;
    padding: 15px;

【讨论】:

以上是关于是否可以使用 CSS calc() 来计算宽度/高度比?的主要内容,如果未能解决你的问题,请参考以下文章

css的calc方法主要用途是啥呢?

边框宽度中的CSS calc()?

是否可以使用 CSS calc() 获得负值?

IE8中使用css3中的属性calc(),大神求解决……

CSS 中calc()神技

css3 calc()属性介绍以及自适应布局使用方法