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

禁用JavaScript时的错误页无法应用媒体专属样式,该如何实现适配?

该需求完全可以实现。你当前使用的内联样式不支持媒体查询,只要把样式改为静态CSS编写即可,操作如下:

实现方案

因为错误页是在<noscript>标签内渲染,所以所有样式不能依赖JavaScript运行时加载,我们可以直接在组件内嵌入原生静态CSS,或者把样式写入全局CSS文件:

方案1:组件内嵌入静态CSS(兼容性最好,无需额外依赖)

修改后的ErrorPage组件代码如下:

function ErrorPage() {
    const requiredMsg = 'Javascript Required'
    const errorText = 'We’re sorry, but the page does not work without JavaScript enabled. Please enable JavaScript on your browser.'

    return (
        <>
            {/* 原生静态样式,JS禁用时也可正常生效 */}
            <style>
            {`
            /* 全局重置可选,避免默认边距影响布局 */
            body {
                margin: 0;
                padding: 0;
            }
            .error-container {
                width: 100%;
                min-height: 100vh; /* 默认占满整个视口高度,移动端生效 */
                background: #f5f5f5; /* 浅淡背景色,可自行调整色值 */
                display: flex;
                align-items: center;
                justify-content: center;
                text-align: center;
            }
            .error-content {
                width: 100%;
            }
            .error-img {
                width: 100%;
            }
            .error-title {
                font-family: 'lato, sans-serif';
                color: #1074C3;
                margin: 12px 0 0 0;
            }
            /* 桌面端媒体查询,断点768px可根据你的业务需求调整 */
            @media (min-width: 768px) {
                .error-content {
                    height: 200px; /* 桌面端中间内容区高度200px */
                    display: flex;
                    flex-direction: column;
                    align-items: center;
                    justify-content: center;
                    background: #fff; /* 中间内容区和外围背景区分 */
                    padding: 0 24px;
                }
            }
            `}
            </style>
            <div className="error-container">
                <div className="error-content">
                    <img className="error-img" src="img.svg" alt="JavaScript required" />
                    <Typography component='h1' className="error-title">{requiredMsg}</Typography>
                    <p>{errorText}</p>
                </div>
            </div>
        </>
    )
}

export default ErrorPage

方案2:全局CSS写入

如果你的项目有全局引入的CSS文件,直接把上述<style>标签内的CSS代码复制到全局CSS文件中,组件内直接给对应元素加className即可,效果和方案1完全一致。

注意事项

请确保你的_document.js的<head>标签中已经配置了viewport元标签,否则移动端视口高度匹配会出现异常,标签示例:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:45:02