我想创建一个 JavaScript 颜色选择器。我正在使用 SVG 创建一个颜色三角形,如下所示:
body{ background: black; }
<svg xmlns="http://www.w3.org/2000/svg" width="88" height="88" class="saturation-brightness"><defs> <radialGradient id="darks" cx="7.63px" cy="65px" r="72.7446px" gradientUnits="userSpaceOnUse"> <stop offset="0%" stop-color="#000000" /> <stop offset="100%" stop-color="rgba(0, 0, 0, 0)" /> </radialGradient> <radialGradient id="lights" cx="80.37" cy="65px" r="72.7446px" gradientUnits="userSpaceOnUse"> <stop offset="0%" stop-color="#FFFFFF" /> <stop offset="100%" stop-color="rgba(255, 255, 255, 0)" /> </radialGradient> <radialGradient id="mids" cx="44px" cy="65px" r="36.37px" gradientUnits="userSpaceOnUse"> <stop offset="0%" stop-color="#808080" /> <stop offset="100%" stop-color="rgba(128, 128, 128, 0)" /> </radialGradient> </defs> <polygon points="44,2 7.63,65 80.37,65" fill="red" /> <polygon points="44,2 7.63,65 80.37,65" fill="url(#mids)" /> <polygon points="44,2 7.63,65 80.37,65" fill="url(#darks)" /> <polygon points="44,2 7.63,65 80.37,65" fill="url(#lights)" /> </svg>
但是,正如您所看到的,三角形的边缘未正确渲染,这种情况在所有浏览器中都会发生。
使用多个 SVG 渐变填充时有办法避免这种情况吗?提前致谢!
您正在看到抗锯齿的作用:形状边缘的像素是几何边框两侧颜色的混合。
尝试使用
shape-rendering: scrapEdges
来关闭抗锯齿,但要注意该属性仅向浏览器提供提示,但没有明确指示要做什么。 规范介绍了crispEdges
值: