是否可以在 CSS 中将DIV
创建为{{1}}。
浏览器支持并不重要。
答案 0 :(得分:4)
你不能直接扭曲这样的元素,你需要使用两个元素(或生成的内容)并隐藏某些溢出来制作平底边缘:
#skew {
height: 240px;
overflow: hidden;
}
.skew {
background: #000;
display: inline-block;
height: 300px;
width: 500px;
margin-top: 100px;
transform: skew(-8deg, -8deg);
}
注意:我删除了跨浏览器定义以提高可读性。
更新:这将是一个更具流动性的示例,它在设定的维度中调整大小:http://jsfiddle.net/6DQUY/3/。请注意包装纸上的填充底部,它定义了比率。您可能需要使用百分比金额。
#skew {
padding-bottom: 20%;
overflow: hidden;
position: relative;
}
.skew {
background: #000;
position: absolute;
top: 30%;
right: 8%;
left: 8%;
height: 100%;
transform: skew(-8deg, -8deg);
}
答案 1 :(得分:4)
使用SVG:
以下是使用SVG polygon
的示例,该示例也可以轻松扩展。文本(如果需要)可以绝对定位在形状的顶部。
.shape-svg {
position: relative;
height: 100px;
width: 300px;
}
svg {
position: absolute;
top: 0px;
left: 0px;
height: 100%;
width: 100%;
}
polygon {
fill: black;
}
/* Just for demo*/
.shape-svg{
transition: all 1s;
}
.shape-svg:hover {
height: 200px;
width: 600px;
}

<div class="shape-svg">
<svg viewBox='0 0 100 100' preserveAspectRatio='none'>
<polygon points='5,35 100,0 95,100 0,100' />
</svg>
</div>
&#13;
可以使用SVG剪辑路径而不是多边形创建形状。
使用CSS和单个元素:
CSS也只使用一个元素就可以实现相同的形状。关键是将transform-origin
设置为需要直线的一面。
.shape{
height: 100px;
width: 300px;
margin-top: 50px;
background: black;
transform-origin: 0% bottom;
transform: perspective(300px) rotateY(-15deg) skewX(-10deg);
transition: all 1s;
}
.shape:hover{
width: 350px;
height: 150px;
transform: perspective(450px) rotateY(-15deg) skewX(-10deg);
}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div class="shape"></div>
&#13;
使用此方法实现的形状也可以缩放。然而,随着形状的高度增加,右侧变得更高并且将右上角推得更高。因此,要么需要减小旋转角度(或)需要增加透视角度(需要将形状移动得更远),使得右侧的高度保持足够小并且在观察区域内。否则,应该增加保证金顶部。
下面解释了为什么会发生这种情况:
0%
,因此形状左侧的高度将保持不变,右侧的高度将根据旋转角度保持增加。 如果仅因为旋转角度太小而宽度增加而没有这样的问题,那么形状的右侧将永远不会到达观察者看得很高的任何地方。
有问题的形状与所讨论的形状不完全相同here但你可以通过观察它来获得更多的想法:)
答案 2 :(得分:1)
您可以查看CSS转换(transform
)我已经使用快速示例创建了JsFiddle。
<强> HTML 强>
<div class="skew"></div>
<强> CSS 强>
/* Skew the container one way */
.skew {
background: #000;
display: inline-block;
height: 50px;
width: 500px;
margin-top: 100px;
-webkit-transform: skewY(-5deg);
-moz-transform: skewY(-5deg);
-ms-transform: skewY(-5deg);
-o-transform: skewY(-5deg);
transform: skewY(-5deg);
}
注:
您可能需要包含其他转换才能获得不平衡的外观。
<强> - 编辑 - 强>
这是另一种解决方案,但使用:before
和:after
CSS。 JsFiddle