在Chrome中的CSS列中修剪了框阴影

Paw*_*wan 21 css google-chrome css3

我希望CSS列中的块元素具有框阴影.以下简化代码在IE10和Firefox 21中按预期呈现,但在当前Chrome版本(28.0.1500.72)中,修剪了列边附近的阴影.

出现的图像结果为IE/FF(左侧),右侧为Chrome:

在IE/Firefox中呈现的代码 在Chrome中呈现的代码

(也有一些垂直移位,但这不是问题)

这是jsfiddle:http: //jsfiddle.net/buli_pl/KxYRc/1/

div#column-container {
  /* Set 2 columns*/
  -moz-column-count: 2;
  -webkit-column-count: 2;
  column-count: 2;
}
div#column-container div {
  background-color: yellow;
  /* set shadow for yellow elements */
  box-shadow: 0px 1px 3px #000;
  -webkit-box-shadow: 0px 0px 15px #000;
  -moz-box-shadow: 0px 0px 15px #000;
  box-shadow: 0px 0px 15px #000;
  /* Make sure that yellow div is not split between columns */
  display: inline-block;
  width: 100%;
  /* the rest - just to better present the problem */
  height: 70px;
  margin-top: 0;
  margin-bottom: 20px;
}
Run Code Online (Sandbox Code Playgroud)
<div id="column-container">
  <div>box 1</div>
  <div>box 2</div>
  <div>box 3</div>
  <div>box 4</div>
  <div>box 5</div>
  <div>box 6</div>
</div>
Run Code Online (Sandbox Code Playgroud)

我是否滥用其中一些属性,或者这是Chrome问题?目前如何修复?

Col*_*son 11

刚刚发生了一个可能更有效的解决方案。应用转换:translateZ(0); 带有阴影的元素似乎可以解决此问题。在提供的代码中,您可以将其添加到div#column-container div规则中。

.container{
  break-inside: avoid;
  column-count: 2;
  column-gap: 2rem;
}
.box{
  border-radius: 4px;
  box-shadow: 2px 2px 20px rgba(0, 0, 0, 0.2);
  margin-bottom: 1rem;
  padding: 1rem;
  break-inside: avoid;
  transform: translateZ(0);
}
Run Code Online (Sandbox Code Playgroud)

https://codepen.io/MarkitDigital/pen/RdLoRG

  • 这在 Chrome 中很有效,但不幸的是在 Safari (v13.1) 中整个框消失了 (4认同)
  • +1 只有当我需要一个具有动态高度的容器时也可以使用的解决方案,它将子项按列排序(砌体布局样式)并使用子项可用的水平空间(又名最小高度,最大宽度)。 (2认同)
  • 好发现!我建议使用供应商前缀,即“-webkit-transform:translateZ(0);”,以免影响其他浏览器中的任何渲染优化,因为该问题显然是 WebKit 特定的(在 Firefox 或 IE 中没有问题) /边缘)。就我而言,它可以防止在前一列的底部出现一小片阴影,尽管我发现它仍然在后续列的顶部被剪裁,而它没有在第一列的顶部被剪裁(但我认为 Chrome用户将不得不忍受这一点)。 (2认同)

Dan*_*eld 7

您可以使用flexbox而不是css列.

小提琴

注意:这目前在Firefox中不起作用,因为它仍然不支持该flex-wrap属性,但是根据caniuse - 这将在版本28中得到支持

CSS

div#column-container {   
    height: 270px; /* NB: IE requires the height property. max-height won't work on IE)*/
    display: flex;
    flex-direction: column;
    flex-wrap: wrap;
    align-content: flex-start;
}
Run Code Online (Sandbox Code Playgroud)

编辑 :( 更新了FIDDLE,其中包括对Firefox的支持)

根据@ buli建议暂时使用Firefox的-moz-colums-count,只要不支持flex-wrap:

好吧,你可以用@supports来做这个,它允许我们执行功能查询 - 有点像Modernizr,但有CSS.

这里的好处是Firefox支持它们.

所以,如果我添加以下代码:(根据Pavlo的建议更新)

@supports (not (flex-wrap: wrap)) and (-moz-columns: 2) {
    div#column-container { 
        -moz-column-count: 2;
        column-count: 2;
        display: block;
        width: 50%;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,Firefox将使用CSS列,而其他浏览器将使用flexbox.