問題
tsparticles を使うと、サイト内に動的な演出ができて便利です。
しかし直近リリースされた v2.4.0 に対応したところ、tsparticles の canvas が前面に出てきてしまいました…。
原因
原因は、canvas の inline style を消すのが難しくなったためでした。
自分は tsparticles が生成する canvas の inline styles を削除して、自前でスタイルを当てていました。
export const ParticlesBackground = () => {
// プリセットの読みこみ
const particlesInit = useCallback(async (engine: Engine) => {
await loadLinksPreset(engine)
}, )
const particleLoaded = useCallback(async () => {
c?.removeAttribute('style')
}, )
return (
...
.particles {
// 親要素で position: relative; を指定すること
position: absolute;
top: 0;
left: 0;
z-index: -1;
height: 100%;
background-color: #fff;
}
React ですが、このような実装。
しかし、消したはずの canvas の style が復活してくるという…。
対策
tsparticles のオプションにて、full screen を無効にし、背景色を設定するようにしました。
<Particles
options={{
fullScreen: { enable: false },
background: {
},
このような感じ。
fullScreen がデフォルトで有効になっているので、「position:fixed」が付与されて前面に出てきていました。
また z-index を指定する場合は、「 fullScreen: { zIndex: -1 }」のように指定すれば OK です。
また、設定する CSS も少なくなりました。
.particles {
// 親要素で position: relative; を指定すること
position: absolute;
top: 0;
left: 0;
}
以上の対応により、元通りの表示を復元することができました。
そもそも、適切に options を設定すれば起こらなかった問題ですが…。(でも tsparticles のドキュメント見にくい…😇)
何かの参考になれば幸いです。