【问题标题】:Chrome bug? Content not rendering multi-columns properly铬错误?内容未正确呈现多列
【发布时间】:2015-04-20 04:04:52
【问题描述】:

我有这个代码:

http://jsfiddle.net/zqdLzya2/

这是一个非常简单的 3 列布局。

当您悬停某个项目时,其中一些项目会闪烁或消失一秒钟。此外,当内容向上移动时,它会越过标题,消失并呈现良好。滚动时也会出现一些闪烁。内容显示正常,但不呈现。


更新 1

当没有CSS transitiontransform 时,元素停止闪烁。


更新 2

当没有transform 时,元素会停止闪烁或做任何疯狂的事情,因此我删除了 阅读更多 按钮。


更新 3

此处报告了错误: https://code.google.com/p/chromium/issues/detail?id=460222


我在 Opera、Firefox 和 Safari 上尝试过相同的代码,它们似乎都可以正常渲染。

这是 Chrome 错误吗?

这里有一些截图:

这是我的裸 HTML 代码:

<div id="news" class="span-image-title clear content-wrapper">

        <!-- this element repeats -->
        <div class="item">

            <div class="desc bgwhite pdd">
                <h4 class="title-font lightblue">[title goes could be one line title or five]</h4>
                <p class="text-color">2th of January, 2015</p>
            </div>

            <div class="image" style="background-image:url('[image go here, changes with each item]');"></div>

            <div class="desc-body">
                <div class="table-wrap">
                    <div class="table-cell">
                        <div class="entry-content pdd">
                            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatum, debitis.</p>
                        </div>
                        <a href="#" class="blue-btn title-font uppercase lightblue inline-block">Read More</a>
                    </div>

                </div>
            </div>

        </div>
       <!--    this elements repeat -->


</div>

这是我的 SCSS 代码:

@mixin break-inside($content){
break-inside:                   $content;
-webkit-column-break-inside:    $content;
}


@mixin columns($count: 3, $gap: 10){

-webkit-column-count: $count;
-moz-column-count:    $count;
column-count:         $count;

-webkit-column-gap:   $gap;
-moz-column-gap:      $gap;
column-gap:           $gap;

}

.span-image-title {

@include columns(3,1rem);

.item { 
    @include break-inside(avoid);
    display: inline-block;
    position:relative; 
    overflow: hidden;
    width:100%; 
    margin-bottom:rem(15px); 
}

.item:hover {
    .desc-body {
        @include transition( 0.6s ease bottom , 0.3s ease background-color 0.2s );
        bottom:0;
        background-color:#f4f4f4;
    }
    .desc {
        // @include transition( 0.3s ease border-bottom 0.5s );
        // border-bottom:1px solid $text-color;
    }
    .entry-content,
    .blue-btn {
        opacity: 1;
    }
}

.image {
    height:370px;
    background-size:cover;
    background-repeat: no-repeat;
    background-position: center center;
}

.desc {
    position: relative;
    z-index:5;
    // border-bottom:1px solid transparent;
}

.entry-content,
.blue-btn {
    @include transition( 0.5s ease opacity 0.3s , 0.3s ease transform );
    opacity: 0;
}

.desc-body {
    @include transition( 0.6s ease bottom , 0.3s ease background-color );
    margin:0 auto;
    bottom:-100%;
    position: absolute;
    width:100%;
    height:100%;
    margin:0 auto;
    background-color:rgba(255,255,255,0.4);

}


}

我正在使用: Yosemite 上的版本 40.0.2214.111(64 位)。

【问题讨论】:

  • 它适用于 Chromium 42.0.2294.0
  • 可能是媒体查询问题? FWIW,默认情况下,jsfiddle 在 Linux 上的 Chrome Version 40.0.2214.111 (64-bit)Firefox 35.0.1 中看起来都是正确的,但是如果我将“结果”窗口拖得更大,它会在两者上中断(中心下降)。
  • 我已经下载了Chromium 42,问题依然存在。当您滚动或悬停元素时,CSS“有效”但“渲染”失败。当我删除 transitionstransforms 时,Chrome 呈现没有问题只是
  • 可以确认。版本 40.0.2214.94 m 上存在问题
  • 相关问题:在 Chrome 中,可点击元素不适用于除第一个以外的列。

标签: javascript html css google-chrome


【解决方案1】:

对此的临时解决方案是将transform: translateZ(0) 添加到我的.item 元素中,因为这样可以启用硬件加速。

【讨论】:

  • 谢谢你这也解决了我的问题。您知道其他解决方案吗?
  • 暂时没有,抱歉。
  • 这对我有帮助,但如果您能告诉我您是如何考虑尝试的,我将不胜感激?
  • @NikhilGirraj 我听说你可以使用这个 CSS 属性启用硬件加速,所以我想试试看 Chrome 的行为是否会有所不同。在这里阅读更多:blog.teamtreehouse.com/…
  • transform: translateZ(0) 为我修复了它!谢谢!
【解决方案2】:

这并不是对此处描述的特定错误(闪烁/消失的内容)的真正解决方案,但它密切相关。

我正在帮助一位朋友处理 Chrome/Safari 中未对齐的列。有三根柱子,第三根柱子上方有幻影空间。当我们尝试 transform:translateZ(0) 和其他 null 转换解决方案时,内容确实消失了,所以就消失了。

有一次他提到他有一个想法,也许有人在 CMS 的空格中输入了一些东西,这让我想到了空白、自动换行等。我们尝试了 white-space:nowrap 然后white-space:normal 在孩子身上,以及其他各种相关的解决方案,但他们没有成功。

然后他想到了以某种方式仅在 Chrome/Safari 中的第三列 div 上设置负边距,这导致我们发现了这个我以前从未听说过的属性,以及这个古怪的解决方案: -webkit-margin-top-collapse:discard.

希望有一天这能帮助一些可怜的人。

【讨论】:

  • 你能解释一下吗?您在哪个元素上添加了此属性?
【解决方案3】:

看起来除了transform: translateZ(0) 到父元素之外,将position: relative 添加到转换后的子元素有一点帮助。不过,过渡中仍有一些人工制品......非常奇怪的错误!

【讨论】:

    【解决方案4】:

    transform: translateZ(0); 按照 Miguel Garrido 的建议工作。但是,它会产生position: absolute; 元素重叠/欠重叠的问题(如果这是一个词的话)。

    使用transform-style: preserve-3d; 可以消除这个问题。 希望这对其他人有所帮助,直到浏览器自行修复。

    【讨论】:

      猜你喜欢
      • 2018-08-20
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多