【问题标题】:Safari rendering bug with CSS "clip"使用 CSS“剪辑”的 Safari 渲染错误
【发布时间】:2015-04-13 19:31:49
【问题描述】:

Safari 遇到以下问题:http://cl.ly/ZlJ8

现场演示:http://drpdev.de/labs/example.html

完整源代码:http://jsfiddle.net/uqsghon7/

<div class="row">
  <div class="rowcontainer">
    <div class="side">
      ...
    </div>
  </div>
</div>
... (multiple times with different contents in .side)

和风格:

.side {
  height: auto;
  padding-left: 50px;
  margin: auto;
  position: fixed;
  top: 50%; left: 0; bottom: 0;
  width: 350px;
  ...
}
.row {
  ...
  position: relative;
  overflow: hidden;
}
.rowcontainer {
  position:absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 0;
  margin: 0;
  clip: rect(0, auto, auto, 0);
  overflow:hidden;
}

它在 Chrome 和 Firefox 中完美运行。 在我尝试仅在(相对定位的)div(没有第二个容器)内固定位置并隐藏溢出并且它在所有浏览器但不是 Firefox 中工作之前,所以我不得不使用 css-clip 来解决这个问题......它实际上也可以在 Safari 中使用,但似乎 Safari 的渲染引擎在滚动时没有刷新视图...

有什么想法吗?

【问题讨论】:

  • css 效果好像有问题,可以粘贴完整的 css 吗?
  • 我们绝对需要MCVE
  • 当然,这是一个完整的例子 jsfiddle.net/uqsghon7 - 由于某种原因,它在 JSfiddle 中工作,但在外部使用时不能(可能是由于 iframe):drpdev.de/labs/example.html

标签: html css firefox safari rendering


【解决方案1】:

非常有趣。

我想我找到了答案,但它涉及一个仅限 webkit 的 hack。这让我有些烦恼,但希望这仍然符合要求。

在四处寻找剪辑/渲染问题时,我偶然发现了一个关于 background-position and fixed-position elements 的 SO 问题——答案提到 -webkit-mask-image 作为 clip: auto 的仅 webkit 替代品。

它也适用于您——只需添加以下 CSS 即可让 Safari 开心:

@media screen and (-webkit-min-device-pixel-ratio:0) { 
  .rowcontainer {
    clip: auto;
    -webkit-mask-image: -webkit-linear-gradient(top, #ffffff 0%,#ffffff 100%)
  }
}

这是fiddleworking model

我承认我真的不明白 为什么 它有效。但它也适用于 Chrome 和 Firefox。

然而,IE9 对此并不满意。 IE11 会显示 div 的内容,但会跳过它们的大部分背景。值得考虑...

【讨论】:

  • 感谢您的回答,您的演示效果很好,我现在就去看看 :)
  • 除了在 IE9 和 10 中,它运行良好,如果您也知道这些解决方法,那就完美了,否则我将不得不为这些 IE 版本做一些可选的 JS。
  • 我做了一些调查。我首先想到的是在头部添加&lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;,但这没有效果。我确实看到了另一个带有诱人线索的 SO 答案 @stackoverflow.com/a/23859719/156645 - @lmeurs 有一个似乎可以解决您的问题的小提琴,但只有相对较短的 div 尺寸。一旦我使容器更高,我遇到了问题:jsfiddle.net/qbcaaddd。我确实注意到实际上不需要溢出:隐藏。
  • 有趣的是试图创建完全相同的界面。不幸的是,这个修复会导致 z-index 出现问题,所以最后一张幻灯片总是在最上面:codepen.io/iamkeir/pen/qNGJRY 我正在玩,看看是否有解决方法,因为它sooo很接近!跨度>
  • 我设法在 Safari 中使用 transform: perspective(0) 修复了它,尽管在 IE 中仍然存在问题:codepen.io/iamkeir/pen/pbmxOP
猜你喜欢
  • 2020-08-21
  • 1970-01-01
  • 2010-10-29
  • 2014-10-29
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
相关资源
最近更新 更多