Галерея изображений неправильных треугольников HTML и CSS - PullRequest
2 голосов
/ 20 мая 2019

Мне нужно создать галерею изображений, в которой отдельные изображения представляют собой неправильные треугольники (акцент на неправильные).

Я нашел ограниченные примеры того, как получить изображения треугольников с помощью HTML и CSS, не модифицируя изображениясамих себя.Один пример, который я нашел в этом CodePen https://codepen.io/thebabydino/pen/liDCz, был шагом в правильном направлении, но, глядя на него, я не могу найти способ сделать изображения неправильными треугольниками.

Результатом я являюсья пытаюсь добиться этого: Image section

  <div class='pageOption'>
      <a href='#' class='option'>
          <img src='~/images/team/pic_paggas/A.png'>
      </a>
      <a href='#' class='option'>
          <img src='~/images/team/pic_paggas/D.png'>
      </a>
   </div>

Это основной HTML, который я буду использовать, а CSS:

.pageOption {
    overflow: hidden;
    position: relative;
    margin: 0 auto;
    width: 40em;
    height: 27em;
}

.option, .option img {
   width: 100%;
   height: 100%;
}

.option {
    overflow: hidden;
    position: absolute;
    transform: skewX(-55.98deg);
}

.option:first-child {
    left: -.25em;
    transform-origin: 100% 0;
}

.option:last-child {
    right: -.25em;
    transform-origin: 0 100%;
}

.option img {
    opacity: .75;
    transition: .5s;
}

    .option img:hover {
        opacity: 1;
    }

.option img, .option:after {
    transform: skewX(55.98deg);
    transform-origin: inherit;
}

Помните, что HTML и CSS, которые у меня есть, могутне быть оптимальным для моей проблемы.Я думаю, что форма изображений, которые я использую (прямоугольная), как-то связана с этим.

Было бы лучше, если бы решение лучше поддерживалось во всех браузерах.

1 Ответ

1 голос
/ 20 мая 2019

Вы можете сделать это с перекосом, как показано ниже, если вы не можете использовать clip-path:

.box {
  overflow: hidden;
  width: 200px;
  height: 200px;
  display:inline-block;
}

.triangle {
  width: 100%;
  height: 100%;
  transform: skewX(-20deg) skewY(45deg); /* 27deg instead of 20deg to have a regular triangle */
  transform-origin: bottom left;
  overflow: hidden;
  background-size:0 0;
}
.triangle.bottom {
  transform-origin: top right;
}

.triangle:before {
  content: "";
  display: block;
  width: inherit;
  height: inherit;
  background-image: inherit;
  background-size:cover;
  background-position:center;
  transform: skewY(-45deg) skewX(20deg); /* We invert order AND signs*/
  transform-origin: inherit;
}

.triangle:hover {
 filter:grayscale(100%);
}

.adjust {
  margin-left:-120px;
}

body {
 background:#f2f2f2;
}
<div class="box">
  <div class="triangle" style="background-image:url(https://picsum.photos/id/155/1000/800)"></div>
</div>

<div class="box adjust">
  <div class="triangle bottom" style="background-image:url(https://picsum.photos/id/159/1000/800)"></div>
</div>
...