仅使用flexbox CSS的水平砌体布局

Jul*_*ian 24 css layout flexbox masonry

我正在尝试仅使用CSS和flexbox创建水平砌体布局.我遇到的问题是元素之间存在垂直间隙,没有使用align-left: stretch;是否可以缩小间隙?

.card-container {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap; 
  align-items: flex-start;
}


.card {
  width: 25%;
  flex: 1 0 auto;
}
Run Code Online (Sandbox Code Playgroud)

完整的codepen在这里

小智 21

这是使用包裹列的一个选项,但它需要固定的高度.

.card-container {
  display: flex;
  flex-flow: column wrap;
  height:100vh;
  align-items: center;
  background-color: #888;
}
Run Code Online (Sandbox Code Playgroud)

CSS砌体布局的一个更好的选择是使用列,一个例子是在这篇博客文章http://w3bits.com/css-masonry/

.masonry { /* Masonry container */
    -moz-column-count: 4;
    -webkit-column-count: 4;
    column-count: 4;
    -moz-column-gap: 1em;
    -webkit-column-gap: 1em;
    column-gap: 1em;
}

.item { /* Masonry bricks or child elements */
    background-color: #eee;
    display: inline-block;
    margin: 0 0 1em;
    width: 100%;
}
Run Code Online (Sandbox Code Playgroud)

  • 列不是更好的解决方案,因为列使最新项目沿着左列向下,而不是列在左侧列表中然后向下列出的最新项目 (31认同)

joe*_*deg 18

Flex框包装将溢出元素包装到新行.与上一行一样,这个新行具有最高flex子项的高度.它不会让行中的元素超出行边界.

所以不幸的是,你不能用flexbox关闭垂直间隙.