【问题标题】:webkit "haslayout" bugwebkit“haslayout”错误
【发布时间】:2012-11-18 00:56:45
【问题描述】:

我有一个带有标题文本的手风琴类型的东西。当它打开时,它有一个填充,当它关闭时,它有另一个。所有的面板都以它们的开放样式开始,然后通过 JS 将它们关闭。在 ChromeSafari 中,标题文本没有应用封闭的填充。

如果我在检查器中查看它,正确的(打开的)填充显示为正在应用,并且当单击检查器中的实际元素时,我可以看到填充的位置应该 .

我可以让它应用或“绘制”它(如果这是正确的术语)的唯一方法是在该标题文本上或在该面板中切换(或添加)任何样式.

我还发现,当我通过检查器将填充添加为内联样式时,它也不会被应用并且切换不会改变它。

这似乎与 IE 的“hasLayout”问题非常相似,但我找不到任何引用类似错误的内容。有没有人对进一步测试或如何解决有任何想法?

我似乎无法在更简单的 jsfiddle 中复制这个问题,而且我正在从事的项目非常庞大,所以这里是给我问题的代码块:

CSS

@media only screen and (min-width: 600px) and (max-width: 767px) {
    .checkout-plans .collapsible .title {
        padding-right: 130px;
    }
    .checkout-plans .collapsible.closed .title {
        padding-right: 323px;
    }
}

HTML

<div class="module checkout-plans">
    <div class="collapsible active">
        <header>
            <div class="title">
                <h3>This text has the correct padding applied</h3>
            </div>
        </header>
    </div>
    <div class="collapsible closed">
        <header>
            <div class="title">
                <h3>This text does not have the correct padding after having the "closed" class applied via JS</h3>
            </div>
        </header>
    </div>
</div>

【问题讨论】:

  • 我假设手风琴使用 JavaScript?是否会应用填充,然后无法触发重绘/重排?
  • 可能类似的问题:css.2040035.n2.nabble.com/…
  • @RyanKinal - 这似乎正在发生。不过,我以前从未遇到过 Chrome 的这个问题。并且澄清一下,JS 没有应用填充,它应用了一个 class ,它具有用于填充的 CSS 规则。该类的其他规则适用,但仅此一条不适用。

标签: css google-chrome safari webkit haslayout


【解决方案1】:

虽然这并不能真正解释 为什么会发生这种情况,但添加

-webkit-transform: scale3d(1,1,1);

div.title内的h3强制它调整。

显然,填充已正确应用,但 h3 没有响应父级的新大小。添加此 webkit 特定样式会强制它重绘并根据父级的宽度重新计算其宽度。

如果有人对为什么需要这种额外的样式有任何想法,请添加到此!

基于这个答案:Chrome does not redraw <div> after it is hidden

【讨论】:

  • 作为那个答案的作者......我不知道它为什么起作用:)
  • 在类似的情况下,我不得不添加opacity: .99,因为-webkit-transform: scale3d(1,1,1) 不起作用(它也会导致重绘)
猜你喜欢
  • 2011-07-03
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2012-07-17
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
相关资源
最近更新 更多