You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让pixi.js应用在flex布局窗口Resize时不产生垂直滚动条?

解决Pixi.js在Flex布局中Resize时垂直溢出的问题

你的问题出在Pixi生成的canvas元素默认布局行为和div不一致,即使设置了resizeTo: parent,canvas也可能因为自身样式特性,在窗口调整时超出flex容器分配的空间。以下是两种有效的解决方法:

方法一:通过CSS强制canvas遵循父容器的Flex约束

修改样式表,给父容器添加定位约束,同时让canvas绝对填充父容器:

body { display: flex; flex-direction: column; height: 100vh; margin: 0; }
#pixi { 
  flex: 1; 
  position: relative; /* 让内部绝对定位元素以它为基准 */
  overflow: hidden; /* 防止canvas意外溢出 */
}
#pixi canvas {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  display: block; /* 消除canvas默认的inline-block间距 */
}

JS部分可保留resizeTo: parent,CSS已强制canvas填充父容器,Pixi的resize逻辑会自动匹配渲染尺寸:

const parent = document.getElementById('pixi')
const app = new PIXI.Application()
await app.init({ background: '#1099bb', resizeTo: parent })
parent.appendChild(app.canvas)

方法二:手动监听Resize事件控制渲染尺寸

如果不想依赖CSS定位,可通过JS手动管理canvas尺寸,确保它始终匹配父容器的可用空间:
先调整CSS保证父容器Flex行为正常:

body { display: flex; flex-direction: column; height: 100vh; margin: 0; }
#pixi { flex: 1; }
#pixi canvas { width: 100%; height: 100%; display: block; }

再修改JS逻辑,去掉resizeTo,改用手动监听resize:

const parent = document.getElementById('pixi')
const app = new PIXI.Application()
await app.init({ background: '#1099bb' })
parent.appendChild(app.canvas)

// 初始化和Resize时调整渲染器尺寸
function handleResize() {
  const { width, height } = parent.getBoundingClientRect()
  app.renderer.resize(Math.floor(width), Math.floor(height))
}

window.addEventListener('resize', handleResize)
handleResize() // 初始化时执行一次

这两种方法都能让Pixi应用像原来的div一样,严格遵守Flex布局的空间分配规则,窗口调整时不会出现垂直滚动条。

内容的提问来源于stack exchange,提问作者Georg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 12:12:21