【问题标题】:Weird CSS stretching issue in iOS7 Safari and ChromeiOS7 Safari 和 Chrome 中奇怪的 CSS 拉伸问题
【发布时间】:2019-09-07 15:28:02
【问题描述】:

自从在多部 iPhone 和 iPad 上升级到 iOS 7 后,我们看到我们网站上的部分 UI 发生了一些非常奇怪的事情。

所附图像中的粉红色框位于绝对定位的父级内,它有两个绝对定位在其中的白色 div,每个 div 具有不同的不透明度。粉红色的圆圈只是一个设置了边界半径以使其成为圆形的 div。此布局中根本没有图像。

由于某种原因,浏览器会间歇性地拉伸粉红色的 div,但我想不出任何会导致它发生的事情 - 如果我想的话,我也不知道如何实现这种效果!

我认为这是浏览器中的错误,但我不知道如何修复它。

我没有包含任何代码,因为它非常非常简单,并且没有任何东西会导致这种情况(确实它在 iOS6 中有效)。只是希望有人以前见过这个?

有什么想法吗?

更新 为了回应cimmamon的评论,代码如下:

<div class="col" style="left: -3920px; width: 280px;">
<div class="periods">
    <div class="period3"></div>
    <div class="period2"></div>
    <div class="period1"></div>
    <div class="nodeline colBk">
        <div class="node colBrd"></div>
    </div>
</div>
<div class="inner">
    <div class="group first">
        <div class="branch colBk"></div>
        <a class="story">
            <div class="strip colBk"></div>
            <div class="caption">
                <div class="text">
                    <p class="title">Test</p>
                </div>
            </div>
        </a>
    </div>
</div>

以及适用于“句点”容器和子项的 CSS:

.tls .col { display: inline-block; position: absolute; top: 0; }
.periods { height: 72px; overflow:hidden; position: relative; border-left: 1px solid #fff; }
.period2 { height: 30px; opacity: 0.6; background-color: #fff; position: absolute; width: 100%; }
.period1 { height: 25px; opacity: 0.72; top: 30px; background-color: #fff; position: absolute; width: 100%; }
.nodeline { height: 61px; }
.colBk { background-color: #dd545c; }
.nodeline { height: 61px; }
.node { position: absolute; margin-left: -15px; left: 50%; bottom: 0px; width: 17px; height: 17px; border-radius: 50%; border: 6px solid #dd545c; background-color: #f9f9f9; }
.colBrd { border-color: #dd545c; }

这是一个奇怪的错误 - CSS 中没有任何东西可以导致我看到。

关于我可以添加哪些 CSS 可能会强制它正确呈现的任何建议?你会认为仅靠高度就足够了,但显然不是。

Fiddle here

【问题讨论】:

  • 代码在哪里(它应该是问题的一部分,不要只是链接到网站)?
  • @cimmanon 谢谢,我已经编辑了问题以包含代码

标签: html css ios7


【解决方案1】:

我遇到过这个问题,现在 Safari 7 中也有。

这是我的案例的简化版本

HTML

<ul>
  <li>
    <a> Some text </a>
  </li>
  <li>
    <a> Some  other text </a>
  </li>
</ul>

然后我有一些 javascript(在我的例子中是引导工具提示),它被添加到一个元素中,从而生成了 html

<ul>
  <li>
    <a> Some text </a>
    <div style="position: absolute" class="tooltip"> Some content here </div>
  </li>
  <li>
    <a> Some  other text </a>
  </li>
</ul>

在整个 ul 向下延伸在新 div 的顶部之前,新 div 会短暂显示。

这一定是 safari 中的一个错误,但将以下 CSS 添加到插入的 div 可以作为一种解决方法。

.tooltip {
  -webkit-transform: translateZ(0);
  -moz-transform: translateZ(0);
  -ms-transform: translateZ(0);
  -o-transform: translateZ(0);
  transform: translateZ(0);
}

这会强制插入的 div 在一个新的复合层中呈现,这似乎可以防止 Safari 搞砸。

希望这足以让您找到解决方案,但如果没有,请告诉我,我可以进一步充实这个答案。

【讨论】:

  • 哇,我什至不希望它会解决它,但它做到了!谢谢!
  • 可以确认这适用于iOS7。只需将 translateZ 应用于被拉伸的 div。谢谢!
【解决方案2】:

尝试使用backface-visibility

-webkit-backface-visibility:hidden;

它让我的头晕目眩,一旦移开这个世界,过去和现在都是一个更快乐的地方

在 iOS 6 & iOS 7 & Android 4.2 + 上测试

【讨论】:

    【解决方案3】:

    另一个避免创建额外合成层的明显解决方法是将perspective 添加到 GPU 合成上下文中的元素。 (在这种情况下,这就是 opacity 的元素。)请注意,如果您使用 translate3d 在 3D 空间中定位事物,这会产生视觉影响,并且可能不是有效的解决方法。

    .period1, .period2, .period3 {
      -webkit-perspective: 1px;
      perspective: 1px;
    }
    

    【讨论】:

      【解决方案4】:

      也许这可以解决问题:

      添加高度:17px;到 .node 所以你的 css 应该看起来像

      .node {
          background-color: #F9F9F9;
          border: 6px solid #DD545C;
          border-radius: 50% 50% 50% 50%;
          bottom: 0;
          height: 17px; /*new*/
          left: 50%;
          margin-left: -15px;
          position: absolute;
          width: 17px;
      }
      

      jsFiddle

      【讨论】:

      • 我可以试试,但我不明白为什么会有帮助?拉伸的不仅仅是节点(圆圈),而是整个“周期”容器。
      猜你喜欢
      • 1970-01-01
      • 2011-01-09
      • 2012-01-28
      • 2012-06-14
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      相关资源
      最近更新 更多