0

我试图让我的绘图应用程序在 Firefox 中运行良好。

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
.list {
  background-color: blanchedalmond;
}
.list-item {
  width: 50px;
  height: 25px;
  background-color: coral;
}
foreignObject {
  overflow: visible;
}
  </style>
</head>

<body>
  <svg width="300" height="200" fill="blue">
<foreignObject width="300" height="25">
  <div class="list">
    <div class="list-item">a</div>
    <div class="list-item">b</div>
    <div class="list-item">c</div>
  </div>
</foreignObject>
  </svg>
  <svg class="svg2" width="300" height="200" fill="blue">
<foreignObject width="300" height="25">
  <div class="list">
  </div>
</foreignObject>
  </svg>
  <script>
let svg = document.querySelector('.svg2');
svg.addEventListener('mousemove', handleMouseMove)
function handleMouseMove(e) {
  console.log(e.offsetX, e.offsetY);
}
setTimeout(() => {
  let el = document.querySelector('.svg2 .list');
  let a = document.createElement('div')
  let b = document.createElement('div');
  let c = document.createElement('div');
  a.innerHTML = 'a';
  b.innerHTML = 'b';
  c.innerHTML = 'c';
  a.classList.add('list-item')
  b.classList.add('list-item')
  c.classList.add('list-item')
  el.appendChild(a);
  el.appendChild(b);
  el.appendChild(c);
}, 1000);
  </script>
</body>

</html>

在 Chrome 中,两个 svg 都显示所有 3 个项目。

在 Firefox(开发者版本 78.0b4(64 位))中,在第一个 svg 中,所有 3 个项目都是可见的,在第二个 svg 中,只有第一个项目是可见的。为什么第二个 svg 不显示所有 3 个项目?

4

1 回答 1

0

设置style="overflow: visible"<svg>我解决了这个错误。请注意,svg 支持 oalso overflow="visible" 作为属性,我不知道它们是否受到不同的对待,但如果由于某种原因这不起作用,那么值得一试。在我使用的另一个项目中,我也必须在<foreignObject>元素上执行此操作,而在您的示例中则没有必要。

于 2021-04-16T22:42:55.350 回答