【问题标题】:Relative padding and vh units - bug or spec misunderstanding?相对填充和 vh 单位 - 错误或规范误解?
【发布时间】:2013-09-06 13:08:04
【问题描述】:

DEMO

有时我会使用类似于this method 的方法创建一个正方形(或任何矩形,实际上),它会在任何大小下尊重其比率。

我想要什么:

  • 防止正方形在高度较小的设备上超出视口 即横屏手机

建议的解决方案

  • 使用max-width: 90vh将正方形的宽度限制为视口高度的百分比
  • 期望比率得到尊重

CSS

    .square {
      position: relative;
      height: 0;
      padding-bottom: 100%;
      overflow: hidden;
    }

    .square-inner {
      position: absolute;
      top: 0;
      bottom: 0;
      left: 0;
      right: 0;
    }

    .mw { max-width: 90vh;} /* solution, but makes things break */

HTML

    <div class="square mw">
        <div class="square-inner"></div>
    </div>

会发生什么

  • 在高度较小的视口中,正方形的最大宽度应为视口高度的 90%

实际发生的情况:

  • viewport 高度小于正方形宽度时:
    • 宽度受限于vh
    • 高度是根据正方形的宽度计算的
    • 我们得到一个垂直长的矩形

The spec 表示相对值是从“包含块”计算出来的,在我看来,它应该是容器的当前宽度。

浏览器行为:

  • Chrome 29.0.1547.65:如上所述
  • Firefox 23.01:如上所述
  • Opera:根本不尊重 vh 未在 Opera 16+ 上验证

我对规范的解释有误,还是浏览器供应商在实施过程中可能存在错误?

【问题讨论】:

  • 请在问题中发布实际代码(最好是SSCCEE)。问题不应依赖于外部资源才能清晰/可回答。

标签: css viewport-units


【解决方案1】:

问题在于同时使用 % 和 vh 中的长度。

试试这个:

Working Example

* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  font-family: sans-serif;
  font-weight: 100;
}

.neat {
  width: 50%;
  max-width: 600px;
  min-width: 320px;
  margin: 0 auto;
}

.col {
  float: left;
  padding: 2rem;
  width: 90vh;    /*** Important bit changed width:50%; to width:90vh; ***/
  max-width: 50%; /*** Important bit added max-width:50%; ***/
}

.square {
  position: relative;
  height: 0;
  padding-bottom: 100%;
  overflow: hidden;
}

.square-inner {
  position: absolute;
  background-color: #333333;
  color: white;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 1.5rem;
}

.mw {
  max-width: 90vh;
}

【讨论】:

  • 这按预期工作 - 但重绘问题太普遍了,我无法在生产中实际使用它。很好的解决方案。我已经通过在正方形外部放置一个容器进行测试,以便不修改列(因为它是网格的一部分),容器对宽度施加限制 - 除怪癖外,按预期工作。
【解决方案2】:

我认为 Opera 不支持 vh,并且存在已知问题。我想知道这个错误是否会影响您所看到的:http://code.google.com/p/chromium/issues/detail?id=124331

【讨论】:

  • 哈哈,我现在看到 caniuse.com 正在显示 Opera 16 的值 - 我没看到:caniuse.com/#search=vh。 vh 似乎有很多怪癖——我的演示在容器折叠时加载,但调整大小事件似乎触发了正确的绘制。与您的链接一样,重绘似乎可以解决一些问题。
猜你喜欢
  • 2014-06-06
  • 2017-09-22
  • 2020-10-17
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 2014-12-20
相关资源
最近更新 更多