我正在使用CSS Grid来布局缩略图库,没有Javascript或任何其他响应技术。我想将缩略图的高度设置为宽度(1:1)的平方比
为什么?当页面加载时我需要缩略图div来占用空间,因为现在如果缩略图div中没有图像则它不占用任何空间。
这是一个实例:https://www.w3schools.com/code/tryit.asp?filename=FMCULIDQUOBX
以下是代码:
.container {max-width: 900px;}
.gallery {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-gap: 15px;
}
.thumbnail {box-shadow: 0 4px 4px rgba(0,0,0,0.50);}
img {width: 100%; display: block;}
...............................
<div class="container">
<div class="gallery">
<div class="thumbnail">
<a href="large-image.jpg">
<img src="thumbnail-image.jpg">
</a>
</div>
<div class="thumbnail">
...... same as above ......
</div>
<div class="thumbnail">
...... same as above ......
</div>
<div class="thumbnail">
...... same as above ......
</div>
</div>
</div>
上面的代码将宽度(900px)分为四个分数,4个缩略图分为1行。这就是我没有定义任何宽度的原因 如果图像未加载,则缩略图div甚至不可见 换句话说,如果您在浏览器中禁用图像,缩略图div应占用方形的空间 如何解决这个问题?感谢
答案 0 :(得分:2)
我不确定如何使用css网格,但我知道如何让.thumbnail
保持它的比例。
我刚才学会了这个技巧,从那以后我就一直使用它。
.thumbnail{
position: relative;
}
. thumbnail:before{
content: ' ';
display: block;
width: 100%;
padding-top: 100% \* Percentage value in padding derived from the width *\
}
.thumbnail > img{
position: absolute;
top: 0px;
left: 0px;
bottom: 0px;
right: 0px;
}
答案 1 :(得分:0)
解决方案是在网格中添加一个不可见的正方形元素(零宽度和100%底部填充),并通过grid-auto-rows: 1fr
将所有行的高度设置为相等;然后重新放置不可见的网格元素以及第一个网格元素以使其重叠。
因此,您的css文件应如下所示:
.container {max-width: 900px;}
.gallery {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-gap: 15px;
}
.gallery::before {
content: '';
width: 0;
padding-bottom: 100%;
grid-row: 1 / 1;
grid-column: 1 / 1;
}
.gallery > *:first-child{
grid-row: 1 / 1;
grid-column: 1 / 1;
}
.thumbnail {box-shadow: 0 4px 4px rgba(0,0,0,0.50);}
img {width: 100%; display: block;}
答案 2 :(得分:-1)
最大的优点是默认情况下CSS网格对其子节点应用了类似的高度。
选项是重构HTML并减少标记(HTML)。您可以为.gallery
类添加高度,使其看起来更加方正。
.container {max-width: 900px; margin:0 auto;}
.gallery {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-gap: 15px;
}
.thumbnail {display:block; box-shadow: 0 4px 4px rgba(0,0,0,0.50);}
img {display:block; width:100%; height: auto;}
<div class="container">
<div class="gallery">
<a class="thumbnail" href="https://static.pexels.com/photos/54278/pexels-photo-54278.jpeg">
<img src="https://static.pexels.com/photos/54278/pexels-photo-54278.jpeg">
</a>
<a class="thumbnail" href="https://static.pexels.com/photos/242276/pexels-photo-242276.jpeg">
<img src="https://static.pexels.com/photos/242276/pexels-photo-242276.jpeg">
</a>
<a class="thumbnail" href="https://static.pexels.com/photos/54278/pexels-photo-54278.jpeg">
<img src="https://static.pexels.com/photos/54278/pexels-photo-54278.jpeg">
</a>
<a class="thumbnail" href="https://static.pexels.com/photos/242276/pexels-photo-242276.jpeg">
<img src="https://static.pexels.com/photos/242276/pexels-photo-242276.jpeg">
</a>
<a class="thumbnail" href="https://static.pexels.com/photos/54278/pexels-photo-54278.jpeg">
<img src="https://static.pexels.com/photos/54278/pexels-photo-54278.jpeg">
</a>
<a class="thumbnail" href="https://static.pexels.com/photos/242276/pexels-photo-242276.jpeg">
<img src="https://static.pexels.com/photos/242276/pexels-photo-242276.jpeg">
</a>
<a class="thumbnail" href="https://static.pexels.com/photos/54278/pexels-photo-54278.jpeg">
<img src="https://static.pexels.com/photos/54278/pexels-photo-54278.jpeg">
</a>
<a class="thumbnail" href="https://static.pexels.com/photos/242276/pexels-photo-242276.jpeg">
<img src="https://static.pexels.com/photos/242276/pexels-photo-242276.jpeg">
</a>
</div>
</div>