我正在使用一个React 组件,该组件根据是否支持 CSSbackdrop-filter
指令使用不同的不透明度值:
background={(() => {
const opacity = isBackdropFilterSupported() ? 0.75 : 0.98
return (
`linear-gradient(
180deg, rgba(76, 63, 143, ${opacity}) 62.76%,
rgba(184, 169, 255, ${opacity}) 100%
)`
)
})()}
问题是该站点是使用 Next.js 在服务器端生成的。CSS.supports('backdrop-filter', 'blur(1px)')
在服务器上返回false
,因此该值始终false
与客户端属性无关。
一种解决方案是使用 CSS,例如:
.drawer {
--opacity: 0.75;
background: linear-gradient(
180deg, rgba(76, 63, 143, var(--opacity)) 62.76%,
rgba(184, 169, 255, var(--opacity)) 100%
);
}
@supports not (backdrop-filter: blur(1px)) {
.drawer { --opacity: 0.98; }
}
这应该由客户端解释并避免服务器端呈现问题,但我没有发现有关如何将这种样式集成到它所构建的 Chakra-UI 中的迹象。