与背景图象的三角形状

时间:2012-06-10 15:25:57

标签: css css3 svg css-shapes

我正在开发一个项目,需要两个三角形来保存背景图像,并且是链接。

这是我想要的两个三角形的模拟。

Triangles with background images

目前,我只有两个跨越900x600的div,每个三角形作为背景图像。我现在遇到的问题是我不能将鼠标悬停在Cinema div的透明部分上以达到照片div。

我可以使用css3三角形完成此设计并设置其背景图像吗?我一直认为自定义形状由边框组成,边框颜色。

是否可以使用css3三角形,如果可以,有人可以帮助我使用代码吗?

这是我现在拥有的。

.pageOption {
  position: relative;
  width: 900px;
  height: 600px;
}
.pageOption .photo {
  position: absolute;
  top: 0px;
  left: 0px;
  width: 900px;
  height: 600px;
  background: url('../images/menuPhoto.png') no-repeat 0 0;
}
.pageOption .cinema {
  position: absolute;
  bottom: 0px;
  right: 0px;
  width: 900px;
  height: 600px;
  background: url('../images/menuCinema.png') no-repeat 0 0;
}
<div class="pageOption">
  <a href="#" class="option photo" id="weddingPhoto"></a>
  <a href="#" class="option cinema" id="weddingCinema"></a>
</div>

5 个答案:

答案 0 :(得分:38)

如果您使用子图像作为链接而不是背景图像,这真的很容易。您只需要使用不同的转换源来扭曲两个.option元素,然后取消其子图像的偏移,并在overflow: hidden.pageOption元素上设置.option。支持很好,应该适用于除IE8 / 7和Opera Mini之外的所有内容。

DEMO

<强>结果

triangle images

<强> HTML

<div class='pageOption'>
  <a href='#' class='option' data-inf='photo'>
    <img src='../images/menuPhoto.png'>
  </a>
  <a href='#' class='option' data-inf='cinema'>
    <img src='../images/menuCinema.png'>
  </a>
</div>

相关的 CSS

.pageOption {
  overflow: hidden;
  position: relative;
  width: 40em; height: 27em;
}
.option, .option img { width: 100%; height: 100%; }
.option {
  overflow: hidden;
  position: absolute;  
  /* arctan(27 / 40) = 34.01935deg 
   * need to skew by 90deg - 34.01935deg = 55.98065deg
  */
  transform: skewX(-55.98deg);
}
.option:first-child {
  left: -.25em;
  transform-origin: 100% 0;
}
.option:last-child {
  right: -.25em;
  transform-origin: 0 100%;
}
.option img {
  transform: skewX(55.98deg);
  transform-origin: inherit;
}

答案 1 :(得分:5)

您可以通过多种方法实现此布局。以下是使用inline svgclip-path element

的示例

<svg viewbox="0 0 10 6.7">
  <defs>
    <clipPath id="top">
      <polygon points="0 0, 9.9 0, 0 6.6" />
    </clipPath>
    <clipPath id="bottom">
      <polygon points="10 0.1, 10 6.7, 0.1 6.7" />
    </clipPath>
  </defs>
  <image xlink:href="http://i.imgur.com/RECDV24.jpg" x="0" y="0" height="6.7" width="10" clip-path="url(#top)"/>
  <image xlink:href="http://i.imgur.com/5NK0H1e.jpg" x="0" y="0" height="6.7" width="10" clip-path="url(#bottom)"/>
</svg>

答案 2 :(得分:3)

以下是我的CSS建议:

  1. 使用HTML {0}标记的canvas并且不是跨浏览器。
  2. 使用SVG。 (最可靠的一个)
  3. 使用CSS3旋转过渡并将其覆盖在具有隐藏溢出的包装中。再次不是跨浏览器。
  4. 轮换过渡:

    -webkit-transform: rotate(7.5deg);  /* Saf3.1+, Chrome 
       -moz-transform: rotate(7.5deg);  /* FF3.5+ 
        -ms-transform: rotate(7.5deg);  /* IE9 
         -o-transform: rotate(7.5deg);  /* Opera 10.5 
            transform: rotate(7.5deg);
               filter: progid:DXImageTransform.Microsoft.Matrix(/* IE6–IE9 
                       M11=0.9914448613738104, M12=-0.13052619222005157,M21=0.13052619222005157, M22=0.9914448613738104, sizingMethod='auto expand');
    

答案 3 :(得分:1)

使用 CSS clip-path

的响应式创意

.pageOption {
  height: 100vh;
  position: relative;
}

.pageOption .photo {
  position: absolute;
  top: 0;
  left: 0;
  right: 5px;
  bottom: 5px;
  background: url('https://picsum.photos/id/1068/900/900') center/cover;
  clip-path: polygon(0 0, 100% 0, 0 100%);
}

.pageOption .cinema {
  position: absolute;
  top: 5px;
  left: 5px;
  right: 0;
  bottom: 0;
  background: url('https://picsum.photos/id/1055/900/900') center/cover;
  clip-path: polygon(100% 100%, 100% 0, 0 100%);
}
.pageOption a:hover {
  filter:grayscale(1);
}

body {
  margin: 0;
}
<div class="pageOption">
  <a href="#" class="option photo" ></a>
  <a href="#" class="option cinema"></a>
</div>

答案 4 :(得分:0)

正如你所说,css3 tringles是由边框组成的,因此你无法为它们添加背景。

我建议你只使用两个PNG并使用js来听取click事件并根据鼠标位置创建正确的动作。

还有一个webkit-mask css属性,但它在其他浏览器中非常不受支持(我用它来进行一些小页面起球技巧 - http://jsfiddle.net/xTNTH/3/ - 最好用于safari [no js only css] - {{3} })