如何剪辑和转换图像,添加圆角和透视图?
How can I clip and transform an image, adding rounded corners and perspective?
我如何使用 HTML 和 CSS 制作一个 div 并在其中包含经过裁剪和遮罩的图像,使其看起来如下所示:
我已经尝试了大约 2 个小时来找到一种方法来执行此操作,但一无所获,所以我只是希望有人能指出我正确的方向。具体来说,我希望裁剪图像,使顶部的两个角变圆,并将其嵌入到具有四个圆角和 1/4 底部填充的 div 元素中,两个元素都经过转换,使其成为看起来右边比左边离观众更远。
为了创建这样的效果,图像保持不变,但外部形状具有透视效果,您可以使用类似于下面演示的东西。
div.inner {/*gives top section effect, also crops the image*/
position: absolute;
top: 0;
left: 0;
border-radius: 20px 20px 0 0;
height: 200px;
width: 300px;
overflow: hidden;
border: 10px solid red;
transform: skewY(5deg);
}
.inner img {/*removes transform skew from image*/
transform: skewY(-5deg);
transform-origin: top left;
height:100%;width:100%;
}
.wrap {
display: inline-block;
height: 200px;
width: 300px;
position: relative;
/*for demo only*/
margin: 100px 100px;
}
.wrap:after { /*give bottom section the effect*/
content: "";
position: absolute;
bottom: -50%;
left: 0;
height: 100%;
width: calc(100% + 20px);
transform: skewY(-10deg);
transform-origin: bottom right;
background: red;
z-index: -1;
border-radius: 20px;
}
<div class="wrap">
<div class="inner">
<img src="http://lorempixel.com/500/500" />
</div>
</div>
为了创建效果,我不得不合并此 wrapper
div。这允许使用伪元素(:after
css)来生成形状的下部:
+----------------------------+
| |
| _______/ <-- curved corner
| ------/
| ------/
\-----/
/\
\_____ also curved corner
inner
div 然后用于生成形状的上部。使用 skew
声明,形状允许与 :after
元素相反,使红色形状的右侧向下。
overflow:hidden
确保不适合此 inner
div 的图像的任何部分将被裁剪(border-radius:20px 20px 0 0;
确保仅上角受到影响).
最后一点要注意的是 .inner img
css。由于我已经歪斜了 .inner
div,因此重要的是 'unskew' 图像以使其保持矩形形状。这就是为什么这里有一个'counter-skew' (transform: skewY(-5deg);
).
这是我使用 perspective 的尝试。
感谢@vals 指出 perspective
可以用作 transform
的一部分。
* {
box-sizing: border-box;
}
figure {
perspective: 1000px;
width: 420px;
margin: 5em auto;
height: 350px;
background: red;
text-align: center;
padding: 10px;
border-radius: 25px;
transform: perspective(1200px) rotateY(50deg);
}
img {
border-radius: 20px 20px 0 0;
}
<figure>
<img src="http://lorempixel.com/400/200/sports/1/" alt="" />
</figure>
我如何使用 HTML 和 CSS 制作一个 div 并在其中包含经过裁剪和遮罩的图像,使其看起来如下所示:
我已经尝试了大约 2 个小时来找到一种方法来执行此操作,但一无所获,所以我只是希望有人能指出我正确的方向。具体来说,我希望裁剪图像,使顶部的两个角变圆,并将其嵌入到具有四个圆角和 1/4 底部填充的 div 元素中,两个元素都经过转换,使其成为看起来右边比左边离观众更远。
为了创建这样的效果,图像保持不变,但外部形状具有透视效果,您可以使用类似于下面演示的东西。
div.inner {/*gives top section effect, also crops the image*/
position: absolute;
top: 0;
left: 0;
border-radius: 20px 20px 0 0;
height: 200px;
width: 300px;
overflow: hidden;
border: 10px solid red;
transform: skewY(5deg);
}
.inner img {/*removes transform skew from image*/
transform: skewY(-5deg);
transform-origin: top left;
height:100%;width:100%;
}
.wrap {
display: inline-block;
height: 200px;
width: 300px;
position: relative;
/*for demo only*/
margin: 100px 100px;
}
.wrap:after { /*give bottom section the effect*/
content: "";
position: absolute;
bottom: -50%;
left: 0;
height: 100%;
width: calc(100% + 20px);
transform: skewY(-10deg);
transform-origin: bottom right;
background: red;
z-index: -1;
border-radius: 20px;
}
<div class="wrap">
<div class="inner">
<img src="http://lorempixel.com/500/500" />
</div>
</div>
为了创建效果,我不得不合并此 wrapper
div。这允许使用伪元素(:after
css)来生成形状的下部:
+----------------------------+
| |
| _______/ <-- curved corner
| ------/
| ------/
\-----/
/\
\_____ also curved corner
inner
div 然后用于生成形状的上部。使用 skew
声明,形状允许与 :after
元素相反,使红色形状的右侧向下。
overflow:hidden
确保不适合此 inner
div 的图像的任何部分将被裁剪(border-radius:20px 20px 0 0;
确保仅上角受到影响).
最后一点要注意的是 .inner img
css。由于我已经歪斜了 .inner
div,因此重要的是 'unskew' 图像以使其保持矩形形状。这就是为什么这里有一个'counter-skew' (transform: skewY(-5deg);
).
这是我使用 perspective 的尝试。
感谢@vals 指出 perspective
可以用作 transform
的一部分。
* {
box-sizing: border-box;
}
figure {
perspective: 1000px;
width: 420px;
margin: 5em auto;
height: 350px;
background: red;
text-align: center;
padding: 10px;
border-radius: 25px;
transform: perspective(1200px) rotateY(50deg);
}
img {
border-radius: 20px 20px 0 0;
}
<figure>
<img src="http://lorempixel.com/400/200/sports/1/" alt="" />
</figure>