Forme du Triangle avec image de fond

je travaille sur un projet qui demande deux triangles pour contenir les images de fond, et être des liens.

<!-Voici ma maquette pour la façon dont je voudrais les deux triangles.

Triangles with background images

actuellement, je n'ai que deux divs qui couvrent le 900x600 avec chaque triangle comme image de fond. Le problème que j'ai maintenant est que je ne peux pas survoler la partie transparente de la Div cinéma pour atteindre la div photo.

puis-je accomplir cette conception avec CSS3 triangles et de définir leurs images de fond? J'ai toujours pensé que la forme personnalisée était faite d'une bordure, avec une couleur de bordure.

est-il possible de faire avec les triangles css3, et si oui, quelqu'un peut-il m'aider avec le code?

Voici ce que j'ai actuellement.

.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>
19
demandé sur web-tiki 2012-06-10 19:25:56

4 réponses

c'est vraiment facile si vous utilisez des images d'enfants pour les liens plutôt que des images d'arrière-plan. Vous avez juste besoin d'incliner les deux .option des éléments aux origines transformantes différentes, puis dessinent leurs images d'enfant et mettent overflow: hidden sur les deux .pageOption et .option éléments. Le Support est bon, qui devrait fonctionner pour tout sauf IE8/7 et Opera Mini.

DEMO

Résultat:

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;
}
37
répondu Ana 2013-02-15 08:43:42

Voici mes suggestions CSS:

  1. en utilisant toile qui est la balise HTML5 et n'est pas cross browser.
  2. en utilisant SVG. (Plus fiable)
  3. en utilisant CSS3 rotation transition et le couvrir dans un emballage avec débordement caché. Encore n'est pas de la croix-navigateur.

rotation transition:

-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
répondu Tooraj Jam 2012-06-11 12:36:37

Vous pouvez réaliser cette mise en page avec plusieurs approches. Voici un exemple à l'aide d'un inline svg et élément de chemin de clip:

<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>
3
répondu web-tiki 2016-04-13 14:58:46

comme vous l'avez dit, les tringles css3 sont faites de bordures donc vous ne pouvez pas leur attacher des fonds.

je vous suggérerais simplement d'utiliser deux PNG l'un sur l'autre et d'utiliser js pour écouter l'événement de clic et créer l'action correcte basée sur la position de la souris.

il y a aussi une propriété CSS de webkit-mask, mais elle n'est pas prise en charge par d'autres navigateurs (Je l'ai utilisée pour un petit truc de pagination - http://jsfiddle.net/xTNTH/3/ - best on safari [no js uniquement css] - http://snag.gy/7fRNq.jpg)

0
répondu Oren Roth 2012-06-11 12:18:17