如何在不变换内部图像的情况下变换此 div?
How can I transform this div without transforming the image within?
我尝试使用 div
制作一个形状并在里面放一张图片。我希望图像保持其默认形状(矩形或正方形)而不倾斜,但是当我将图像放入其中时,图像会随着 div
倾斜。对于 div
形状,我使用 transform: skewY(-10deg);
.intro {
width: 180px;
height: 400px;
/* border-radius:50%;*/
cursor: pointer;
position: relative;
background: #fff;
transform: skewY(-10deg);
margin: 35px 35px 35px 0px;
}
.intro img {
width: 100%;
height: 100%;
}
<div class="intro">
<img src="http://lorempixel.com/180/400/sports">
</div>
您正在尝试完成此任务:扭曲外部对象的形状但保持内部形状不变。唯一的方法是 transform
内部形状 negative 外部形状 transform
(也就是,如果你的 skewY(10deg)
在外部形状,在内部做 skewY(-10deg)
),然后隐藏 overflow
.
查看此片段:
.intro {
width: 180px;
height: 400px;
cursor: pointer;
position: relative;
background: #fff;
/* I added the -webkit- prefix as I'm using Safari 8 and
* it wouldn't show up otherwise. Might want to prefix that! */
-webkit-transform: skewY(-10deg);
transform: skewY(-10deg);
margin: 35px 35px 35px 0px;
overflow: hidden;
}
.intro img {
width: 100%;
height: 100%;
-webkit-transform: skewY(10deg);
transform: skewY(10deg);
}
<div class="intro">
<img src="http://lorempixel.com/180/400/sports">
</div>
这样做的一个令人讨厌的副作用是您的内容似乎被切断了。解决这个问题的唯一方法是使内部形状大于外部形状,从而有可能填充内部。对于您的图片,我建议:
.intro {
position: relative;
}
.intro img {
/* Use min width and heights higher than 100%
* (you might need to experiment here as it depends
* on the angle you chose for your skew) to fill
* the outer shape completely. */
min-width: 110%;
min-height: 110%;
/* Position the element absolute and 50%
* from the top and left */
position: absolute;
left: 50%;
top: 50%;
/* Now add a transform to it to move it with
* half of its width and height, therefore centering it. */
-webkit-transform: skewY(10deg) translate(-50%, -50%);
transform: skewY(10deg) translate(-50%, -50%);
}
现在您也可以执行 width: 110%; height: 110%; left: -5%; top: -5%;
,它会达到类似的结果。玩转它。
更新
根据@vals 的建议,仅使用 scale
转换而不是所有的定位 mumbo jumbo 可能会更简单。它始终是最容易被忽视的最简单的解决方案:
.intro img {
-webkit-transform: skewY(10deg) scale(1.2, 1.2);
transform: skewY(10deg) scale(1.2, 1.2);
}
我尝试使用 div
制作一个形状并在里面放一张图片。我希望图像保持其默认形状(矩形或正方形)而不倾斜,但是当我将图像放入其中时,图像会随着 div
倾斜。对于 div
形状,我使用 transform: skewY(-10deg);
.intro {
width: 180px;
height: 400px;
/* border-radius:50%;*/
cursor: pointer;
position: relative;
background: #fff;
transform: skewY(-10deg);
margin: 35px 35px 35px 0px;
}
.intro img {
width: 100%;
height: 100%;
}
<div class="intro">
<img src="http://lorempixel.com/180/400/sports">
</div>
您正在尝试完成此任务:扭曲外部对象的形状但保持内部形状不变。唯一的方法是 transform
内部形状 negative 外部形状 transform
(也就是,如果你的 skewY(10deg)
在外部形状,在内部做 skewY(-10deg)
),然后隐藏 overflow
.
查看此片段:
.intro {
width: 180px;
height: 400px;
cursor: pointer;
position: relative;
background: #fff;
/* I added the -webkit- prefix as I'm using Safari 8 and
* it wouldn't show up otherwise. Might want to prefix that! */
-webkit-transform: skewY(-10deg);
transform: skewY(-10deg);
margin: 35px 35px 35px 0px;
overflow: hidden;
}
.intro img {
width: 100%;
height: 100%;
-webkit-transform: skewY(10deg);
transform: skewY(10deg);
}
<div class="intro">
<img src="http://lorempixel.com/180/400/sports">
</div>
这样做的一个令人讨厌的副作用是您的内容似乎被切断了。解决这个问题的唯一方法是使内部形状大于外部形状,从而有可能填充内部。对于您的图片,我建议:
.intro {
position: relative;
}
.intro img {
/* Use min width and heights higher than 100%
* (you might need to experiment here as it depends
* on the angle you chose for your skew) to fill
* the outer shape completely. */
min-width: 110%;
min-height: 110%;
/* Position the element absolute and 50%
* from the top and left */
position: absolute;
left: 50%;
top: 50%;
/* Now add a transform to it to move it with
* half of its width and height, therefore centering it. */
-webkit-transform: skewY(10deg) translate(-50%, -50%);
transform: skewY(10deg) translate(-50%, -50%);
}
现在您也可以执行 width: 110%; height: 110%; left: -5%; top: -5%;
,它会达到类似的结果。玩转它。
更新
根据@vals 的建议,仅使用 scale
转换而不是所有的定位 mumbo jumbo 可能会更简单。它始终是最容易被忽视的最简单的解决方案:
.intro img {
-webkit-transform: skewY(10deg) scale(1.2, 1.2);
transform: skewY(10deg) scale(1.2, 1.2);
}