首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在没有视图框的情况下相互绘制svg形状

如何在没有视图框的情况下相互绘制svg形状
EN

Stack Overflow用户
提问于 2018-02-21 08:52:13
回答 1查看 238关注 0票数 2

我找到了一个写着字母的书记员。

https://codepen.io/scnijland/pen/xRGjBw

问:我如何在一个SVG中写出彼此相邻的形状,每个SVG只有一行?当我尝试的时候,这些字母重叠得很厉害。

我想要

代码语言:javascript
复制
<svg .....>
  <path for letter a />
  <path for letter b />
  <path for letter c />
</svg>

最后,如果可能的话,我想让这些字母随机产生,一笔一笔地写下来。

代码语言:javascript
复制
<svg .....>
  <path for left downstroke letter a />
  <path for right downstroke letter a />
  <path for bridge letter a />
  <path for vertical bar letter b />
  <path for top arch letter b />
  <path for bottom arch letter b />
  <path for top half arch letter c />
  <path for bottom half arch letter c />
</svg>

片段:

代码语言:javascript
复制
svg {
  display: inline-block;
  width: 150px;
  stroke: #000;
}
path {
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-width: 5px;
  transition: 1s;
}
代码语言:javascript
复制
<svg class="letter--a" viewBox="0 0 80 100">
  <path d="M5,90
           l30,-80 30,80
           M20,50
           l30,0" />
</svg>
<svg class="letter--b" viewBox="0 0 80 100">
  <path d="M5,5
           c80,0 80,45 0,45
           c80,0 80,45 0,45z" />
</svg>
<svg class="letter--c" viewBox="0 0 80 100">
  <path d="M60,10
           C-10,0 -10,100 60,90" />
</svg>

EN

回答 1

Stack Overflow用户

发布于 2018-02-21 09:07:08

在这种情况下,我可能会考虑翻译。您需要为每个字母添加80翻译(或者对一些字母(如ij)添加更少的),并增加查看框以包含所有这些内容:

代码语言:javascript
复制
svg {
  display: inline-block;
  width: 150px;
  stroke: #000;
}

path {
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-width: 5px;
  transition: 1s;
}

.letter--a {
  stroke-width: 1px; 
  stroke:green;
}

.letter--f {
  stroke-width: 3px; 
  stroke:red;
}
代码语言:javascript
复制
<svg viewBox="0 0 320 100">
  <path class="letter--a" d="M5,90
           l30,-80 30,80
           M20,50
           l30,0" />
  <path class="letter--f" transform=translate(80) d="M75,5
           l-60,0 0,90
           M15,45
           l50,0" />
  <path class="letter--i" transform=translate(160) d="M5,5
           l20,0 -10,0 0,85 -10,0 20,0" />
           
  <path class="letter--f" transform=translate(200) d="M75,5
           l-60,0 0,90
           M15,45
           l50,0" />
</svg>

只有部分字母可见的想法是考虑stroke-dasharray和/或stroke-dashoffset,并根据需要调整值:

代码语言:javascript
复制
svg {
  display: inline-block;
  width: 150px;
  stroke: #000;
}

path {
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-width: 5px;
  transition: 1s;
}

.letter--a {
  stroke-width: 2px;
  stroke: green;
  stroke-dasharray: 84, 139;
}

.letter--f {
  stroke-width: 3px;
  stroke: red;
  stroke-dasharray: 96, 145;
}

.letter--c {
  stroke-width: 8px;
  stroke: blue;
  stroke-dasharray: 84, 139;
}

.letter--c-b {
  stroke-width: 5px;
  stroke: yellow;
  stroke-dasharray: 84, 139;
  stroke-dashoffset: -89;
}
代码语言:javascript
复制
<svg viewBox="0 0 400 100">
<path class="letter--a" d="M5,90
           l30,-80 30,80
           M20,50
           l30,0" />
<path class="letter--f" transform=translate(80) d="M75,5
           l-60,0 0,90
           M15,45
           l50,0" />
  <path class="letter--i" transform=translate(160) d="M5,5
           l20,0 -10,0 0,85 -10,0 20,0" />
           
  <path class="letter--f" transform=translate(200) d="M75,5
           l-60,0 0,90
           M15,45
           l50,0" />
  <path class="letter--c" transform=translate(280)  d="M60,10
           C-10,0 -10,100 60,90" /> 
  <path class="letter--c-b" transform=translate(280)  d="M60,10
           C-10,0 -10,100 60,90" /> 
</svg>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48901578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档