DOM 구성은 다음과 같다.
CSS는 다음과 같다.
body {
background: #bdcddb;
}
.loader {
position: relative;
width: 300px;
height: 300px;
}
.circle {
position: absolute;
inset: 35px;
background-color: #acbaca;
border-radius: 50%;
box-shadow: 5px 5px 15px 0 #152b4a66,
inset 5px 5px 5px rgba(255,255,255,0.55),
-6px -6px 10px rgba(255,255,255,1);
}
.circle::before {
content: '';
position: absolute;
inset: 4px;
background: linear-gradient(#2196f3, #e91e63);
border-radius: 50%;
animation: animate 2s linear infinite;
}
@keyframes animate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(350deg);
}
}
.circle::after {
content: '';
position: absolute;
inset: 35px;
background: #acbaca;
border-radius: 50%;
}
.circle span {
position: absolute;
inset: 4px;
background: linear-gradient(#2196f3, #e91e63);
border-radius: 50%;
animation: animate 2s linear infinite;
filter: blur(20px);
z-index: 1000;
/* mix-blend-mode: color-dodge; */
mix-blend-mode: plus-lighter;
}
.circle span::before {
content: '';
position: absolute;
inset: 40px;
background: #bdcbdb;
border-radius: 50%;
animation: animate 2s linear infinite;
z-index: 1000;
}
결과는 다음과 같다.

CSS의 67번째 줄이 핵심인데, 만약 해당 코드를 제거하면 결과는 다음과 같다.

mix-blend-mode의 값인 plus-lighter는 아직 공식적으로 문서화가 되지 않았고 만약 작동하지 않는다면 color-dodge를 사용하기 바란다. 참고로 color-dodge보다 plus-lighter가 광원의 표현에 더욱 적합하다.


