首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从背景中剪切出可动态调整大小的文本形状

从背景中剪切出可动态调整大小的文本形状
EN

Stack Overflow用户
提问于 2017-06-27 16:55:23
回答 1查看 46关注 0票数 2

我正在尝试创建一个不透明的方框,但里面有一块你可以看到的文本(喜欢页面的背景图像或下面的一些元素)。

这很难解释,所以我做了一些粗略的图表:

我正在尝试使用SVG文件来做这件事,并使用Javascript/jquery来修改矩形的宽度和高度,但我不精通SVG格式……我已经成功地使用evenodd过滤器将其拼凑在一起:

https://jsfiddle.net/PhoenixFieryn/sqvLgqbq/

代码语言:javascript
复制
<svg id="coverimage" width="80pcm" height="30cm" viewBox="0 0 2000 2000"  version="1.1"
     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <desc>Example fillrule-evenodd - demonstrates fill-rule:evenodd</desc>

    <defs>
  <rect x="1" y="1" width="2000" height="1000"
        fill="white" stroke="blue" />
    </defs>
  <g fill-rule="evenodd" fill="white" >
    <path d="M0 0 h1000 v1000 h-1000z M841,396.8c-2.4-4-1.6-8.8,2.4-11.2c68-44,95.2-105.6,95.2-172.8c0-116-96.8-205.6-211.2-205.6H610.6H469.8
    h-6.4c-4,0-5.6,1.6-8.8,6.4L315.4,320c-4,6.4-8,6.4-11.2,0l-140-306.4c-2.4-4.8-4.8-6.4-8.8-6.4H9c-5.6,0-8.8,4-6.4,9.6l264,554.4
    c1.6,4,5.6,6.4,9.6,6.4h66.4c4,0,7.2-1.6,8.8-5.6l110.4-230.8v228.4c0,4.8,3.2,8,8,8h146.4c4.8,0,8-3.2,8-8V426.4c0-4.8,3.2-8,8-8
    h42.4c4,0,8,1.6,9.6,5.6l76,148c1.6,4,5.6,5.6,9.6,5.6h158.4c5.6,0,8.8-4,5.6-9.6L841,396.8z M701.8,276h-69.6c-4.8,0-8-3.2-8-8
    V158.4c0-4.8,3.2-8,8-8h75.2c36.8,0,68,28.8,68,62.4C775.4,244,750.6,276,701.8,276z"/>
  </g>

我不知道如何单独修改文本和矩形的大小/位置。我几乎不能理解我写的是什么,为什么页边距这么大。

如果任何人可以帮助我,通过这个或任何其他方法,谢谢!

编辑:有人指出可能有一个副本,但不幸的是,这个解决方案在Firefox中不起作用。我正在寻找一个跨平台的解决方案。但是感谢你的链接,尽管如此,它还是非常有帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-27 17:58:47

我的建议是使用文本创建一个蒙版。然后,我们创建一个蓝色矩形,并使用文本蒙版对其进行遮罩。

我们可以使用SVG、widthheight来定位SVG并根据需要调整大小。但我们也将蓝色矩形变得非常大,并将SVG设置为overflow: visible。这使我们可以轻松地使SVG大小具有响应性,并使蓝色一直延伸到屏幕的边缘。

代码语言:javascript
复制
body {
  background-image: url('http://austinhou.com/img/cover.jpg');
  background-size: cover;
  margin: 0;
  padding: 0;
}

#coverimage {
  width: 40%;
  height: 100vh;
  overflow: visible;
}
代码语言:javascript
复制
<body>

<svg id="coverimage" viewBox="0 0 950 600" preserveAspectRatio="xMinYMid meet">
  <defs>
    <mask id="vr">
      <rect x="0" y="-1000%" width="1000%" height="3000%" fill="white"/>
      <path fill="black" d="M841,396.8c-2.4-4-1.6-8.8,2.4-11.2c68-44,95.2-105.6,95.2-172.8c0-116-96.8-205.6-211.2-205.6H610.6H469.8
	h-6.4c-4,0-5.6,1.6-8.8,6.4L315.4,320c-4,6.4-8,6.4-11.2,0l-140-306.4c-2.4-4.8-4.8-6.4-8.8-6.4H9c-5.6,0-8.8,4-6.4,9.6l264,554.4
	c1.6,4,5.6,6.4,9.6,6.4h66.4c4,0,7.2-1.6,8.8-5.6l110.4-230.8v228.4c0,4.8,3.2,8,8,8h146.4c4.8,0,8-3.2,8-8V426.4c0-4.8,3.2-8,8-8
	h42.4c4,0,8,1.6,9.6,5.6l76,148c1.6,4,5.6,5.6,9.6,5.6h158.4c5.6,0,8.8-4,5.6-9.6L841,396.8z M701.8,276h-69.6c-4.8,0-8-3.2-8-8
	V158.4c0-4.8,3.2-8,8-8h75.2c36.8,0,68,28.8,68,62.4C775.4,244,750.6,276,701.8,276z" transform="translate(-210 0)"/>
    </mask>
  </defs>
  <rect x="0" y="-1000%" width="1000%" height="3000%" fill="#09f" mask="url(#vr)"/>
</svg>

</body>

JSFiddle version

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

https://stackoverflow.com/questions/44776044

复制
相关文章

相似问题

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