全宽的 SkewX() 数学公式(3 个相邻的 div)
SkewX() math formula for full width (3 divs next to each other)
.parent {
height: 500px;
width: 500px;
position: relative;
background: black;
}
.test {
transform: skewX(20deg);
width: 33%;
height: 100%;
position: absolute;
}
.a {
background: purple;
left: 0;
}
.b {
background: green;
left: 33%;
}
.c {
background: orange;
left: 66%;
}
<div class="parent">
<div class="test a"></div>
<div class="test b"></div>
<div class="test c"></div>
</div>
Jsfiddle:http://jsfiddle.net/jksqc1ux/7/
如您所见,由于倾斜,您仍然可以看到 parent 的背景。
所有 3 个 div 都相等,公式是什么才能填充 100% 的 parent(这样您就再也看不到片段代码中的黑色)? parent 个维度可以有不同的值。
我正在寻找类似 .a {left: calc(33% *0.4)}
或类似的东西?
试一试,它必须适合所有尺码:(参见fiddle:http://jsfiddle.net/jksqc1ux/85/)
.parent {
height:500px;
width:500px;
position:relative;
background:black;
overflow:hidden;
}
.test {
transform: skewX(20deg);
width:50%;
height:100%;
position:absolute;
}
.a {
background:purple;
right: 75%;
}
.b {
background:green;
right: 25%;
}
.c {
background:orange;
left: 75%;
}
<div class="parent">
<div class="test a">
</div>
<div class="test b">
</div>
<div class="test c">
</div>
</div>
根据 google,https://www.google.com/search?q=(33%25+%2B+sin(20 度)*33%25),数学显示宽度为 44%,但如果应用于左侧和右侧,这些值会导致中心区域看起来更大偏移量。
Calc 不支持混合单位,因此预计算似乎是一项要求。
.parent {
height:500px;
width:500px;
position:relative;
background:green;
overflow:hidden;
}
.parent::before {
content:'';
background:purple;
height:500px;
width:44%; /* (33% + sin(20 degrees)*33%) = 44% */
transform: skewX(20deg);
position:absolute;
left:-18%;
}
.parent::after {
content:'';
height:500px;
width:44%;
transform: skewX(20deg);
position:absolute;
background:orange;
right:-18%;
}
<div class="parent">
</div>
首先,将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>
.parent {
height: 500px;
width: 500px;
position: relative;
background: black;
}
.test {
transform: skewX(20deg);
width: 33%;
height: 100%;
position: absolute;
}
.a {
background: purple;
left: 0;
}
.b {
background: green;
left: 33%;
}
.c {
background: orange;
left: 66%;
}
<div class="parent">
<div class="test a"></div>
<div class="test b"></div>
<div class="test c"></div>
</div>
Jsfiddle:http://jsfiddle.net/jksqc1ux/7/
如您所见,由于倾斜,您仍然可以看到 parent 的背景。 所有 3 个 div 都相等,公式是什么才能填充 100% 的 parent(这样您就再也看不到片段代码中的黑色)? parent 个维度可以有不同的值。
我正在寻找类似 .a {left: calc(33% *0.4)}
或类似的东西?
试一试,它必须适合所有尺码:(参见fiddle:http://jsfiddle.net/jksqc1ux/85/)
.parent {
height:500px;
width:500px;
position:relative;
background:black;
overflow:hidden;
}
.test {
transform: skewX(20deg);
width:50%;
height:100%;
position:absolute;
}
.a {
background:purple;
right: 75%;
}
.b {
background:green;
right: 25%;
}
.c {
background:orange;
left: 75%;
}
<div class="parent">
<div class="test a">
</div>
<div class="test b">
</div>
<div class="test c">
</div>
</div>
根据 google,https://www.google.com/search?q=(33%25+%2B+sin(20 度)*33%25),数学显示宽度为 44%,但如果应用于左侧和右侧,这些值会导致中心区域看起来更大偏移量。
Calc 不支持混合单位,因此预计算似乎是一项要求。
.parent {
height:500px;
width:500px;
position:relative;
background:green;
overflow:hidden;
}
.parent::before {
content:'';
background:purple;
height:500px;
width:44%; /* (33% + sin(20 degrees)*33%) = 44% */
transform: skewX(20deg);
position:absolute;
left:-18%;
}
.parent::after {
content:'';
height:500px;
width:44%;
transform: skewX(20deg);
position:absolute;
background:orange;
right:-18%;
}
<div class="parent">
</div>
首先,将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>