如何在 react 和 next js 中使用 Styled 组件创建全局样式,使用 css 文件和 styled 组件的组合是不是更好?

Posted

技术标签:

【中文标题】如何在 react 和 next js 中使用 Styled 组件创建全局样式,使用 css 文件和 styled 组件的组合是不是更好?【英文标题】:How to Create global styles with Styled components in react and next js and is it better to use combination of css files and styled component?如何在 react 和 next js 中使用 Styled 组件创建全局样式,使用 css 文件和 styled 组件的组合是否更好? 【发布时间】:2022-01-18 18:51:40 【问题描述】:

我开始在我的下一个 js 应用程序中使用 Styled Components,并且想知道如何或是否将样式化组件用于全局样式。想以 Q n A 格式分享。

【问题讨论】:

【参考方案1】:

要创建全局样式,我们可以使用createGlobalStyle 函数。对于next.js 项目,您可以在_app.js_app.tsx 文件中执行此操作,具体取决于您是否使用打字稿。

import type  AppProps  from "next/app";
import  createGlobalStyle  from "styled-components";

import Header from "@/components/Header";

const GlobalStyles = createGlobalStyle`
html,
body 
    padding: 0;
    margin: 0;


a 
    color: inherit;
    text-decoration: none;


* 
    box-sizing: border-box;

`;

export default function MyApp( Component, pageProps : AppProps) 
  return (
    <>
      <GlobalStyles />
      <Header></Header>
      <Component ...pageProps />
    </>
  );

当然,如果你有更多的全局样式,你可以从其他文件中导出GlobalStyles,比如globalStyle.js

但是没有什么可以阻止您将 CSS 或 SCSS 用于您的全局样式。您始终可以像往常一样导入 .css.scss 或任何其他受支持的 CSS 预处理器文件类型。

import '@/styles/global.scss'

这也适用于您的样式化组件。虽然使用createGlobalStyle 有一点优势。您可以使用所有 SCSS 功能,而无需在项目中添加 SCSS 依赖项。还有一个小缺点是 ide 的自动完成功能在样式化组件上的效果不如在 .css.scss 文件上的效果。

【讨论】:

以上是关于如何在 react 和 next js 中使用 Styled 组件创建全局样式,使用 css 文件和 styled 组件的组合是不是更好?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React、Next.js 中使用 tailwind.css 垂直和水平放置内容中心?

Next.js:如何将仅外部客户端的 React 组件动态导入到开发的服务器端渲染应用程序中?

next.js 的缺点超过 create react app + redux + s-s-r [关闭]

Next.js 与 FortAwesome 和 s-s-r

如何在 Next.js/React 中使用带有 @prismicio/client 库的时间线参考

Next.js 具有 React 钩子和 localStorage 的持久状态