css 使用渐变颜色和多个 div 构建的彩虹
css rainbow built using gradient colors and multiple divs
与这个问题相关
有没有办法通过使用多个 divs
而不是一个来做到这一点?
您可能会问,为什么只用一个就可以做到这一点,出于教育目的。
这就是我所做的,但看起来不太好。
任何想法将不胜感激。
.mainDiv {
display: inline-block;
}
.rainbow1 {
height: 100px;
width: 55px;
background: linear-gradient(78deg, red 5%, transparent 7%);
float: left;
}
.rainbow2 {
height: 100px;
width: 55px;
background: linear-gradient(72deg, orange 12%, transparent 14%);
float: left;
}
<div class="mainDiv">
<div class="rainbow1"></div>
<div class="rainbow2"></div>
</div>
我使用了 float:right
并使用宽度来均衡列。根据您的参考示例,使用相同的渐变。希望对您有所帮助。
.mainDiv {
clear: both;
}
.rainbow1 {
background: linear-gradient(78deg, red 5%, transparent 7%), linear-gradient(69deg, orange 10%, transparent 12%), linear-gradient(60deg, yellow 15%, transparent 17%), linear-gradient(51deg, green 20%, transparent 22%);
width: 50%;
float: left;
height: 100px;
}
.rainbow2 {
background: linear-gradient(43deg, blue 25%, transparent 27%), linear-gradient(35deg, indigo 30%, transparent 32%), linear-gradient(28deg, violet 35%, transparent 37%);
width: 50%;
height: 100px;
}
<div class="mainDiv">
<div class="rainbow1"></div>
<div class="rainbow2"></div>
</div>
三列 的更新代码为width:33%
。附上代码片段供您参考。
.mainDiv {
clear: both;
position: relative;
}
.rainbow1 {
background: linear-gradient(78deg, red 5%, transparent 7%), linear-gradient(69deg, orange 10%, transparent 12%), linear-gradient(60deg, yellow 15%, transparent 17%);
height: 100px;
width: 33%;
position: relative;
z-index: 2;
}
.rainbow2 {
background: linear-gradient(51deg, green 20%, transparent 22%), linear-gradient(43deg, blue 25%, transparent 27%);
height: 100px;
width: 33%;
position: absolute;
top: 0;
left: 0;
z-index: 1;
}
.rainbow3 {
background: linear-gradient(35deg, indigo 30%, transparent 32%), linear-gradient(28deg, violet 35%, transparent 37%);
height: 100px;
width: 33%;
position: absolute;
top: 0;
left: 0;
}
<div class="mainDiv">
<div class="rainbow1"></div>
<div class="rainbow2"></div>
<div class="rainbow3"></div>
</div>
既然你要考虑多个div,我就去掉渐变,考虑skew transform和solid background color来重叠。
这里有 3 个 div:
.rainbow {
position:relative;
width:200px;
height:100px;
}
.rainbow > div {
position:absolute;
top:0;
bottom:0;
width:100%;
right:100%;
transform-origin:top;
}
.rainbow > div:nth-last-child(1) {
background:red;
transform:skewX(8deg);
}
.rainbow > div:nth-last-child(2) {
background:blue;
transform:skewX(16deg);
}
.rainbow > div:nth-last-child(3) {
background:yellow;
transform:skewX(24deg);
}
body {
margin: 0;
}
<div class="rainbow">
<div></div>
<div></div>
<div></div>
</div>
您可以轻松缩放到任意数量的 div。
.rainbow {
position:relative;
width:200px;
height:100px;
}
.rainbow > div {
position:absolute;
top:0;
bottom:0;
width:100%;
right:100%;
transform-origin:top;
}
.rainbow > div:nth-last-child(1) {
background:red;
transform:skewX(8deg);
}
.rainbow > div:nth-last-child(2) {
background:blue;
transform:skewX(16deg);
}
.rainbow > div:nth-last-child(3) {
background:yellow;
transform:skewX(24deg);
}
.rainbow > div:nth-last-child(4) {
background:pink;
transform:skewX(32deg);
}
.rainbow > div:nth-last-child(5) {
background:purple;
transform:skewX(40deg);
}
body {
margin: 0;
}
<div class="rainbow">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
要实现褪色,您可以考虑使用 blur
过滤器:
.rainbow {
position:relative;
width:200px;
height:100px;
overflow:hidden;
}
.rainbow > div {
position:absolute;
top:0;
bottom:-5px;
width:100%;
right:100%;
transform-origin:top;
filter:blur(2px);
}
.rainbow > div:nth-last-child(1) {
background:red;
transform:skewX(8deg);
}
.rainbow > div:nth-last-child(2) {
background:blue;
transform:skewX(16deg);
}
.rainbow > div:nth-last-child(3) {
background:yellow;
transform:skewX(24deg);
}
.rainbow > div:nth-last-child(4) {
background:pink;
transform:skewX(32deg);
}
.rainbow > div:nth-last-child(5) {
background:purple;
transform:skewX(40deg);
}
body {
margin: 0;
}
<div class="rainbow">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
这是一个示例:
- 多个 div
- 带边框的三角形
- 具有不同宽度的形状彼此重叠,其 z-index 相应调整
div[class*="rainbow"] {
width: 0;
height: 0;
border-style: solid;
position: absolute;
}
.rainbowRed {
border-width: 200px 0 0 20px;
border-color: transparent transparent transparent red;
z-index: 7;
}
.rainbowOrange {
border-width: 200px 0 0 40px;
border-color: transparent transparent transparent orange;
z-index: 6;
}
.rainbowYellow {
border-width: 200px 0 0 70px;
border-color: transparent transparent transparent yellow;
z-index: 5;
}
.rainbowGreen {
border-width: 200px 0 0 110px;
border-color: transparent transparent transparent green;
z-index: 4;
}
.rainbowBlue {
border-width: 200px 0 0 160px;
border-color: transparent transparent transparent blue;
z-index: 3;
}
.rainbowIndigo {
border-width: 200px 0 0 220px;
border-color: transparent transparent transparent indigo;
z-index: 2;
}
.rainbowViolet {
border-width: 200px 0 0 290px;
border-color: transparent transparent transparent violet;
z-index: 1;
}
<div class="rainbowRed"></div>
<div class="rainbowOrange"></div>
<div class="rainbowYellow"></div>
<div class="rainbowGreen"></div>
<div class="rainbowBlue"></div>
<div class="rainbowIndigo"></div>
<div class="rainbowViolet"></div>
与这个问题相关
有没有办法通过使用多个 divs
而不是一个来做到这一点?
您可能会问,为什么只用一个就可以做到这一点,出于教育目的。
这就是我所做的,但看起来不太好。
任何想法将不胜感激。
.mainDiv {
display: inline-block;
}
.rainbow1 {
height: 100px;
width: 55px;
background: linear-gradient(78deg, red 5%, transparent 7%);
float: left;
}
.rainbow2 {
height: 100px;
width: 55px;
background: linear-gradient(72deg, orange 12%, transparent 14%);
float: left;
}
<div class="mainDiv">
<div class="rainbow1"></div>
<div class="rainbow2"></div>
</div>
我使用了 float:right
并使用宽度来均衡列。根据您的参考示例,使用相同的渐变。希望对您有所帮助。
.mainDiv {
clear: both;
}
.rainbow1 {
background: linear-gradient(78deg, red 5%, transparent 7%), linear-gradient(69deg, orange 10%, transparent 12%), linear-gradient(60deg, yellow 15%, transparent 17%), linear-gradient(51deg, green 20%, transparent 22%);
width: 50%;
float: left;
height: 100px;
}
.rainbow2 {
background: linear-gradient(43deg, blue 25%, transparent 27%), linear-gradient(35deg, indigo 30%, transparent 32%), linear-gradient(28deg, violet 35%, transparent 37%);
width: 50%;
height: 100px;
}
<div class="mainDiv">
<div class="rainbow1"></div>
<div class="rainbow2"></div>
</div>
三列 的更新代码为width:33%
。附上代码片段供您参考。
.mainDiv {
clear: both;
position: relative;
}
.rainbow1 {
background: linear-gradient(78deg, red 5%, transparent 7%), linear-gradient(69deg, orange 10%, transparent 12%), linear-gradient(60deg, yellow 15%, transparent 17%);
height: 100px;
width: 33%;
position: relative;
z-index: 2;
}
.rainbow2 {
background: linear-gradient(51deg, green 20%, transparent 22%), linear-gradient(43deg, blue 25%, transparent 27%);
height: 100px;
width: 33%;
position: absolute;
top: 0;
left: 0;
z-index: 1;
}
.rainbow3 {
background: linear-gradient(35deg, indigo 30%, transparent 32%), linear-gradient(28deg, violet 35%, transparent 37%);
height: 100px;
width: 33%;
position: absolute;
top: 0;
left: 0;
}
<div class="mainDiv">
<div class="rainbow1"></div>
<div class="rainbow2"></div>
<div class="rainbow3"></div>
</div>
既然你要考虑多个div,我就去掉渐变,考虑skew transform和solid background color来重叠。
这里有 3 个 div:
.rainbow {
position:relative;
width:200px;
height:100px;
}
.rainbow > div {
position:absolute;
top:0;
bottom:0;
width:100%;
right:100%;
transform-origin:top;
}
.rainbow > div:nth-last-child(1) {
background:red;
transform:skewX(8deg);
}
.rainbow > div:nth-last-child(2) {
background:blue;
transform:skewX(16deg);
}
.rainbow > div:nth-last-child(3) {
background:yellow;
transform:skewX(24deg);
}
body {
margin: 0;
}
<div class="rainbow">
<div></div>
<div></div>
<div></div>
</div>
您可以轻松缩放到任意数量的 div。
.rainbow {
position:relative;
width:200px;
height:100px;
}
.rainbow > div {
position:absolute;
top:0;
bottom:0;
width:100%;
right:100%;
transform-origin:top;
}
.rainbow > div:nth-last-child(1) {
background:red;
transform:skewX(8deg);
}
.rainbow > div:nth-last-child(2) {
background:blue;
transform:skewX(16deg);
}
.rainbow > div:nth-last-child(3) {
background:yellow;
transform:skewX(24deg);
}
.rainbow > div:nth-last-child(4) {
background:pink;
transform:skewX(32deg);
}
.rainbow > div:nth-last-child(5) {
background:purple;
transform:skewX(40deg);
}
body {
margin: 0;
}
<div class="rainbow">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
要实现褪色,您可以考虑使用 blur
过滤器:
.rainbow {
position:relative;
width:200px;
height:100px;
overflow:hidden;
}
.rainbow > div {
position:absolute;
top:0;
bottom:-5px;
width:100%;
right:100%;
transform-origin:top;
filter:blur(2px);
}
.rainbow > div:nth-last-child(1) {
background:red;
transform:skewX(8deg);
}
.rainbow > div:nth-last-child(2) {
background:blue;
transform:skewX(16deg);
}
.rainbow > div:nth-last-child(3) {
background:yellow;
transform:skewX(24deg);
}
.rainbow > div:nth-last-child(4) {
background:pink;
transform:skewX(32deg);
}
.rainbow > div:nth-last-child(5) {
background:purple;
transform:skewX(40deg);
}
body {
margin: 0;
}
<div class="rainbow">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
这是一个示例:
- 多个 div
- 带边框的三角形
- 具有不同宽度的形状彼此重叠,其 z-index 相应调整
div[class*="rainbow"] {
width: 0;
height: 0;
border-style: solid;
position: absolute;
}
.rainbowRed {
border-width: 200px 0 0 20px;
border-color: transparent transparent transparent red;
z-index: 7;
}
.rainbowOrange {
border-width: 200px 0 0 40px;
border-color: transparent transparent transparent orange;
z-index: 6;
}
.rainbowYellow {
border-width: 200px 0 0 70px;
border-color: transparent transparent transparent yellow;
z-index: 5;
}
.rainbowGreen {
border-width: 200px 0 0 110px;
border-color: transparent transparent transparent green;
z-index: 4;
}
.rainbowBlue {
border-width: 200px 0 0 160px;
border-color: transparent transparent transparent blue;
z-index: 3;
}
.rainbowIndigo {
border-width: 200px 0 0 220px;
border-color: transparent transparent transparent indigo;
z-index: 2;
}
.rainbowViolet {
border-width: 200px 0 0 290px;
border-color: transparent transparent transparent violet;
z-index: 1;
}
<div class="rainbowRed"></div>
<div class="rainbowOrange"></div>
<div class="rainbowYellow"></div>
<div class="rainbowGreen"></div>
<div class="rainbowBlue"></div>
<div class="rainbowIndigo"></div>
<div class="rainbowViolet"></div>