如何将 html 元素移动到 SVG 元素上?

Posted

技术标签:

【中文标题】如何将 html 元素移动到 SVG 元素上?【英文标题】:How to move html element over a SVG element? 【发布时间】:2021-11-29 22:18:12 【问题描述】:

如何将文本(段落元素)放在页脚的 svg 元素上。 我尝试在我的 svg 中使用 z-index:-0 但它不起作用。

我正在为 css 使用 tailwindcss。 这是当前输出的样子。

<footer>

  <div class="mx-auto">
    <div class="flex justify-center">
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur, qui!</p>
  </div>
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320" class=""style="position:absolute; z-index: -1;">
    <path fill="#273036" fill-opacity="1" d="M0,224L30,224C60,224,120,224,180,202.7C240,181,300,139,360,122.7C420,107,480,117,540,106.7C600,96,660,64,720,69.3C780,75,840,117,900,144C960,171,1020,181,1080,154.7C1140,128,1200,64,1260,53.3C1320,43,1380,85,1410,106.7L1440,128L1440,320L1410,320C1380,320,1320,320,1260,320C1200,320,1140,320,1080,320C1020,320,960,320,900,320C840,320,780,320,720,320C660,320,600,320,540,320C480,320,420,320,360,320C300,320,240,320,180,320C120,320,60,320,30,320L0,320Z">

  </path>
  
  
  
  </svg>       
</div>
</footer>

【问题讨论】:

【参考方案1】:

只需将 display: flex 添加到您的父 div 即可轻松实现您想要做的事情(将文本放在 svg 上)。

这是您可以使用的代码:

<footer>

  <div class="mx-auto" style="display: flex">
    <div class="flex justify-center">
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur, qui!</p>
  </div>
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320" class=""style="position:absolute; z-index: -1;">
    <path fill="#273036" fill-opacity="1" d="M0,224L30,224C60,224,120,224,180,202.7C240,181,300,139,360,122.7C420,107,480,117,540,106.7C600,96,660,64,720,69.3C780,75,840,117,900,144C960,171,1020,181,1080,154.7C1140,128,1200,64,1260,53.3C1320,43,1380,85,1410,106.7L1440,128L1440,320L1410,320C1380,320,1320,320,1260,320C1200,320,1140,320,1080,320C1020,320,960,320,900,320C840,320,780,320,720,320C660,320,600,320,540,320C480,320,420,320,360,320C300,320,240,320,180,320C120,320,60,320,30,320L0,320Z">

  </path>
  
  
  
  </svg>       
</div>
</footer><footer>

  <div class="mx-auto">
    <div class="flex justify-center">
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur, qui!</p>
  </div>
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320" class=""style="position:absolute; z-index: -1;">
    <path fill="#273036" fill-opacity="1" d="M0,224L30,224C60,224,120,224,180,202.7C240,181,300,139,360,122.7C420,107,480,117,540,106.7C600,96,660,64,720,69.3C780,75,840,117,900,144C960,171,1020,181,1080,154.7C1140,128,1200,64,1260,53.3C1320,43,1380,85,1410,106.7L1440,128L1440,320L1410,320C1380,320,1320,320,1260,320C1200,320,1140,320,1080,320C1020,320,960,320,900,320C840,320,780,320,720,320C660,320,600,320,540,320C480,320,420,320,360,320C300,320,240,320,180,320C120,320,60,320,30,320L0,320Z">

  </path>
  
  
  
  </svg>       
</div>
</footer>

您也可以使 svg 的位置变粘,然后根据需要移动文本,但我认为我提供的代码也可以工作,并且需要更少的工作。

要在移动视图中获得清晰的文本外观,您应该使用钳位。 这是一篇关于 css 中钳位的文章:Clamping article

【讨论】:

它可以工作,但是当我切换到移动视图时,文本会超出 svg 区域。你有什么想法吗? 如果你想实现所有屏幕比例的文本可读,那么你应该使用钳位【参考方案2】:

约翰,如果我正确理解了你的问题,你是不是想把文本放在 svg 上?

尝试添加 display: flex;到你的父 div。

<div class="mx-auto" style="display: flex">

可能有用

【讨论】:

以上是关于如何将 html 元素移动到 SVG 元素上?的主要内容,如果未能解决你的问题,请参考以下文章

SVG 的绝对定位导致内部路径元素移动到其包含元素之外

移动旋转的 SVG 元素

jQuery SVG - 悬停元素

如何使用 JavaScript 将所有 HTML 元素子元素移动到另一个父元素?

如何将 CSS 类移动到正确的 html 元素

如何移动 HTML 元素