如何让一张图片在 3 个带间距的 div 后面流动?
How to have one image flow behind 3 divs with gutters?
我正在尝试找出最好的方式来显示三个间隔开的 div,并在它们后面流动相同的图像。
查看我的草图文件中的图像:
我的第一次尝试是在 3 个 div 后面放置一个图像
3 个 div 将有一个“:after”伪元素,该元素具有深色背景虚线设计,因此它覆盖了否则会看到的彩色图像。
看图:(伪元素现在还不完美,但我相信你明白了……我也给这件作品加了阴影以便于查看……)
但是这些点并不总是与背景相匹配,我想一定有更优雅的方法来做到这一点。
我猜的另一个选择是以某种方式使用相同的图像 3 次,并以某种方式将它恰好放在 3 个 div 中的每一个中?
有什么想法吗?是否有适用于此处的背景剪辑 属性?
body {
margin: 0;
padding: 10px;
background-color: black;
}
.wrapper {
display: grid;
height: 100%;
width: 320px;
grid-template-columns: repeat(3, 1fr);
column-gap: 10px;
grid-template-columns: auto;
}
.left {
height: 300px;
grid-column: 1 / 2;
grid-row: 1 / 2;
background-image: url('https://www.tacoshy.de/Images/Yoshi/IMAG0735.jpg');
background-size: cover;
border-radius: 10px;
}
.middle {
height: 300px;
grid-column: 2 / 3;
grid-row: 1 / 2;
background-color: red;
background-image: url('https://www.tacoshy.de/Images/Yoshi/IMAG0735.jpg');
background-size: cover;
background-position: left -110px top 0;
border-radius: 10px;
}
.right {
height: 300px;
grid-column: 3 / 4;
grid-row: 1 / 2;
background-color: red;
background-image: url('https://www.tacoshy.de/Images/Yoshi/IMAG0735.jpg');
background-size: cover;
background-position: left -220px top 0;
border-radius: 10px;
}
<body>
<div class="wrapper">
<div class="left"></div>
<div class="middle"></div>
<div class="right"></div>
</div>
</body>
使用背景图像偏移来完成。
这是一个使用 pseudo-element 和 mask
的技巧,您不需要处理任何偏移量并且它会响应。诀窍是应用相对于容器(而不是子元素)制作的伪元素,然后用遮罩剪裁不需要的部分以获得所需的结果:
.container {
padding: 20px;
display: flex;
position: relative;
}
.container > div {
margin: 0 10px;
flex-grow: 1;
border-radius: 20px;
height: 250px;
box-sizing:border-box;
-webkit-mask: linear-gradient(#fff, #fff);
mask: linear-gradient(#fff, #fff);
}
.container > div::before {
content: "";
position: absolute;
z-index:-1;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url(https://picsum.photos/id/107/1000/800) center/cover;
}
.container > div > div {
height:100%;
border:2px solid #000;
border-radius: 20px;
text-align:center;
box-sizing:border-box;
}
body {
background:#f3f3f3;
}
<div class="container">
<div>
<div>Some</div>
</div>
<div>
<div>Text</div>
</div>
<div>
<div>here</div>
</div>
</div>
我正在尝试找出最好的方式来显示三个间隔开的 div,并在它们后面流动相同的图像。
查看我的草图文件中的图像:
我的第一次尝试是在 3 个 div 后面放置一个图像 3 个 div 将有一个“:after”伪元素,该元素具有深色背景虚线设计,因此它覆盖了否则会看到的彩色图像。
看图:(伪元素现在还不完美,但我相信你明白了……我也给这件作品加了阴影以便于查看……)
但是这些点并不总是与背景相匹配,我想一定有更优雅的方法来做到这一点。 我猜的另一个选择是以某种方式使用相同的图像 3 次,并以某种方式将它恰好放在 3 个 div 中的每一个中?
有什么想法吗?是否有适用于此处的背景剪辑 属性?
body {
margin: 0;
padding: 10px;
background-color: black;
}
.wrapper {
display: grid;
height: 100%;
width: 320px;
grid-template-columns: repeat(3, 1fr);
column-gap: 10px;
grid-template-columns: auto;
}
.left {
height: 300px;
grid-column: 1 / 2;
grid-row: 1 / 2;
background-image: url('https://www.tacoshy.de/Images/Yoshi/IMAG0735.jpg');
background-size: cover;
border-radius: 10px;
}
.middle {
height: 300px;
grid-column: 2 / 3;
grid-row: 1 / 2;
background-color: red;
background-image: url('https://www.tacoshy.de/Images/Yoshi/IMAG0735.jpg');
background-size: cover;
background-position: left -110px top 0;
border-radius: 10px;
}
.right {
height: 300px;
grid-column: 3 / 4;
grid-row: 1 / 2;
background-color: red;
background-image: url('https://www.tacoshy.de/Images/Yoshi/IMAG0735.jpg');
background-size: cover;
background-position: left -220px top 0;
border-radius: 10px;
}
<body>
<div class="wrapper">
<div class="left"></div>
<div class="middle"></div>
<div class="right"></div>
</div>
</body>
使用背景图像偏移来完成。
这是一个使用 pseudo-element 和 mask
的技巧,您不需要处理任何偏移量并且它会响应。诀窍是应用相对于容器(而不是子元素)制作的伪元素,然后用遮罩剪裁不需要的部分以获得所需的结果:
.container {
padding: 20px;
display: flex;
position: relative;
}
.container > div {
margin: 0 10px;
flex-grow: 1;
border-radius: 20px;
height: 250px;
box-sizing:border-box;
-webkit-mask: linear-gradient(#fff, #fff);
mask: linear-gradient(#fff, #fff);
}
.container > div::before {
content: "";
position: absolute;
z-index:-1;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url(https://picsum.photos/id/107/1000/800) center/cover;
}
.container > div > div {
height:100%;
border:2px solid #000;
border-radius: 20px;
text-align:center;
box-sizing:border-box;
}
body {
background:#f3f3f3;
}
<div class="container">
<div>
<div>Some</div>
</div>
<div>
<div>Text</div>
</div>
<div>
<div>here</div>
</div>
</div>