In Next.js, we have the freedom to choose any library for styling React components. However, Next.js comes with its own built-in library called styled-jsx which offers scoped CSS. This allows us to write CSS that only affects the specific component it is applied to, making it easier to maintain.

To add CSS to a React component in Next.js, we need to insert it inside a <style jsx> block in the JSX code. Here’s an example:

const Index = () => (
  <div>
    <h1>Home page</h1>

    <style jsx>{`
      h1 {
        font-size: 3rem;
      }
    `}</style>
  </div>
);

export default Index;

We simply write plain CSS inside the <style jsx> block, just like we would in a regular .css file. It’s also possible to use interpolation inside the block to dynamically change the CSS values based on props or other variables.

To apply CSS globally, not scoped to a component, we can use the global keyword in the <style jsx> tag. For example:

<style jsx global>{`
  body {
    margin: 0;
  }
`}</style>

If you want to import an external CSS file in a Next.js component, you will need to install the @zeit/next-css package first:

npm install @zeit/next-css

Next, create a configuration file called next.config.js in the project root directory with the following content:

const withCSS = require('@zeit/next-css');
module.exports = withCSS();

Now, you can import CSS files just like you would with JavaScript libraries or components:

import '../style.css';

Alternatively, if you prefer using SASS, you can use the @zeit/next-sass library instead.

To summarize, Next.js provides the styled-jsx library for styling React components with scoped CSS. However, you can also use external CSS files by installing and configuring the @zeit/next-css package.