CSS
示例
Next.js 支持多种处理 CSS 的方式,包括
CSS Modules
Next.js 内置了对使用 .module.css 扩展名的 CSS Modules 的支持。
CSS Modules 通过自动创建唯一的类名来局部作用域 CSS。这允许您在不同文件中使用相同的类名,而无需担心冲突。这种行为使 CSS Modules 成为包含组件级 CSS 的理想方式。
示例
例如,考虑 components/ 文件夹中可重用的 Button 组件
首先,创建包含以下内容的 components/Button.module.css
/*
You do not need to worry about .error {} colliding with any other `.css` or
`.module.css` files!
*/
.error {
  color: white;
  background-color: red;
}然后,创建 components/Button.js,导入并使用上述 CSS 文件
import styles from './Button.module.css'
 
export function Button() {
  return (
    <button
      type="button"
      // Note how the "error" class is accessed as a property on the imported
      // `styles` object.
      className={styles.error}
    >
      Destroy
    </button>
  )
}CSS Modules 仅对具有 .module.css 和 .module.sass 扩展名的文件启用。
在生产环境中,所有 CSS Module 文件都将自动连接成许多最小化和代码拆分的 .css 文件。这些 .css 文件代表您应用程序中的热执行路径,确保为您的应用程序绘制加载最少量的 CSS。
全局样式
要向您的应用程序添加样式表,请在 pages/_app.js 中导入 CSS 文件。
例如,考虑以下名为 styles.css 的样式表
body {
  font-family: 'SF Pro Text', 'SF Pro Icons', 'Helvetica Neue', 'Helvetica',
    'Arial', sans-serif;
  padding: 20px 20px 60px;
  max-width: 680px;
  margin: 0 auto;
}如果尚不存在,请创建 pages/_app.js 文件。然后,import styles.css 文件。
import '../styles.css'
 
// This default export is required in a new `pages/_app.js` file.
export default function MyApp({ Component, pageProps }) {
  return <Component {...pageProps} />
}这些样式 (styles.css) 将应用于您应用程序中的所有页面和组件。由于样式表的全局性质,为了避免冲突,您可能只能在 pages/_app.js 中导入它们。
在开发中,以这种方式表达样式表允许您的样式在您编辑时热重载 - 这意味着您可以保持应用程序状态。
在生产环境中,所有 CSS 文件都将自动连接到一个最小化的 .css 文件中。CSS 连接的顺序将与 CSS 导入到 _app.js 文件中的顺序相匹配。特别注意包含自己 CSS 的导入 JS 模块;JS 模块的 CSS 将按照与导入 CSS 文件相同的排序规则进行连接。例如
import '../styles.css'
// The CSS in ErrorBoundary depends on the global CSS in styles.css,
// so we import it after styles.css.
import ErrorBoundary from '../components/ErrorBoundary'
 
export default function MyApp({ Component, pageProps }) {
  return (
    <ErrorBoundary>
      <Component {...pageProps} />
    </ErrorBoundary>
  )
}外部样式表
Next.js 允许您从 JavaScript 文件导入 CSS 文件。这是可能的,因为 Next.js 将 import 的概念扩展到 JavaScript 之外。
从 node_modules 导入样式
自 Next.js 9.5.4 起,允许在应用程序的任何位置从 node_modules 导入 CSS 文件。
对于全局样式表,例如 bootstrap 或 nprogress,您应该在 pages/_app.js 中导入文件。例如
import 'bootstrap/dist/css/bootstrap.css'
 
export default function MyApp({ Component, pageProps }) {
  return <Component {...pageProps} />
}对于导入第三方组件所需的 CSS,您可以在组件中执行此操作。例如
import { useState } from 'react'
import { Dialog } from '@reach/dialog'
import VisuallyHidden from '@reach/visually-hidden'
import '@reach/dialog/styles.css'
 
function ExampleDialog(props) {
  const [showDialog, setShowDialog] = useState(false)
  const open = () => setShowDialog(true)
  const close = () => setShowDialog(false)
 
  return (
    <div>
      <button onClick={open}>Open Dialog</button>
      <Dialog isOpen={showDialog} onDismiss={close}>
        <button className="close-button" onClick={close}>
          <VisuallyHidden>Close</VisuallyHidden>
          <span aria-hidden>×</span>
        </button>
        <p>Hello there. I am a dialog</p>
      </Dialog>
    </div>
  )
}附加功能
Next.js 包含其他功能,以改善添加样式的创作体验
这是否有帮助?