CSS变形Skew

41

有人知道如何通过CSS的新变形属性实现以下倾斜效果吗:

正如您所看到的,我正在尝试倾斜两个角落,有人知道是否可能吗?

8个回答

36

10

CSS:

#box {
    width: 200px;
    height: 200px;
    background: black;
    position: relative;
    -webkit-transition: all 300ms ease-in;
}
#box:hover {
    -webkit-transform: rotate(-180deg) scale(0.8);
}
#box:after, #box:before {
    display: block;
    content: "\0020";
    color: transparent;
    width: 211px;
    height: 45px;
    background: white;
    position: absolute;
    left: 1px;
    bottom: -20px;
    -webkit-transform: rotate(-12deg);
    -moz-transform: rotate(-12deg);
}
#box:before {
    bottom: auto;
    top: -20px;
    -webkit-transform: rotate(12deg);
    -moz-transform: rotate(12deg);
}​

HTML:

<div id=box></div>​

适用于Chrome和FF 4:http://jsfiddle.net/rudiedirkx/349x9/

这可能有所帮助:http://jsfiddle.net/rudiedirkx/349x9/2880/

还有这个(来自Erwinus的评论):http://css-tricks.com/examples/ShapesOfCSS/


15
这不是歪曲,也不会歪曲内容。 - desau
是的,这是一个hack。它也不能在具有背景颜色/图像的背景下工作:http://jsfiddle.net/rudiedirkx/349x9/411/ - Rudie
content: "\0020"; 是用来做什么的? - W.K.S
20(十六进制,32 十进制)是一个空格。现在可以使用 ""。我认为不需要任何字符。 - Rudie
在这个例子中,我看到两个矩形和一个梯形。如果情况像示例一样,为什么不使用三个形状?http://css-tricks.com/examples/ShapesOfCSS/ - Codebeat

10

2
这应该是一条注释,而不是答案。请不要在问题中发布仅包含链接的答案。 - Blazemonger

6
您可以同时使用-webkit-perspective和-webkit-transform。
<div style="-webkit-perspective:300;">
<div style="-webkit-transform:rotate3d(0, 1, 0, 30deg);width:200px;height:200px;background:#D73913;"></div>
</div>

这只适用于Safari浏览器。


4
请使用以下CSS代码。根据您的需要设置数字即可。
-webkit-transform: translateX(16em) perspective(600px) rotateY(10deg);
-moz-transform: translateX(16em) perspective(600px) rotateY(10deg);
-ms-transform: translateX(16em) perspective(600px) rotateY(10deg);
-o-transform: translateX(16em) perspective(600px) rotateY(10deg);
transform: translateX(16em) perspective(600px) rotateY(10deg);

1

0

另外还有两种方法:

1. 如https://css-tricks.com/examples/ShapesOfCSS/#trapezoid所示,您可以使用border
#box {
  border-left: 200px solid black;
  border-top: 50px solid transparent;
  border-bottom: 50px solid transparent;
  width: 0;
  height: 100px;
}

但它不能有内容,因为它全部都是边框。
示例:http://jsfiddle.net/rudiedirkx/349x9/3112/ 2. 使用 CSS 的实际“倾斜”变换:
#box {
  width: 200px;
  height: 170px;
  margin-top: 30px;
  background-color: black;
  transform: skewY(10deg);
  position: relative;
  z-index: 1; /* doesn't work? */
}
#box:before {
  content: "";
  display: block;
  width: 200px;
  height: 80px;
  position: absolute;
  bottom: -40px;
  left: 0;
  background-color: black;
  transform: skewY(-20deg);
  z-index: -1; /* doesn't work? */
}

然而,我似乎无法将伪元素定位在主要元素后面,因此如果有的话,伪元素实际上会覆盖主要元素的内容。
示例:http://jsfiddle.net/rudiedirkx/349x9/3113/

0
.size{
   width: 200px;
   height: 200px;           
}
.boxContainer{
  -webkit-perspective:100;
}
.box{
  background: blue;
  -webkit-transform-origin-x:0;
  -webkit-transform: rotateY(10deg);
}


    <div class="size boxContainer">
        <div class="size box">

        </div>
    </div>

这对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接