Сначала настройте transform-origin
на bottom left
, чтобы упростить его, и вы получите результат, показанный на рисунке ниже.
Затем вам нужно отрегулировать свойства width и left на величину X
, чтобы покрыть всю область. Для вычисления X
необходимо использовать формулу: tan(deg) = X / height
(X = height * tan(deg)
), где deg
- это степень, используемая для перекоса, а height
- высота родительского элемента. Поскольку у вас есть 3 элемента, эту сумму нужно разделить между ними, чтобы всегда сохранять одинаковую ширину.
Я добавил некоторую непрозрачность, чтобы вы могли видеть, что все элементы соответствуют ширине родительского контейнера:
.parent {
height:500px;
width:500px;
margin:auto;
position:relative;
background:black;
}
.test {
transform: skewX(20deg);
--X:calc(0.364 * 500px); /*tan(20deg) ~ 0.364*/
transform-origin:bottom left;
width:calc(calc(100%/3) + calc(var(--X)/3));
height:100%;
position:absolute;
opacity:0.8;
}
.a {
background:purple;
left:0;
}
.b {
background:green;
left:calc(calc(100%/3) + calc(var(--X)/3));
}
.c {
background:orange;
left:calc(calc(2*100%/3) + calc(2 * var(--X)/3));
}
<div class="parent">
<div class="test a">
</div>
<div class="test b">
</div>
<div class="test c">
</div>
</div>
Другой способ получить аналогичный эффект с меньшим количеством кода - использовать градиент:
.parent {
height:500px;
width:500px;
margin:auto;
position:relative;
background:
linear-gradient(70deg, purple 0,purple 33%, green 33%, green 66%,orange 66%,orange 100%);
}
<div class="parent">
</div>