我可以更改“justify-content"吗?值取决于 flex 容器中的元素数量? [英] Can I change the "justify-content" value depending on the number of elements in the flex container?

查看:21
本文介绍了我可以更改“justify-content"吗?值取决于 flex 容器中的元素数量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在旧网站上制作图片库.除了常规的旧 HTML/jQuery 或 JS/CSS 之外,我不能使用任何其他东西.我知道使用 Bootstrap 或某些网格库会容易得多.

我正在用 flexbox 构建它.每行有四个图像,有多个行.当每一行都有四个图像时,它看起来很棒.当它有 2 个或 3 个时,因为我使用了 justify-content: space-between,它看起来很奇怪,因为图像之间的差距很大.

我使用 space-between 的原因是我希望图像与父容器的左侧和右侧对齐.

一些注意事项:

  • 每个 flex 项的最大宽度为 150 像素
  • 我想要项目之间的边距,但我不在乎这个边距是否随着视口宽度的变化而变化
  • flex 容器的最大宽度仅允许连续四个 150 像素宽的项目

我的问题:如果一行少于一组元素(在本例中为四个),我可以将 justify-content 更改为更合适的内容,例如 flex-开始?

理想情况下,我想在没有 JavaScript/jQuery 的情况下执行此操作,但如果不可能,我也愿意接受这些解决方案.

另外,如果我想太多了,甚至不需要使用 justify-content: space-between,请随时告诉我.这是一个工作示例:

/* 外容器 */.flex 容器 {填充:24px 0;背景:白色;边框:实心 1px rgba(0,0,0,.1);最大宽度:700px;/* 管他呢 *//* 弹性道具 */显示:弹性;flex-wrap: 包裹;对齐内容:间隔;}/* 包含 img 块和标题 */.thumb-grid {边框:实心 1px rgba(0,0,0,.1);宽度:150px;底边距:36px;}.thumb-grid:first-of-type { margin-left: 0;}.thumb-grid:nth-of-type(4) { margin-right: 0;}.thumb-grid p {文本对齐:居中;}.img-block {背景:黑色;高度:150px;}.img-block img {高度:150px;不透明度:1;过渡:不透明度150ms;}.img 块:悬停 img {不透明度:.9;}

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像1</p>

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像2</p>

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像3</p>

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像4</p>

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像5</p>

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像 6</p>

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像 7</p>

解决方案

根据您需要支持的内容,使用 CSS 网格布局可能更有意义(正如 TylerH 指出的,CSS 网格没有通用浏览器支持).查看文档了解更多信息:https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout

.flex-container {显示:网格;网格模板列:重复(4,1fr);网格间距:10px;网格自动行:minmax(100px,自动);}

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像1</p>

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像2</p>

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像3</p>

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像4</p>

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像5</p>

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像 6</p>

<div class="thumb-grid"><div class="img-block"><a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="示例图像"></a>

<p>图像 7</p>

I am working on an image gallery on a legacy site. I can't use anything other than regular old HTML/jQuery or JS/CSS. I know this would be a lot easier with Bootstrap or some grid library.

I'm building it with flexbox. There are four images in each row, with multiple rows. It looks great when each row has its four images. When it has 2 or 3, because I am using justify-content: space-between, it makes it look weird because of the big gap between the images.

The reason I'm using space-between is that I want the images to align to the left of the parent container, and also to the right.

Some notes:

My question: if a row has less than a set # of elements (in this case four), can I change the justify-content to be something more appropriate, like flex-start?

Ideally, I want to do this without JavaScript/jQuery, but if that's impossible, I'm open to those solutions as well.

Also, feel free to let me know if I'm way overthinking this and don't even need to use justify-content: space-between. Here's a working example:

/* outer container */
.flex-container {
  padding: 24px 0;
  background: white;
  border: solid 1px rgba(0,0,0,.1);
  max-width: 700px; /* or whatever */
  
  /* flex props */
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
}

/* contains img block and title */
.thumb-grid {
  border: solid 1px rgba(0,0,0,.1);
  width: 150px;
  margin-bottom: 36px;
}

.thumb-grid:first-of-type { margin-left: 0; }
.thumb-grid:nth-of-type(4) { margin-right: 0; }

.thumb-grid p {
  text-align: center;
}

.img-block {
  background: black;
  height: 150px;
}

.img-block img {
  height: 150px;
  opacity: 1;
  transition: opacity 150ms;
}

.img-block:hover img {
  opacity: .9;
}

<div class="flex-container">
    
    <div class="thumb-grid">      
      <div class="img-block">        
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 1</p>      
    </div>
    
    <div class="thumb-grid">      
      <div class="img-block">        
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 2</p>      
    </div>
    
   <div class="thumb-grid">      
      <div class="img-block">        
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 3</p>      
    </div>
    
    <div class="thumb-grid">
      <div class="img-block">       
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 4</p>      
    </div>
    
    <div class="thumb-grid">      
      <div class="img-block">        
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 5</p>      
    </div>
    
    <div class="thumb-grid">      
      <div class="img-block">        
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 6</p>      
    </div>
    
   <div class="thumb-grid">      
      <div class="img-block">
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 7</p>      
    </div>
    
  </div>

解决方案

Depending on what you need to support, it might make more sense to use CSS grid layouts (as TylerH pointed out, CSS Grids do not have universal browser support). Check the documentation for further info: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout

.flex-container {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-gap: 10px;
  grid-auto-rows: minmax(100px, auto);
}

<div class="flex-container">
    
    <div class="thumb-grid">      
      <div class="img-block">        
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 1</p>      
    </div>
    
    <div class="thumb-grid">      
      <div class="img-block">        
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 2</p>      
    </div>
    
   <div class="thumb-grid">      
      <div class="img-block">        
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 3</p>      
    </div>
    
    <div class="thumb-grid">
      <div class="img-block">       
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 4</p>      
    </div>
    
    <div class="thumb-grid">      
      <div class="img-block">        
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 5</p>      
    </div>
    
    <div class="thumb-grid">      
      <div class="img-block">        
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 6</p>      
    </div>
    
   <div class="thumb-grid">      
      <div class="img-block">
        <a href=""><img src="https://www.expedient.com/wp-content/uploads/2017/06/exp-mq-resouce-thumbnail-1-150x150.jpg" alt="example image"></a>        
      </div>      
      <p>Image 7</p>      
    </div>
    
  </div>

这篇关于我可以更改“justify-content"吗?值取决于 flex 容器中的元素数量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
前端开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆