Skip to content

Next.js

Next.js 是一个基于 React 的全栈框架,提供 App Router 和 Pages Router 两种路由模式。

在这之前,建议首先阅读或了解 Next.js 的 CSS 约定,可参阅官方文档 nextjs.org

文件扩展名 .js 仅作为示例,有时,它们也会是 .jsx.tsx

App Router

app/layout.js 文件中找到或导入一个新的全局 CSS 文件。

js
// 全局 CSS 文件
import "./globals.css";

// 根布局
export default function RootLayout({ children }) {
    return (
        <html lang="en">
            <body>{children}</body>
        </html>
    );
};

在全局 CSS 文件中 (app/globals.css) 复制字体的 “常规 CSS” 嵌入代码:

css
@import url("https://fontsapi.zeoseven.com/136/main/result.css");

body {
    font-family: "Judou Sans Hans";
    font-weight: normal;
}

/* 使用类选择器 */
.my-class {
    font-family: "Judou Sans Hans";
}

全局 CSS 文件的名称可能与你的 Next.js 项目不同,但它通常在 app/layout.js 文件的顶部,呈现出 import "example.css"; 的样子。

Pages Router

pages/_app.js 文件找到或导入一个新的全局 CSS 文件。

js
// 全局 CSS 文件
import "../components/globals.css";

// 应用程序
export default function App({ Component, pageProps }) {
    return <Component {...pageProps} />;
};

和 App Router 一样,在全局 CSS 文件中 (components/globals.css) 复制字体的 “常规 CSS” 嵌入代码:

css
@import url("https://fontsapi.zeoseven.com/136/main/result.css");

body {
    font-family: "Judou Sans Hans";
    font-weight: normal;
}

/* 使用类选择器 */
.my-class {
    font-family: "Judou Sans Hans";
}

全局 CSS 文件的名称可能与你的 Next.js 项目不同,但它通常在 pages/_app.js 文件的顶部,呈现出 import "example.css"; 的样子。

CSS Modules

虽然目前可以在局部布局或局部组件中直接导入 CSS 文件,但在 Next.js 中,最佳实践应是使用 CSS 模块。

使用 .module.css 扩展名创建 CSS 文件,并导入它。

blog.module.css 为例:

js
// app/blog/page.js

import styles from "./blog.module.css";
 
export default function Page() {
    return <div className={styles.blog}>
        <h1>Blog</h1>
    </div>;
};
css
/* app/blog/blog.module.css */

@import url("https://fontsapi.zeoseven.com/136/main/result.css");

.blog { 
    font-family: "Judou Sans Hans";
}

useEffect

如果使用可能存在的 高级冗余.js 选项,可以将其复制在 useEffect 中:

jsx
import { useEffect } from "react";

export default function Page() {
    useEffect(() => {

        /* 高级冗余.js 嵌入代码*/

    }, []);

    return <div style={{ fontFamily: "Judou Sans Hans" }}>...</div>;
};