24

背景画像を保持し、リンクする 2 つの三角形を必要とするプロジェクトに取り組んでいます。

これは、2 つの三角形をどのように使用するかについての私のモックアップです。

背景画像付きの三角形

現在、各三角形を背景画像として 900x600 にまたがる 2 つの div しかありません。私が今抱えている問題は、シネマ 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>

4

5 に答える 5

42

背景画像の代わりにリンクに子画像を使用すると、非常に簡単です。変換元が異なる2 つの.option要素を傾斜させ、子画像の傾斜を解除し、overflow: hidden両方.pageOption.option要素に設定するだけです。サポートは良好で、IE8/7 と Opera Mini 以外のすべてで動作するはずです。

デモ

結果:

三角形の画像

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;
}
于 2013-02-15T06:44:31.573 に答える
6

このレイアウトは、いくつかのアプローチで実現できます。インライン svgclip-path 要素を使用した例を次に示します。

<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>

于 2016-04-13T14:58:46.273 に答える
3

これが私のCSSの提案です:

  1. HTML5タグでクロスブラウザでないcanvasを使用。
  2. SVGの使用。(最も信頼できるもの)
  3. CSS3 回転トランジションを使用して、オーバーフローを隠したラッパーでカバーします。繰り返しますが、クロスブラウザではありません。

回転遷移:

-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');
于 2012-06-11T12:36:37.913 に答える
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>

于 2021-01-17T11:02:07.007 に答える
0

あなたが言ったように、css3トリングルは境界線でできているので、背景を付けることはできません。

クリックイベントをリッスンし、マウスの位置に基づいて正しいアクションを作成するために、2つのPNGを重ねて使用し、jsを使用することをお勧めします。

webkit-mask cssプロパティもありますが、他のブラウザではサポートされていません(私は、ページのピリングのトリックに使用しました-http ://jsfiddle.net/xTNTH/3/--safariに最適[jsのみcss]- http://snag.gy/7fRNq.jpg

于 2012-06-11T12:18:17.023 に答える