break-inside CSS属性无法处理box-shadow

时间:2016-03-09 14:20:50

标签: css3 grid-layout box-shadow

我试图使用column属性将一些列表项对齐到列中。列正确地对齐了我的元素,但是每个元素的阴影都是破坏的。列的第一个元素的阴影的上半部分滞后于上一列。

请参阅下图和this codepen进行演示。

drop shadow gets cut due to column layout

以下是代码:

HTML:

<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
</ul>

CSS:

li {
  width: 50px;
  height: 70px;
  text-align: center;
  display: block;
  background-color: tomato;
  padding: 10px;
  line-height: 70px;
  -webkit-column-break-inside: avoid;
  page-break-inside: avoid;
  break-inside: avoid;
  box-shadow: 0px 0px 9px 4px #CCC;
  -webkit-box-shadow: 0px 0px 9px 4px #CCC;
  -moz-box-shadow: 0px 0px 9px 4px #CCC;
}

ul {
  margin: 40px;
  -webkit-column-count: 4;
  -webkit-column-gap: 25px;
  column-count: 4;
  column-gap: 25px;
  width: 300px;
}

我想知道是否有办法解决此问题。我可以使用flex或任何其他网格技术,但这是我最简单方便的方法。我想知道导致这个问题的原因是什么,以及是否可以修复。如果此问题已在本网站上讨论过,请提供链接。 TIA

编辑:这似乎对mozilla工作正常,这个问题可以在chrome中看到。

2 个答案:

答案 0 :(得分:2)

对于Chrome,您需要添加一些边距以包含足够的空间以显示阴影,以避免看到它被破坏并避免框打破,此时您需要使用{{1} }

&#13;
&#13;
display:inline-block;
&#13;
/* Added*/

li {
  margin: 5px 0;
  display: inline-block;
}
/* End added*/

li {
  width: 50px;
  height: 70px;
  text-align: center;
  background-color: tomato;
  padding: 10px;
  line-height: 70px;
  -webkit-column-break-inside: avoid;
  page-break-inside: avoid;
  break-inside: avoid;
  box-shadow: 0px 0px 9px 4px #CCC;
}
ul {
  margin: 40px;
  -webkit-column-count: 3;
  -moz-column-count: 3;
  column-count: 3;
  -webkit-column-gap: 25px;
  -moz-column-gap: 25px;
  column-gap: 25px;
  width: 300px;/* for 3 col, 375px for 4 cols ;) */
}
&#13;
&#13;
&#13;

此外,如果你计算4列,将大小设置为大约375px,或者对于3列,300px应该没问题

fork of your pen

3年后......虫子还在。

通过<ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> </ul>

,渲染也可以更好

&#13;
&#13;
backface-visibility:hidden;
&#13;
/* Added*/

li {
  margin: 5px 0;
  display: inline-block;
  backface-visibility:hidden;
}
/* End added*/

li {
  width: 50px;
  height: 70px;
  text-align: center;
  background-color: tomato;
  padding: 10px;
  line-height: 70px;
  -webkit-column-break-inside: avoid;
  page-break-inside: avoid;
  break-inside: avoid;
  box-shadow: 0px 0px 9px 4px #CCC;
}
ul {
  margin: 40px;
  -webkit-column-count: 3;
  -moz-column-count: 3;
  column-count: 3;
  -webkit-column-gap: 25px;
  -moz-column-gap: 25px;
  column-gap: 25px;
  width: 300px;/* for 3 col, 375px for 4 cols ;) */
}
&#13;
&#13;
&#13;

答案 1 :(得分:1)

你可以试试这个

li {
  width: 50px;
  height: 70px;
  text-align: center;
  display: block;
  background-color: tomato;
  padding: 10px;
  line-height: 70px;
  box-shadow: 0px 0px 9px 4px #CCC;
  -webkit-box-shadow: 0px 0px 9px 4px #CCC;
  -moz-box-shadow: 0px 0px 9px 4px #CCC;
  margin:10px;
  float:left;
}

ul {
  margin: 40px;
  width: 300px;
}