我正在使用旧网站上的图片库。我不能使用除常规旧HTML / jQuery或JS / CSS之外的任何东西。我知道使用Bootstrap或某些网格库会更容易。
我正在用flexbox构建它。每行有四个图像,有多行。当每行有四个图像时,它看起来很棒。当它有2或3时,因为我使用justify-content: space-between
,因为图像之间的差距很大,所以看起来很奇怪。
我使用space-between
的原因是我希望图像对齐父容器的左侧,也指向右侧。
一些注释:
我的问题:如果某行的元素数少于一组(在这种情况下为4),我是否可以将justify-content
更改为更合适的内容,例如flex-start
?
理想情况下,我想在没有JavaScript / jQuery的情况下这样做,但如果这是不可能的,我也会对这些解决方案持开放态度。
另外,如果我过分思考这个,甚至不需要使用justify-content: space-between
,请随时告诉我。
这是一个有效的例子:
/* 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>
答案 0 :(得分:3)
根据您需要支持的内容,使用CSS网格布局可能更有意义(正如TylerH所指出的,CSS网格没有通用的浏览器支持)。查看文档以获取更多信息: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);
}
&#13;
<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>
&#13;
答案 1 :(得分:1)
如何使用margin
代替justify-content:space-between
来获取间距?
/* 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:center;
}
/* contains img block and title */
.thumb-grid {
border: solid 1px rgba(0,0,0,.1);
width: 150px;
margin: 0 12px 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;
}
&#13;
<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>
&#13;
答案 2 :(得分:1)
对于此布局,请使用CSS网格。那时你原来的问题根本就不存在了。您不需要任何解决方法或黑客,JavaScript或任何奇怪的东西来使其工作。借助CSS网格布局,您可以通过优雅且可维护的代码轻松实现所需。
CSS网格布局是一种新的CSS功能,它实际上是第一种合法的布局方式,非常棒。了解它:
对于您的情况,请特别注意auto-fill
或auto-fit
属性。这是另一个有用的链接:https://gridbyexample.com/examples/example37/。
以下是使用CSS网格实现的快速示例: https://codepen.io/anon/pen/YxbexQ?editors=1100。了解它对不同屏幕/容器宽度的反应。它只是有效。
答案 3 :(得分:1)
这是一个可以与Flexbox一起使用的解决方案,它将提供比CSS Grid提供的更广泛的跨浏览器解决方案(今天)。
主要技巧是拥有 ghost 元素,比每行的项目少1个。
它们占据与常规物品相同的水平空间但没有高度,因此将向左推动少于4的任何数字。
由于我们可以使用伪元素,在这种情况下我们只需要一个额外的元素作为 ghost
Stack snippet
/* 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:empty, /* the ghost elements */
.flex-container::before,
.flex-container::after {
content: '';
border: solid 1px rgba(0,0,0,0);
width: 150px;
margin-bottom: 36px;
order: 1;
}
.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 class="thumb-grid"></div>
</div>
如果每行最多3个项目,我们只需要伪元素
/* outer container */
.flex-container {
padding: 24px 0;
background: white;
border: solid 1px rgba(0,0,0,.1);
max-width: 550px; /* 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;
}
.flex-container::before, .flex-container::after {
content: '';
border: solid 1px rgba(0,0,0,0);
width: 150px;
margin-bottom: 36px;
order: 1;
}
.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>
如果它可以是动态数量的项目,例如3-5之间,只要我们不使用少于最小数量的1,它就可以正常工作。
/* outer container */
.flex-container {
padding: 24px 0;
background: white;
border: solid 1px rgba(0,0,0,.1);
max-width: 850px; /* 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:empty, /* the ghost elements */
.flex-container::before,
.flex-container::after {
content: '';
border: solid 1px rgba(0,0,0,0);
width: 150px;
margin-bottom: 36px;
order: 1;
}
.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 class="thumb-grid"></div>
<div class="thumb-grid"></div>
</div>