【问题标题】:CSS two min-height values, whichever's biggerCSS 两个最小高度值,取大者
【发布时间】:2014-05-23 09:52:09
【问题描述】:

我有一个窗口,我想填满整个屏幕,这样页脚总是不在屏幕上。我用最小高度完成了这个:

#cnt
{
    min-height: calc(100% - 62px);
}

但是,在某些情况下,对于我创建的侧边栏而言,它可能太小了。侧边栏的最小高度为 404px。我怎样才能同时使用这两者,以便它使用更大的价值?这可以用严格的 CSS 完成还是我需要 JS?

这不起作用:

#cnt
{
    min-height: calc(100% - 62px);
    min-height: 404px;
}

它最终总是使用 404px 值。

编辑:

这是我的 JS/jQuery 解决方案。我发现的一个问题是我的浏览器的$(window).height() 正在返回一个比它应该的值大400px 的值。此外,在调整大小时,它会在一个值 (+377px) 和另一个值 (+787px) 之间来回跳转,其中 + 表示它比实际值大得多。为了解决这个问题,我使用了<cnt> 元素本身的高度,但这也存在相同的来回跳转大小问题。

$(window).resize(function(){

    if($("cnt").outerHeight() < 404)
    {
        $("cnt").css("min-height", "404px");
    }
    else
    {
        $("cnt").css("min-height", "calc(100% - 62px)");
    }

}).load(function(){
    
    if($("cnt").height() < 404)
    {
        $("cnt").css("min-height", "404px");
    }
    else
    {
        $("cnt").css("min-height", "calc(100% - 62px)");
    }
    
});

JSFiddle

【问题讨论】:

  • 你能做一个小提琴吗?
  • @ramesh 是的,我会画一个
  • 你不能用min-height: calc(max(404px, 100% - 62px));吗? AFAIR,Firefox 和 Chrome 都支持它。
  • 据我所知,您只能在 CSS3 中进行简单的数学运算(加法、减法)。无法比较值。在 Javascript 中,这绝对是可能的。如果您不想使用 JS 也许 Less 可以帮助您。我不确定...
  • @Ennosigaeon Well JS 是一个选项;我只是想知道是否有纯 CSS 解决方案。

标签: javascript css height


【解决方案1】:

一般来说,“变量”最好是height,“固定”约束是min-max-height。在你的情况下:

#cnt {
    height: calc(100% - 62px);
    min-height: 404px;
}

这将允许高度根据百分比变化,但将被限制为最小 404 高度。

【讨论】:

  • 如有必要,这是否允许它超越calc(100% - 62px)
  • 为什么不将高度设置为 404 像素,将最小高度设置为 cal(100%-62 像素)。这样它会起作用,但我想如果 cal 值小于 404px,那么它就不会起作用。
  • @ramesh 这会导致它尝试将高度设置为 404,但随后会受到最小高度的限制 - 这实际上是相同的结果。
【解决方案2】:

仅在 CSS3 中无法做到这一点。 CSS 为数学提供了calc() 函数,但根据Mozilla,只允许基本数学(+、-、*、/)。 CSS3 规范没有说明两次设置相同的值,所以它完全取决于实现会发生什么

div {
   height: 10px;
   height: 20px;
}

大多数情况下,第一个值会被忽略(当两个值具有相同的“级联级别”时。有关更多信息,请查看here

【讨论】:

  • CSS 规范明确指出last declaration in document order wins。来源:w3.org/TR/2013/CR-css-cascade-3-20131003/#cascading - 实际上,您的示例与div { height: 20px; } 相同
  • last declaration wins 包含在 CSS 解析中,以允许向前兼容解析。这个想法是允许作者首先设置通用基线样式,然后为新的用户代理添加新的覆盖。例如,.special {display: inline; display: inline-block; } 将被所有不理解值 inline-block 的用户代理解释为 display: inline(例如,值 inline-block 在 CSS 1 中不存在)。
【解决方案3】:

如果您不介意使用两个 div,那么也许您可以执行以下操作:

<div style="min-height:calc(100% - 62px);">
  <div style="min-height:404px;">
    content here
  </div>
</div>

【讨论】:

猜你喜欢
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2014-02-27
  • 2013-10-12
  • 1970-01-01
相关资源
最近更新 更多