라이브러리를 사용할때, 보통 class나 id는 지정되있기 마련이죠.
또한 이런 것을 수정해야하는 경우도 종종 생깁니다.
이때 css를 수정하는 방법을 알아보도록 하겠습니다.!
(next, styled-components 사용 방법입니다.)
첫번째 방법은 css 파일을 import하는 방법입니다.
즉 전체 페이지에 대한 스타일시트를 가져오는 방법입니다.
먼저 pages/ 폴더 하위에 _app.js 파일을 생성한 후 스타일시트를 import해주면 됩니다.
import '../styles.css';
export default function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />
}
https://nextjs.org/docs/basic-features/built-in-css-support
두번째 방법은 글로벌 스타일을 만드는 것인데요.
첫번째 방법과는 달리 styled-components라이브러리를 사용하고 있어야합니다.
https://styled-components.com/docs/api#createglobalstyle
createGlobalStyle를 import 한 뒤에
import styled, { createGlobalStyle } from 'styled-components';
styled.div`` 가 아닌, createGlobalStyle로 작업을 하면 됩니다.
(.slick-slide는 라이브러리가 지정한 class이며 스타일 덮여씌우는 예시입니다.)
const Global = createGlobalStyle`
.slick-slide {
display: inline-block;
}
`;
그리고 아무대나 컴포넌트 넣듯 <Global />로 넣으면 됩니다.
이때 간단히 설명하자면 styled.div`` 형식으로 만든 것은 로컬 스코프를 가지게되고,
createGlobalStyle``로 만든것은 글로벌 스코프를 가지게 된다고 합니다.
저는 작업 특성 상 pages/_app.js 파일을 만들었는데,
글로벌 스타일을 이곳에 넣어줬습니다.
pages/_app.js
import React from 'react';
import PropTypes from 'prop-types';
import Head from 'next/head';
import { createGlobalStyle } from 'styled-components';
import 'antd/dist/antd.css';
import wrapper from '../store/configurestore';
const App = ({ Component }) => {
const Global = createGlobalStyle`
.hidden {
padding: 0;
margin: -1px;
position: absolute;
width: 1px;
height: 1px;
clip: rect(0 0 0 0);
overflow: hidden;
border: 0;
}
`;
return(
<>
<Head>
<meta charSet="utf-8" />
<title>App</title>
</Head>
<Global />
<Component />
</>
);
};
App.propTypes = {
Component: PropTypes.elementType.isRequired,
};
export function reportWebVitals(metric){
console.log(metric);
}
export default wrapper.withRedux(App);
세번째 방법은 중복되는 기본 스타일을 어떻게 사용할까? 입니다.
styled-components 라이브러리에서 css api를 제공합니다.
https://styled-components.com/docs/api#css
이렇게 사용하면 됩니다.
import styled, { css } from 'styled-components';
const defaultStyle = css`
display: block;
// ...
`;
const CircleButton = styled.button`
${defaultStyled}
// ....
`;
const RectangleButton = styled.button`
${defaultStyled}
// ....
`;
이때 css를 넣지않고 백틱만으로도 작업이 되긴 합니다만 권고하지 않습니다.
문자열로 인식되어 원하지 않는 결과가 생길 수도 있다고 합니다.