使用背景颜色的多色圆形div?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用背景颜色的多色圆形div?相关的知识,希望对你有一定的参考价值。
我正在尝试在CSS中创建一个多色圆圈以模拟一个幸运之轮,我尝试使用线性渐变但它只是应用垂直穿过圆形div的颜色条而不是像有切割的那样是彩色区域如果这是有意义的披萨?
这是我试过的代码:
background: -moz-linear-gradient(left, red, red 20%, blue 20%, blue);
结果如下:
但我希望它看起来更像这样?:
这在CSS中是否可行,或者我将不得不使用背景图像(我宁愿避免使用它,因为它不像页面调整大小那么容易缩放等等。)?
答案
您可以使用边框进行此操作:
.chart {
position: absolute;
width: 0;
height: 0;
border-radius: 60px;
-moz-border-radius: 60px;
-webkit-border-radius: 60px;
}
#chart1 {
border-right: 60px solid red;
border-top: 60px solid transparent;
border-left: 60px solid transparent;
border-bottom: 60px solid transparent;
}
#chart2 {
border-right: 60px solid transparent;
border-top: 60px solid green;
border-left: 60px solid transparent;
border-bottom: 60px solid transparent;
}
#chart3 {
border-right: 60px solid transparent;
border-top: 60px solid transparent;
border-left: 60px solid blue;
border-bottom: 60px solid transparent;
}
#chart4 {
border-right: 60px solid transparent;
border-top: 60px solid transparent;
border-left: 60px solid transparent;
border-bottom: 60px solid yellow;
}
<div id="chart1" class="chart"></div>
<div id="chart2" class="chart"></div>
<div id="chart3" class="chart"></div>
<div id="chart4" class="chart"></div>
另一答案
有一些东西的解决方案是考虑旋转线性渐变来使用多个背景层。我们也可以依靠伪元素和一些透明的颜色。
然后只需调整颜色的度数,颜色,不透明度和伪元素的位置即可获得所需的任何图表:
.circle {
margin: 20px;
width: 200px;
height: 200px;
border-radius: 50%;
background:
linear-gradient(to right, rgba(255,0,0,0.5) 50%, yellow 0%),
linear-gradient(-110deg, black 50%, pink 0%);
position: relative;
overflow: hidden;
}
.circle:after,
.circle:before{
content: "";
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
.circle:after {
background: linear-gradient(-45deg, rgba(255, 180, 180, 0.5) 50%, transparent 0%);
bottom: 50%;
left: 50%;
}
.circle:before {
background:
linear-gradient(0deg, rgba(128, 169, 170, 0.5) 50%, transparent 0%),
linear-gradient(50deg, rgba(0, 169, 170, 1) 50%, transparent 0%);
}
<div class="circle"></div>
另一答案
它可以使用一种叫做圆锥渐变的东西来完成。不幸的是,目前很多浏览器都不支持它们。 Lea Verou创建了一个轻量级的JS插件,但可以使用它们:
https://leaverou.github.io/conic-gradient/
这可以用来创建:
.elem {
width: 200px;
height: 200px;
background: conic-gradient(yellow 8.3%, greenyellow 0 16.6%, green 0 24.9%, darkgreen 0 33.2%, blue 0 41.5%, violet 0 49.8%, purple 0 58.1%, pink 0 66.4%, red 0 74.7%, orangered 0 83%, orange 0 91.3%, gold 0 100%);
border-radius: 50%
}
<script src="//cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<script src="//cdn.rawgit.com/LeaVerou/conic-gradient/gh-pages/conic-gradient.js"></script>
<div class="elem"></div>
另一答案
扩展@Temani Afif的答案,但更类似于您的要求:
.test {
width: 600px;
height: 600px;
border-radius: 50%;
background-size: 50% 50%;
background-repeat: no-repeat;
background-image: linear-gradient(150deg, transparent 63%, tomato 63%),
linear-gradient(120deg, transparent 36.5%, red 36.5%),
linear-gradient(fuchsia, fuchsia),
linear-gradient(240deg, transparent 63%, green 63%),
linear-gradient(210deg, transparent 36.5%, lime 36.5%),
linear-gradient(lightgreen, lightgreen),
linear-gradient(330deg, transparent 63%, blue 63%),
linear-gradient(300deg, transparent 36.5%, lightblue 36.5%),
linear-gradient(cyan, cyan),
linear-gradient(60deg, transparent 63%, papayawhip 63%),
linear-gradient(30deg, transparent 36.5%, yellow 36.5%),
linear-gradient(gold, gold);
background-position: right top, right top, right top,
right bottom, right bottom, right bottom,
left bottom, left bottom, left bottom,
left top, left top, left top;
}
<div class="test"></div>
另一答案
您可以使用css实现此目的,但是如果您想要12个切片,则必须使用更复杂的标记。如果您只想使用4或8,则可以使用多个背景的更简单的解决方案。
- 使用border-radius和skew-trick绘制一个任意角度的切片
- 使用多个包裹切片,每个切片都旋转
我更喜欢的另一个想法是:使用svg图形。
.container {
position: absolute;
left: 300px;
top: 0;
}
.wrap {
position: absolute;
transform: rotate(30deg);
transform-origin: 0% 100%;
}
.slice {
height: 100px;
width: 100px;
overflow: hidden;
transform-origin: 0% 100%;
transform: skew(-60deg);
position: relative;
}
.slice::before {
height: inherit;
width: inherit;
position: absolute;
content: "";
border-radius: 0 100% 0 0;
transform-origin: 0% 100%;
transform: skew(60deg);
}
.wrap-0 {
transform: rotate(0deg);
}
.wrap-0 .slice::before {
background: hsl(0, 100%, 50%);
}
.wrap-1 {
transform: rotate(30deg);
}
.wrap-1 .slice::before {
background: hsl(30, 100%, 50%);
}
.wrap-2 {
transform: rotate(60deg);
}
.wrap-2 .slice::before {
background: hsl(60, 100%, 50%);
}
.wrap-3 {
transform: rotate(90deg);
}
.wrap-3 .slice::before {
background: hsl(90, 100%, 50%);
}
.wrap-4 {
transform: rotate(120deg);
}
.wrap-4 .slice::before {
background: hsl(120, 100%, 50%);
}
.wrap-5 {
transform: rotate(150deg);
}
.wrap-5 .slice::before {
background: hsl(150, 100%, 50%);
}
.wrap-6 {
transform: rotate(180deg);
}
.wrap-6 .slice::before {
background: hsl(180, 100%, 50%);
}
.wrap-7 {
transform: rotate(210deg);
}
.wrap-7 .slice::before {
background: hsl(210, 100%, 50%);
}
.wrap-8 {
transform: rotate(240deg);
}
.wrap-8 .slice::before {
background: hsl(240, 100%, 50%);
}
.wrap-9 {
transform: rotate(270deg);
}
.wrap-9 .slice::before {
background: hsl(270, 100%, 50%);
}
.wrap-10 {
transform: rotate(300deg);
}
.wrap-10 .slice::before {
background: hsl(300, 100%, 50%);
}
.wrap-11 {
transform: rotate(330deg);
}
.wrap-11 .slice::before {
background: hsl(330, 100%, 50%);
}
<div class="container">
<div class="wrap wrap-0">
<div class="slice"></div>
</div>
<div class="wrap wrap-1">
<div class="slice"></div>
</div>
<div class="wrap wrap-2">
<div class="slice"></div>
</div>
<div class="wrap wrap-3">
<div class="slice"></div>
</div>
<div class="wrap wrap-4">
<div class="slice"></div>
</div>
<div class="wrap wrap-5">
<div class="slice"></div>
</div>
<div class="wrap wrap-6">
<div class="slice"></div>
</div>
<div class="wrap wrap-7">
<div class="slice"></div>
</div>
<div class="wrap wrap-8">
<以上是关于使用背景颜色的多色圆形div?的主要内容,如果未能解决你的问题,请参考以下文章
javascript 更改div的样式以删除阴影文本并显示带有圆形边框的新背景颜色。