En Next.js, tienes varias formas de cargar y encapsular CSS para un componente específico. Aquí te explico las más comunes:
Es la forma más recomendada para encapsular el CSS en un componente específico. Los estilos definidos en un módulo CSS se aplican solo a ese componente.
Pasos:
.module.css
.Ejemplo:
styles/Button.module.css
.button {
background-color: blue;
color: white;
padding: 10px 20px;
border-radius: 5px;
}
components/Button.js
import styles from './Button.module.css';
export default function Button() {
return <button className={styles.button}>Click Me</button>;
}
Next.js soporta styled-jsx
de forma nativa. Con styled-jsx
, puedes escribir CSS directamente en el archivo del componente, y ese CSS estará encapsulado y aplicado solo a ese componente.
Ejemplo:
components/Button.js
export default function Button() {
return (
<>
<button className="button">Click Me</button>
<style jsx>{`
.button {
background-color: blue;
color: white;
padding: 10px 20px;
border-radius: 5px;
}
`}</style>
</>
);
}
Puedes usar librerías como styled-components
para encapsular estilos. Necesitas instalar styled-components
y luego puedes usarlo para definir estilos dentro del componente.
Pasos:
styled-components
:npm install styled-components
import styled from 'styled-components';
const Button = styled.button`
background-color: blue;
color: white;
padding: 10px 20px;
border-radius: 5px;
`;
export default function MyButton() {
return <Button>Click Me</Button>;
}
Además de styled-components
, existen otras librerías CSS-in-JS como Emotion
que puedes utilizar de manera similar para encapsular estilos a nivel de componente.
Ejemplo con Emotion
****:
Emotion
:npm install @emotion/react @emotion/styled
/** @jsxImportSource @emotion/react */
import { css } from '@emotion/react';
const buttonStyle = css`
background-color: blue;
color: white;
padding: 10px 20px;
border-radius: 5px;
`;
export default function Button() {
return <button css={buttonStyle}>Click Me</button>;
}
¿Cuál de las formas que te he explicado crees que es la más adecuada para un proyecto en el que quieres asegurarte de que los estilos no se compartan accidentalmente entre componentes? ¿Por qué?
I am particularly drawn to developing applications that are not only functional but also visually appealing and easy to use. I accomplish this by implementing SOLID principles and clean architecture, and applying testing to ensure quality.