有没有人知道如何在CSS中创建它,或者甚至可能.我知道如何制作四分之一圆,但我不知道如何以这种格式应用它.边框的小块需要有不同的颜色.
如果你真的想用CSS做这件事,你可能会使用剪贴蒙版来获得你想要的效果.这种方法受浏览器兼容性的影响,所以我不知道它会有多大用处,除非你处于一个封闭的环境中.
它也不完美.剪切路径应该是多边形,以确保线段边缘指向圆的中心,而不是与边界框一致.
#circle, #circle .segment {
border-color: lightgray;
border-radius: 50%;
border-style: solid;
border-width: 5px;
box-sizing: border-box;
height: 100px;
position: relative;
width: 100px;
}
#circle .segment {
-webkit-clip-path: inset(0 40px 50px 40px);
/*content: ''; EDIT: not needed */
left: -5px;
position: absolute;
top: -5px;
}
#circle .segment:nth-child(1) {border-color: red; transform: rotate(-20deg);}
#circle .segment:nth-child(2) {border-color: blue; transform: rotate(70deg);}
#circle .segment:nth-child(3) {border-color: green; transform: rotate(160deg);}
#circle .segment:nth-child(4) {border-color: yellow; transform: rotate(250deg);}
您已经有了很好的答案。
只是给您另一种获得此结果的方法,您可以在多个背景下进行操作。关于此方法的好消息是您只需要一个div。
.test {
margin: 25px 0;
width: 200px;
height: 200px;
border-radius: 50%;
border: 12px solid transparent;
background-size: 100% 100%, 50% 50%, 50% 50%, 50% 50%, 50% 50%;
background-repeat: no-repeat;
background-image: linear-gradient(white, white),
linear-gradient(30deg, red 36%, lightgrey 30%),
linear-gradient(120deg, yellow 36%, lightgrey 30%),
linear-gradient(300deg, blue 36%, lightgrey 30%),
linear-gradient(210deg, green 36%, lightgrey 30%);
background-position: center center, left top, right top, left bottom, right bottom;
background-origin: content-box, border-box, border-box, border-box, border-box;
background-clip: content-box, border-box, border-box, border-box, border-box;
transform: rotate(30deg);
}
使用CSS:
使用CSS完全可以实现(如Quantastical的回答和此处所示),但CSS真的是正确的工具吗?我的回答是否定的.原因是因为使用CSS创建这样的形状/效果本身非常困难,除此之外,它们还有一些限制.例如,下面的代码段仅在背景为纯色时才有效.IE中不完全支持剪辑路径示例,在FF中它仅适用于内联SVG.
如果你仍然希望继续使用CSS,那么下面是另一个替代.在这里,我们使用skew
4个元素(真实或伪)的变换,所有这些元素都是父元素大小的50%x 50%.该skew
变换产生样外观的部门,从而看起来更加逼真.分配给这些倾斜元素的背景颜色覆盖在具有完整边框的另一个元素的顶部,并且看起来好像边框的一部分具有不同颜色.最后,我们div
在所有这些之上添加另一个白色背景以遮盖圆圈的内部部分(这样只有边框可见).
.circle {
position: relative;
height: 100px;
width: 100px;
}
.circle, .dummy-border, .border, .dummy-background {
border-radius: 50%;
overflow: hidden;
}
.dummy-border, .border, .dummy-background {
position: absolute;
top: 0px;
left: 0px;
height: 100%;
width: 100%;
}
.border {
border: 4px solid #AAA;
border-radius: 50%;
z-index: -2;
}
.dummy-background {
padding: 4px;
background-color: white;
background-clip: content-box;
}
.circle:after, .circle:before, .dummy-border:before, .dummy-border:after {
position: absolute;
content: '';
height: 50%;
width: 50%;
z-index: -1;
}
.circle:before {
top: 0%;
left: 0%;
background: red;
transform-origin: right bottom;
transform: skewY(30deg) skewX(30deg);
}
.circle:after {
top: 0%;
left: 50%;
background: green;
transform-origin: left bottom;
transform: skewY(-30deg) skewX(-30deg);
}
.dummy-border:before {
top: 50%;
left: 0%;
background: orange;
transform-origin: right top;
transform: skewY(-210deg) skewX(-30deg);
}
.dummy-border:after {
top: 50%;
left: 50%;
background: blue;
transform-origin: left top;
transform: skewY(210deg) skewX(30deg);
}
*, *:after, *:before {
box-sizing: border-box;
}