我正在创建一个适应性强的图像行,当图像尺寸太大时,如果需要的话,可以分解为另一行。目前,台式机上连续4个,移动设备上连续2个。
所有图像的宽度均设置为25%或50%。我想让它们稍微均匀地隔开。
.images-row {
width: 100%;
margin-left: auto;
margin-right: auto;
padding-top: 15px;
padding-bottom: 15px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
text-align: center;
justify-content: center;
justify-content: space-evenly;
}
.image-container {
width: 25%;
display: flex;
align-items: center;
justify-content: center;
}
@media only screen and (max-device-width: 500px) {
.image-container {
width: 50%;
display: flex;
align-items: center;
justify-content: center;
}
}
<div class="images-row">
<div class="image-container">
<img src="https://via.placeholder.com/500x500" width="100%">
</div>
<div class="image-container">
<img src="https://via.placeholder.com/500x500" width="100%">
</div>
<div class="image-container">
<img src="https://via.placeholder.com/500x500" width="100%">
</div>
<div class="image-container">
<img src="https://via.placeholder.com/500x500" width="100%">
</div>
</div>
这很好,并且所有图像都在触摸。我觉得有些空间在视觉上看起来会更好。填充主容器宽度的最佳方法是吗?我试图像这样缩小图像;
.images-row {
width: 100%;
margin-left: auto;
margin-right: auto;
padding-top: 15px;
padding-bottom: 15px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
text-align: center;
justify-content: center;
justify-content: space-evenly;
}
.image-container {
width: 25%;
display: flex;
align-items: center;
justify-content: center;
}
@media only screen and (max-device-width: 500px) {
.image-container {
width: 50%;
display: flex;
align-items: center;
justify-content: center;
}
}
<div class="images-row">
<div class="image-container">
<img src="https://via.placeholder.com/500x500" width="95%">
</div>
<div class="image-container">
<img src="https://via.placeholder.com/500x500" width="95%">
</div>
<div class="image-container">
<img src="https://via.placeholder.com/500x500" width="95%">
</div>
<div class="image-container">
<img src="https://via.placeholder.com/500x500" width="95%">
</div>
</div>
在桌面上看起来不错,但是图像的底部仍然触摸下方图像的顶部。做这样的事情:
.images-row {
width: 100%;
margin-left: auto;
margin-right: auto;
padding-top: 15px;
padding-bottom: 15px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
text-align: center;
justify-content: center;
justify-content: space-evenly;
}
.image-container {
width: 25%;
display: flex;
align-items: center;
justify-content: center;
}
@media only screen and (max-device-width: 500px) {
.image-container {
width: 50%;
display: flex;
align-items: center;
justify-content: center;
}
}
.image-padding {
padding: 5px
}
.image {
width: 100%
}
<div class="images-row">
<div class="image-container">
<div class="image-padding">
<img class="image" src="https://via.placeholder.com/500x500">
</div>
</div>
<div class="image-container">
<div class="image-padding">
<img class="image" src="https://via.placeholder.com/500x500">
</div>
</div>
<div class="image-container">
<div class="image-padding">
<img class="image" src="https://via.placeholder.com/500x500">
</div>
</div>
<div class="image-container">
<div class="image-padding">
<img class="image" src="https://via.placeholder.com/500x500">
</div>
</div>
</div>
也可以很好地进行填充,但是遇到了这样的问题,即它们无法在移动设备上堆叠。我觉得我已经接近了,但不确定如何使它正常工作。
EDIT
.images-row {
width: 100%;
margin-left: auto;
margin-right: auto;
padding-top: 15px;
padding-bottom: 15px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
text-align: center;
justify-content: center;
justify-content: space-evenly;
}
.image-container {
width: 25%;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
}
@media only screen and (max-device-width: 500px) {
.image-container {
width: 50%;
display: flex;
align-items: center;
justify-content: center;
}
}
.image-padding {
padding: 5px
}
.image {
width: 100%
}
<div class="images-row">
<div class="image-container">
<div class="image-padding">
<img class="image" src="https://via.placeholder.com/500x500">
</div>
</div>
<div class="image-container">
<div class="image-padding">
<img class="image" src="https://via.placeholder.com/500x500">
</div>
</div>
<div class="image-container">
<div class="image-padding">
<img class="image" src="https://via.placeholder.com/500x500">
</div>
</div>
<div class="image-container">
<div class="image-padding">
<img class="image" src="https://via.placeholder.com/500x500">
</div>
</div>
</div>
<style>
</style>
答案 0 :(得分:1)
这是使用现成的网格系统的完美案例,有很多可以使用的网格系统。话虽这么说,您已经很接近了,但是您的html对于您要完成的工作来说有点太复杂了。我的猜测是,您正在与box-model的工作方式作斗争:如果添加padding,则容器会变宽。为避免这种情况,我通常使用“ box-siting:border-box”,这样,填充就进入了容器内部。它只是使一切变得更加逻辑。在我所有的项目中,我都始于:
* {box-sizing: border-box;}
对于您的特定情况,这是我的解决方案,您可以看到我稍微简化了html并更改了CSS:
.images-row {
width: 100%;
margin-left: auto;
margin-right: auto;
padding-top: 15px;
padding-bottom: 15px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-evenly;
flex-wrap: wrap;
}
.image-container {
width: 25%;
padding: 5px;
box-sizing: border-box;
}
@media only screen and (max-width: 500px) {
.image-container {
width: 50%;
}
}
.image {
width: 100%;
display: block;
}
<div class="images-row">
<div class="image-container">
<img class="image" src="https://via.placeholder.com/500x500">
</div>
<div class="image-container">
<img class="image" src="https://via.placeholder.com/500x500">
</div>
<div class="image-container">
<img class="image" src="https://via.placeholder.com/500x500">
</div>
<div class="image-container">
<img class="image" src="https://via.placeholder.com/500x500">
</div>
</div>
答案 1 :(得分:0)
您的代码可以真正简化,您不需要所有这些容器。通过简化,发现问题也将更加清晰。
.images-row {
width: 100%;
margin-bottom: 15px;
display: flex;
flex-direction: row;
justify-content: space-between;
flex-wrap: wrap;
}
img {
width: calc(25% - 10px);
}
@media only screen and (max-device-width: 500px) {
img {
width: calc(50% - 10px);
}
}
<div class="images-row">
<img class="image" src="https://via.placeholder.com/500x500">
<img class="image" src="https://via.placeholder.com/500x500">
<img class="image" src="https://via.placeholder.com/500x500">
<img class="image" src="https://via.placeholder.com/500x500">
</div>
对于移动设备,问题可能来自@media only screen and (max-device-width: 500px)
:例如,还有一些更适合检测移动设备的设备。{p>