React, Next

[REACT] Styled Component 응용하기

재원쓰 2023. 4. 11. 23:31

컴포넌트의 자식 태그까지 컴포넌트로 만들기 버거울 때

만약 <Header> 라는 태그 안에 <h1>이 들어있는데, 이런 사소한 태그들까지 컴포넌트로 만들기 버거울 때가 있다.

이럴 때는 '&'를 사용해서 자식 태그에 스타일을 이어서 줄 수 있다.

 

const Header = styled.header`
    height: 44px;
    background: white;
    position: relative;
    padding: 0;
    text-align: center;
    
    & h1 {
        margin: 0;
        font-size: 17px;
        color: #333;
        line-height: 44px;
}

 

 

다양한 선택자도 사용 가능하다

& > h1 { ... }

 


라이브러리에서 제공하는 컴포넌트에 스타일 주고싶을 때

styled.div`` 이 형태가 아니라

styled(컴포넌트명)`` 이 형태로 하면 된다.

const CloseBtn = styled(CloseOutlined)`
    position: absolute;
    right: 0;
    top: 0;
    padding: 15px;
    line-height: 14px;
    cursor: pointer;
`

클래스를 덮어씌우면서 스타일을 변경해주고 싶을 때

예를들어 react-slick 라이브러리를 이용해서 슬라이드를 구현했는데 세세한 스타일 변경이 필요하다.

근데 slick으로 만들어진 태그들은 고유의 className을 가지고 있어서. 이걸 JSX에서 어떻게 변경해줄 수 있는지 애매하다.

이걸 해결해 줄 수 있는 게 styled component에서 제공해주는 createGlobalStyle이 있다.

아래 코드와 같이 컴포넌트를 만들어준 뒤, JSX 부분에 아무 곳에나 넣어주면 된다.

const Global = createGlobalStyle`
    .slick-slide {
        display:inline-block;
    }
`

const ImagesZoom = ({ images, onClose }) => {
    return (
        <>
            <Global />
            ...
        </>
    )
}

d