svg - 为什么SVG笔画宽度为: 1 making lines transparent?

标签 svg width transparent stroke

我正在使用 svg 创建股票图表,当我将路径元素的笔画宽度设置为 1 时遇到问题。它没有使线条更窄,而是使其与笔画宽度相同:2但略显透明。我无法发布它的图像,因为我没有足够的声望点......

我的 svg 标签看起来像这样:

<div style="height:300px; width:400px; overflow:hidden">
<svg style="position:relative" height="10000" width="10000" version="1.1" xmlns="http://www.w3.org/2000/svg">
</svg>
</div>

我正在使用 javascript/jquery 动态添加路径元素:
var shape = document.createElementNS("http://www.w3.org/2000/svg", "path");
$(shape).attr({"d":"...",
               "fill":"none",
               "stroke":color,
               "stroke-width":"1"});
$("svg").append(shape);

我省略了路径的 d 的值属性,因为它有点长。另外,color是一个字符串变量,预先确定为“green”、“red”或“black”。

我的代码中是否有问题导致此问题,还是其他问题?

最佳答案

可能有点晚了,但真正的原因是,当您在无限小的网格线上绘制时,笔画宽度为 1 的线会从网格左右(或上方/下方)呈现为半像素线。我通过使用变换 0.5,0.5 在所有对象周围添加一个组来解决这个问题,因此所有内容都移动了半个网格线。

因此,您绘制的所有内容现在都恰好位于 2 条网格线的中间。笔画宽度为 1 的线现在将在左侧有半个像素,在左侧有半个像素,但两者都从中间开始。产生一条与您想要的厚度完全一致的线:1 像素...

例子:

<g transform="translate(0.5,0.5)">
 <g>
   <path />
   <path />
 </g>
 <g>
   <path />
   <path />
 </g>
</g>

关于svg - 为什么SVG笔画宽度为: 1 making lines transparent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7401369/

相关文章:

android - 半透明导航栏(Android 4.4)——显示下方内容

css - 在另一个 SVG 标签内显示仅包含样式的 SVG 标签

javascript - 使用模块模式的变体发出附加 javascript 事件的问题

javascript - 支持矢量图层的基于图 block 的 map 解决方案

css - SVG 棕褐色滤镜效果 : mid-tones only

Android查看背景: How to specify background color for PNG transparency?

c# - 用C#读取图像宽度和高度错误

css - 全宽 HTML5 视频问题

css - 当我为 UL 设置背景图像时,为什么当子元素已经设置了这些设置时我必须设置宽度和高度?

android - 在 Canvas 上绘制透明形状