为了给出正确定义的答案,我首先要澄清要求:
- 所有图片具有相同的宽高比:3/2
- 不裁剪图像
- 图片之间无空隙
- 制作一张图片拼贴
您有成千上万的可能性来展示您的图片。我将制作一个简单的布局,这应该能为您展示构建您自己的图片拼贴的方法。
这是一个精美的代码片段,您可以实现以下效果,这是它的外观:
![Mosaic of images in html/css - example layout](https://istack.dev59.com/5SdcQ.webp)
代码:
body, html {
width:100%;
margin:0;
padding:0;
}
#wrap {
width:984px;
height:492px;
}
.big_col, .medium_col, .small_col{
height:492px;
float:left;
}
img {
display:block;
margin:0;
padding:0;
border:none;
float:left;
}
.big_col {
width:328px;
}
.medium_col{
width:164px;
}
.small_col{
width:82px;
}
.big_img img {
width:328px;
height:492px
}
.medium_img img {
width:164px;
height:246px;
}
.small_img img {
width:82px;
height:123px;
}
<div id="wrap">
<div class="big_col">
<div class="small_img">
<img src="https://picsum.photos/id/241/328/492" alt="" />
<img src="https://picsum.photos/id/147/328/492" alt="" />
<img src="https://picsum.photos/id/258/328/492" alt="" />
<img src="https://picsum.photos/id/237/328/492" alt="" />
</div>
<div class="medium_img">
<img src="https://picsum.photos/id/356/328/492" alt="" />
<img src="https://picsum.photos/id/254/328/492" alt="" />
</div>
<div class="small_img">
<img src="https://picsum.photos/id/156/328/492" alt="" />
<img src="https://picsum.photos/id/175/328/492" alt="" />
<img src="https://picsum.photos/id/132/328/492" alt="" />
<img src="https://picsum.photos/id/197/328/492" alt="" />
</div>
</div>
<div class="big_col">
<img src="https://picsum.photos/328/492" alt="" />
</div>
<div class="small_col small_img">
<img src="https://picsum.photos/id/210/328/492" alt="" />
<img src="https://picsum.photos/id/152/328/492" alt="" />
<img src="https://picsum.photos/id/142/328/492" alt="" />
<img src="https://picsum.photos/id/189/328/492" alt="" />
</div>
<div class="medium_col medium_img">
<img src="https://picsum.photos/id/254/328/492" alt="" />
<img src="https://picsum.photos/id/111/328/492" alt="" />
</div>
<div class="small_col small_img">
<img src="https://picsum.photos/id/198/328/492" alt="" />
<img src="https://picsum.photos/id/201/328/492" alt="" />
<img src="https://picsum.photos/id/286/328/492" alt="" />
<img src="https://picsum.photos/id/145/328/492" alt="" />
</div>
</div>
第一步:思考、计算,再次思考
首先:为了简单起见,假设你的图片有3种尺寸(我将图片大小增加1像素,以便更容易进行计算):
- 大尺寸:
328*492px
- 中等尺寸,即大尺寸的一半:
164*246px
- 小尺寸,即大尺寸的四分之一:
82*123px
其次:由于你的所有图片都是竖向(肖像)的,并且容器的高度与大尺寸图片相同,因此您需要使用高度为492像素的列,这些列可以具有以下三个宽度:
- 大尺寸:
328px
宽,可以显示所有尺寸的图片
- 中等尺寸:
328/2 = 164px
宽,可以显示中等和小尺寸的图片
- 小尺寸:
327/4 = 82px
宽,只能显示小尺寸的图片
最后:你需要根据你想要展示的图片总数和容器的总宽度来自行决定使用多少列和什么图片尺寸。但是在你的示例中,容器(._pictures1
)具有宽度为935px
,这将无法通过刚刚选择的列宽实现。
935/82 = 11.4024...
你可以得到的最接近的容器宽度是82*12 = 984px
。
你要么改变容器的宽度,要么改变图像和列的大小来适应你的初始宽度。
或者(剧透)你可以使用百分比,这可能是一个替代方案,特别是如果你需要你的布局具有响应性,但是这可能会变得复杂,我正在尝试让事情简单化。
正如你肯定很好奇并想要查看它一样,在这里有一个示例布局:
代码片段:
body, html {
width:100%;
margin:0;
padding:0;
}
#wrap {
width:100%;
}
.big_col, .medium_col, .small_col{
float:left;
}
img {
height:auto;
display:block;
margin:0;
padding:0;
border:none;
float:left;
}
.big_col {
width:25%;
}
.medium_col{
width:12.5%;
}
.small_col{
width:6.25%;
}
.small_col img{
width:100%;
}
.medium_col>img {
width:100%;
}
.medium_col .small_img img {
width:50%;
}
.big_col .small_img img {
width:25%;
}
.big_col .medium_img img {
width:50%;
}
.big_col img {
width:100%;
}
<div id="wrap">
<div class="big_col">
<div class="small_img">
<img src="https://picsum.photos/id/241/328/492" alt="" />
<img src="https://picsum.photos/id/147/328/492" alt="" />
<img src="https://picsum.photos/id/258/328/492" alt="" />
<img src="https://picsum.photos/id/237/328/492" alt="" />
</div>
<div class="medium_img">
<img src="https://picsum.photos/id/356/328/492" alt="" />
<img src="https://picsum.photos/id/254/328/492" alt="" />
</div>
<div class="small_img">
<img src="https://picsum.photos/id/156/328/492" alt="" />
<img src="https://picsum.photos/id/175/328/492" alt="" />
<img src="https://picsum.photos/id/132/328/492" alt="" />
<img src="https://picsum.photos/id/197/328/492" alt="" />
</div>
</div>
<div class="big_col">
<img src="https://picsum.photos/328/492" alt="" />
</div>
<div class="small_col small_img">
<img src="https://picsum.photos/id/210/328/492" alt="" />
<img src="https://picsum.photos/id/152/328/492" alt="" />
<img src="https://picsum.photos/id/142/328/492" alt="" />
<img src="https://picsum.photos/id/189/328/492" alt="" />
</div>
<div class="medium_col medium_img">
<img src="https://picsum.photos/id/254/328/492" alt="" />
<img src="https://picsum.photos/id/111/328/492" alt="" />
</div>
<div class="small_col small_img">
<img src="https://picsum.photos/id/198/328/492" alt="" />
<img src="https://picsum.photos/id/201/328/492" alt="" />
<img src="https://picsum.photos/id/145/328/492" alt="" />
<img src="https://picsum.photos/id/198/328/492" alt="" />
</div>
</div>
下一步:设计布局
使用笔、Photoshop或其他适合你的工具,如果你真的很擅长,甚至可以用大脑来想象你想要的布局。
我设计了你在回答开头看到的那张图片。
正如我之前所说,有许多布局可能性(列数和这些列中图像的大小),所以对于这个示例,我选择了2个大列、1个中等列和2个小列。
328*2+164+82*2 = 984px ( = width of container so it can fit!)
最后一步:开始编码!
您可以在FIDDLE中查看结果。
这种布局是基于浮动的,因此我们需要定义容器、列、图像的宽度、高度,使它们可以很好地并排放置(由于我们已经进行了计算和设计,所以这很容易实现)。
body, html {
width:100%;
margin:0;
padding:0;
}
#wrap {
width:984px;
height:492px;
}
.big_col, .medium_col, .small_col{
height:492px;
float:left;
}
img {
display:block;
margin:0;
padding:0;
border:none;
float:left;
}
.big_col {
width:328px;
}
.medium_col{
width:164px;
}
.small_col{
width:82px;
}
.big_img img {
width:328px;
height:492px
}
.medium_img img {
width:164px;
height:246px;
}
.small_img img {
width:82px;
height:123px;
}
<div id="wrap">
<div class="big_col">
<div class="small_img">
<img src="https://picsum.photos/id/241/328/492" alt="" />
<img src="https://picsum.photos/id/147/328/492" alt="" />
<img src="https://picsum.photos/id/258/328/492" alt="" />
<img src="https://picsum.photos/id/237/328/492" alt="" />
</div>
<div class="medium_img">
<img src="https://picsum.photos/id/356/328/492" alt="" />
<img src="https://picsum.photos/id/254/328/492" alt="" />
</div>
<div class="small_img">
<img src="https://picsum.photos/id/156/328/492" alt="" />
<img src="https://picsum.photos/id/175/328/492" alt="" />
<img src="https://picsum.photos/id/132/328/492" alt="" />
<img src="https://picsum.photos/id/197/328/492" alt="" />
</div>
</div>
<div class="big_col">
<img src="https://picsum.photos/328/492" alt="" />
</div>
<div class="small_col small_img">
<img src="https://picsum.photos/id/210/328/492" alt="" />
<img src="https://picsum.photos/id/152/328/492" alt="" />
<img src="https://picsum.photos/id/142/328/492" alt="" />
<img src="https://picsum.photos/id/189/328/492" alt="" />
</div>
<div class="medium_col medium_img">
<img src="https://picsum.photos/id/254/328/492" alt="" />
<img src="https://picsum.photos/id/111/328/492" alt="" />
</div>
<div class="small_col small_img">
<img src="https://picsum.photos/id/198/328/492" alt="" />
<img src="https://picsum.photos/id/201/328/492" alt="" />
<img src="https://picsum.photos/id/145/328/492" alt="" />
<img src="https://picsum.photos/id/198/328/492" alt="" />
</div>
</div>
position: relative
; 对于img
,添加max-width:100%; max-height:100%
- Aleks G