平行四边形内的图像

Image inside a parallelogram

我有多个图像需要像这样的平行四边形形状:

它们应该包含在 div 元素中,在轮播中,link 到视频页面。但是,由于透明区域,使用常规图像会导致 link 出现边界框问题。

哪个 CSS 属性 用于将图像转换为如上例所示的平行四边形形状?

由于我误解了 OP,我将使用 fiddle 编辑答案。是的,skew 会完全扭曲 div,这也会扭曲图像。所以只有 'deskew' 具有相反倾斜的图像:

.wrapper {
  padding: 100px;
}
.skewed {
  width: 120px;
  height: 120px;
  -webkit-transform: skewX(-50deg);
  -ms-transform: skewX(-50deg);
  transform: skewX(-50deg);
  overflow: hidden;
  text-align: center;
  position: relative;
}
.skewed img {
  -webkit-transform: skewX(50deg);
  -ms-transform: skewX(50deg);
  transform: skewX(50deg);
  position: absolute;
  top: -87px;
  left: -90px;
}
<div class="wrapper">
  <div class="skewed">
    <img src="http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2009/03/car.jpg" alt="car" />
  </div>
</div>

变换中有一种方法可以使对象倾斜。您唯一需要注意的是 div 中的所有内容也会倾斜。所以你必须申请两次。一次将 div 倾斜一定度数,然后再次将内部图片向相反方向倾斜。

例如,如果您对 div 执行此操作: transform: skewX(10deg);

您必须对图片执行此操作: transform: skewX(-10deg);

这里有一个 link 可以阅读更多关于 transform 的内容 - 因为还有更多内容。

您可以使用图像获得 平行四边形 并使用至少 2 种不同的方法保持 link 形状的边界:

CSS 变换

有一个 div 和一个伪元素。图像被添加为伪元素的背景。 div是倾斜的,伪元素是不倾斜的:

a{
  display:block;
  position:relative;
  width:20%;
  padding-bottom:25%;
  transform-origin:0 100%;
  transform:skewX(-30deg) translatez(1px);
  overflow:hidden;
}
a:before{
  content:'';
  position:absolute;
  width:175%; height:100%;
  background-image:url('http://i.imgur.com/kreZqnx.jpg');
  background-size:cover;
  background-position:center;
  transform-origin:inherit;
  transform:skewX(30deg);
}
<a href="#"></a>

请注意,您需要将供应商前缀添加到 transform 和 transform origin 属性以支持浏览器(有关 canIuse 的更多信息)。

内联 SVG

此方法使用 polygon element for the parallelogram shape and a pattern element 用图像填充形状:

svg{display:block;width:30%;height:auto;}
<svg viewbox="0 0 10 10">
  <pattern id="image" width="10" height="10" patternUnits="userSpaceOnUse">
    <image xlink:href="http://i.imgur.com/kreZqnx.jpg" x="-1" y="-1" height="12" width="12" />
  </pattern>
  <a xlink:href="#">
    <polygon points="0 10 4 0 10 0 6 10" fill="url(#image)" />
  </a>
</svg>