如何使用 flexbox 为图像留出边距?

Posted

技术标签:

【中文标题】如何使用 flexbox 为图像留出边距?【英文标题】:How do I give margin to image using flexbox? 【发布时间】:2018-01-20 19:17:33 【问题描述】:

我希望图像有边距,所以我写了justify-content: space-around,但顶部图像和底部图像之间没有边距。

  
#portfolio 
  background-color: #00C3A9;
  height: 800px;

.portfolio_pic 
    display: flex;
    justify-content: space-around;
    flex-wrap: wrap;
<div id="portfolio">  
  <div class="portfolio_pic">
 <img src="http://via.placeholder.com/350x300" >
 <img src="http://via.placeholder.com/350x300" >
 <img src="http://via.placeholder.com/350x300" >
 <img src="http://via.placeholder.com/350x300" >
 <img src="http://via.placeholder.com/350x300" >
 <img src="http://via.placeholder.com/350x300" >
</div>
</div>

截图:

在这种情况下我该怎么办?谢谢你

【问题讨论】:

边距应该设置为子级,没有其他方法可以在 flex 包裹的行之间设置“排水沟”。显示:网格;有这个选项(grid-gap),不是flex。 ;) .portfolio_pic img margin:X; 是实现这一目标的最连贯的方式,以我自己的拙见:) 【参考方案1】:

我猜你想要做的是在flexboxflex 行 之间设置 空格(如果你有兴趣,请参阅 related issue here) - 所以你可以添加这些规则:

    align-content: space-around 垂直间隔 flex 行

    height: 100% 占据portfolio div 的高度。

请看下面的演示:

#portfolio 
  background-color: #00C3A9;
  height: 800px;

.portfolio_pic 
  display: flex;
  justify-content: space-around;
  flex-wrap: wrap;
  align-content: space-around;
  height: 100%;
<div id="portfolio">
  <div class="portfolio_pic">
    <img src="http://via.placeholder.com/350x300" >
    <img src="http://via.placeholder.com/350x300" >
    <img src="http://via.placeholder.com/350x300" >
    <img src="http://via.placeholder.com/350x300" >
    <img src="http://via.placeholder.com/350x300" >
    <img src="http://via.placeholder.com/350x300" >
  </div>
</div>

【讨论】:

这仅在有足够空间用于所有图像标签时才有效。当空间有限时,垂直间距就没有了。 @JanNahody 这取决于 OP 在空间有限时要管理的内容 - 是否 溢出... Flex 应该可以处理动态变量。在这里,OP 必须设置修复大小。抱歉,这不是 flex 的解决方案。使用固定尺寸我们不需要 flex。【参考方案2】:

您可以尝试像这样为图像添加边距

img  margin-top: 15px; 

或者像这样创建一个具有该样式的类,并为每个图像赋予该类:

.imagesingrid  margin-top: 15px; 
<img class="imagesingrid" src="http://via.placeholder.com/350x300" >

【讨论】:

【参考方案3】:

Flex 是一维的。因此,当您使用justify-content: space-around 时,它会在定义的维度上对其进行管理。行或列。 有什么理由不给图像元素留边距?

#portfolio 
  background-color: #00C3A9;
  height: 800px;

.portfolio_pic 
    display: flex;
    justify-content: space-around;
    flex-wrap: wrap;


img 
  margin: 20px;
  
<div id="portfolio">  
  <div class="portfolio_pic">
 <img src="http://via.placeholder.com/350x300" >
 <img src="http://via.placeholder.com/350x300" >
 <img src="http://via.placeholder.com/350x300" >
 <img src="http://via.placeholder.com/350x300" >
 <img src="http://via.placeholder.com/350x300" >
 <img src="http://via.placeholder.com/350x300" >
</div>
</div>

【讨论】:

以上是关于如何使用 flexbox 为图像留出边距?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 flexbox 均匀地显示内容卡,包括边距边 [重复]

Flexbox 挑战:如何在整行中使用相同且均匀的边距进行换行

带边距排水沟的 Flexbox 网格系统

Angular Material Flexbox - 如何在包裹的行之间添加边距?

如何使用 Flexbox 将 4 个图像划分为 2x2 网格?

如何在列表视图中的两个图像之间留出空间?