诀窍是正确地设置变换orgin、边界,然后应该很容易地应用这两个歪斜变换。您可能还需要一些负边距来校正一些空间。
我使用CSS变量来简化代码,但这不是强制性的。
#about-gallery {
margin: 60px 0;
display: flex;
flex-wrap: wrap;
--s:-8deg; /* The skew factor (the same for all)*/
}
.about-img-wrapper {
position: relative;
margin: 5px;
overflow: hidden; /* Don't forget this !!*/
flex-grow:1;
}
.about-img-wrapper > * {
height: 300px;
background-size: 0 0; /* Hide the image here */
background-position: center;
overflow: hidden; /* Don't forget this !!*/
transform:skewX(var(--s,0deg));
}
/* We need skewY for the 3 last element */
.about-img-wrapper:nth-child(n + 3) > * {
transform:skewY(var(--s,0deg));
}
/* The pseudo element will get the image and the inverse of skewing */
.about-img-wrapper > *::before {
content:"";
display:block;
width:100%;
height:100%;
background:inherit; /* inherit the inline image */
background-size:cover;
transform-origin: inherit; /* inherit the same transform-origin */
transform:skewX(calc(-1*var(--s,0deg)));
}
.about-img-wrapper:nth-child(n + 3) > *::before {
transform:skewY(calc(-1*var(--s,0deg)));
}
/**/
.image-1 {
border-left: solid 10px black;
flex-basis:50%;
margin-right:-15px;
}
.image-1>* {
transform-origin: top;
border: solid 10px black;border-left: none;
}
/**/
.image-2 {
border-right: solid 10px black;
flex-basis:40%;
margin-left:-15px;
}
.image-2>* {
transform-origin: bottom;
border: solid 10px black;border-right: none;
}
/**/
.image-3 {
border-top: solid 10px black;
flex-basis:100%;
}
.image-3>* {
transform-origin: left;
border: solid 10px black;border-top: none;
}
/**/
.image-4,
.image-5{
border-bottom: solid 10px black;
flex-basis:40%;
margin-top:-5vw;
}
.image-4>*,
.image-5>* {
transform-origin: right;
border: solid 10px black;border-bottom: none;
}
.image-5 {
margin-top:-12vw;
}
.image-5>* {
height:calc(300px + 7vw); /* We need a bigger height here */
}
/**/
* {
box-sizing: border-box;
}
<div id="about-gallery">
<div class="about-img-wrapper image-1">
<div style="background-image: url(https://picsum.photos/id/10/800/800);"></div>
</div>
<div class="about-img-wrapper image-2">
<div style="background-image: url(https://picsum.photos/id/102/800/800);"></div>
</div>
<div class="about-img-wrapper image-3">
<div style="background-image: url(https://picsum.photos/id/123/800/800);"></div>
</div>
<div class="about-img-wrapper image-4">
<div style="background-image: url(https://picsum.photos/id/14/800/800);"></div>
</div>
<div class="about-img-wrapper image-5">
<div style="background-image: url(https://picsum.photos/id/20/800/800);"></div>
</div>
</div>