如何将背景图像放在圆形组件上?
How can I put a background image on a circle component?
我写了下面的代码,它为我创建了一个带有部分红色和绿色边框的圆圈。它显示在第一张照片中。
现在我的问题是如何用图片填充里面的圆圈?我的意思是 background-image: url("");
。我可以对 fill
属性做同样的事情吗(现在是 transparent
)?圆圈应该看起来像第二张图片(图片只是一个例子)。我正在使用 React 和样式组件。
const Wrapper = styled.svg`
position: relative;
`;
const BottomCircle = styled.circle`
stroke: ${({ theme }) => theme.red};
stroke-width: 5px;
stroke-dasharray: 440;
stroke-dashoffset: 0;
fill: transparent;
`;
const TopCircle = styled.circle`
stroke: ${({ theme }) => theme.green};
stroke-width: 5px;
stroke-dasharray: 440;
stroke-dashoffset: 250;
fill: transparent;
`;
const Holder = styled.g``;
<Wrapper width="200" height="200">
<Holder transform="rotate(-90 100 100)">
<BottomCircle r="70" cx="100" cy="100"></BottomCircle>
<TopCircle r="70" cx="100" cy="100"></TopCircle>
</Holder>
</Wrapper>
这就是我的处理方式。使用带有锥形渐变的 div
,顶部有图像来遮盖它。
const Avatar = styled.div`
width: 200px;
height: 200px;
position: relative;
border-radius: 50%;
background: ${({ Progress }) => {
if (Progress)
return `conic-gradient(red ${(Progress / 100) * 360}deg, yellow ${
(Progress / 100) * 360
}deg 360deg)`;
}};
&:before {
content: "";
position: absolute;
top: 5px;
left: 5px;
border-radius: 50%;
width: calc(100% - 10px);
height: calc(100% - 10px);
background-image: ${({ ImageSrc }) => {
if (ImageSrc) return `url(${ImageSrc})`;
}};
background-position: center;
background-size: contain;
}
`;
<Avatar Progress={80} ImageSrc="https://i.pinimg.com/474x/ea/82/5f/ea825f48a30b953a396a29a54752ff68.jpg"/>
我写了下面的代码,它为我创建了一个带有部分红色和绿色边框的圆圈。它显示在第一张照片中。
现在我的问题是如何用图片填充里面的圆圈?我的意思是 background-image: url("");
。我可以对 fill
属性做同样的事情吗(现在是 transparent
)?圆圈应该看起来像第二张图片(图片只是一个例子)。我正在使用 React 和样式组件。
const Wrapper = styled.svg`
position: relative;
`;
const BottomCircle = styled.circle`
stroke: ${({ theme }) => theme.red};
stroke-width: 5px;
stroke-dasharray: 440;
stroke-dashoffset: 0;
fill: transparent;
`;
const TopCircle = styled.circle`
stroke: ${({ theme }) => theme.green};
stroke-width: 5px;
stroke-dasharray: 440;
stroke-dashoffset: 250;
fill: transparent;
`;
const Holder = styled.g``;
<Wrapper width="200" height="200">
<Holder transform="rotate(-90 100 100)">
<BottomCircle r="70" cx="100" cy="100"></BottomCircle>
<TopCircle r="70" cx="100" cy="100"></TopCircle>
</Holder>
</Wrapper>
这就是我的处理方式。使用带有锥形渐变的 div
,顶部有图像来遮盖它。
const Avatar = styled.div`
width: 200px;
height: 200px;
position: relative;
border-radius: 50%;
background: ${({ Progress }) => {
if (Progress)
return `conic-gradient(red ${(Progress / 100) * 360}deg, yellow ${
(Progress / 100) * 360
}deg 360deg)`;
}};
&:before {
content: "";
position: absolute;
top: 5px;
left: 5px;
border-radius: 50%;
width: calc(100% - 10px);
height: calc(100% - 10px);
background-image: ${({ ImageSrc }) => {
if (ImageSrc) return `url(${ImageSrc})`;
}};
background-position: center;
background-size: contain;
}
`;
<Avatar Progress={80} ImageSrc="https://i.pinimg.com/474x/ea/82/5f/ea825f48a30b953a396a29a54752ff68.jpg"/>