svg 图标在网页上锯齿状明显

105 天前
 i8k

一直以为矢量图是很平滑的,没想到放在网页中,锯齿感明显。请问是什么原因?如何修复?

import React from 'react';

interface VoiceIconProps {
  color?: string;
  className?: string;
  size?: number | string;
}

const VoiceIcon: React.FC<VoiceIconProps> = ({ 
  color = '#000000', 
  className = '',
  size = 24
}) => {
  return (
    <svg 
      xmlns="http://www.w3.org/2000/svg" 
      width={size} 
      height={size} 
      viewBox="0 0 24 24"
      className={className}
      style={{ color }}
    >
      <style>
        {`
          .audio-arc {
            fill: none;
            stroke-width: 2;
            stroke-linecap: round;
          }
          
          #inner {
            stroke: none;
          }
        `}
      </style>
      
      <g transform="translate(6, 12) rotate(-45)">
        <path id="inner" d="M0,0 L3,0 A3,3 0 0 1 0,3 Z" fill={color}/>
        <path id="middle" className="audio-arc" d="M6,0 A6,6 0 0 1 0,6" stroke={color} />
        <path id="outer" className="audio-arc" d="M9.5,0 A9.5,9.5 0 0 1 0,9.5" stroke={color}/>
      </g>
    </svg>
  );
};

export default VoiceIcon;
928 次点击
所在节点    问与答
2 条回复
i8k
104 天前
唉,解决办法就是画精细一点:
```javascript
import React from 'react';

interface VoiceIconProps {
color?: string;
className?: string;
size?: number | string;
}

const VoiceIcon: React.FC<VoiceIconProps> = ({
color = '#000000',
className = '',
size = 24
}) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={size}
height={size}
viewBox="0 0 100 100"
className={className}
style={{ color }}
>


<path className='audio-arc' d="M 58.250 17.033 C 56.462 18.649, 55 20.256, 55 20.604 C 55 20.952, 56.417 22.850, 58.149 24.822 C 59.881 26.795, 62.468 30.904, 63.899 33.954 C 66.183 38.824, 66.500 40.779, 66.500 50 C 66.500 59.221, 66.183 61.176, 63.899 66.046 C 62.468 69.096, 59.881 73.205, 58.149 75.178 C 56.417 77.150, 55.032 79.155, 55.072 79.632 C 55.112 80.109, 56.634 81.735, 58.454 83.245 L 61.764 85.991 65.841 80.707 C 74.635 69.308, 78.355 55.669, 76.195 42.750 C 74.831 34.593, 69.735 23.485, 64.747 17.797 L 61.500 14.094 58.250 17.033" stroke="none" fill={color} fill-rule="evenodd"/>

<path className='audio-arc' d="M 44.030 30.469 C 40.923 33.675, 40.776 34.099, 42.205 35.728 C 49.040 43.520, 49.032 56.491, 42.187 64.291 C 40.734 65.947, 40.882 66.348, 44.141 69.607 L 47.665 73.132 51.239 67.816 C 55.988 60.751, 57.293 56.161, 56.830 48.159 C 56.429 41.250, 53.996 34.978, 49.682 29.741 L 47.410 26.982 44.030 30.469" stroke="none" fill={color} fill-rule="evenodd"/>

<path id="inner" d="M 28 45.500 L 23.584 50 28 54.500 C 30.429 56.975, 32.961 59, 33.626 59 C 34.290 59, 35.608 56.975, 36.553 54.500 C 38.178 50.246, 38.178 49.754, 36.553 45.500 C 35.608 43.025, 34.290 41, 33.626 41 C 32.961 41, 30.429 43.025, 28 45.500" stroke="none" fill={color} fill-rule="evenodd"/>
</svg>
);
};

export default VoiceIcon;
```
i8k
104 天前
不用 stroke color ,用 fill color 会好一些

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1137096

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX