styled-components

kang·2020년 4월 13일
0

react

목록 보기
2/4

처음 접하였을때는 별 생각없이.. 음 리액트에서 css뭐 개발자가 편하게 쓸 수 있도록 제공해주나..
이 생각으로 접하게 되었다.

const Header = styled.div`
    background:#000;
    color: #fff;
  `;
return <Header>Header</Header>

이런식으로 내가 선언한 변수에 styled를 할당하여 사용하는 방식이며, styled.(태그)가 뒤에 어떤 태그를 사용할건지에 대해서 선언하면 된다.

위의 방식으로 브라우저에서 확인하게 되면, 아래 코드처럼 css의 속성은 head에 작성되어 있는 걸 확인할 수 있다.

<head>
  .ilirGo{background:#000;color:#fff;}
</head>
...
<div class="sc-AxhCb ilirGo">가나다</div>

위 내용은 기본적인 사용법이고, 내가 놀랐던 부분은

const Header = styled.div`
    background:#000;
    color: #fff;
  `;
return <Header as="span">Header</Header>

이렇게 as="(태그)" 사용할 태그명을 입력하게 되면 브라우저에서 내가 적어놓은 태그로 컴파일 되는데 브라우저에서 소스창을 보면 Div가 span으로 변한 것을 확인할 수 있었으며, 이렇게도 사용할 수 있도록 구현을 해 놓았다니 놀라웠다.

const Header = styled.div`
	${({ margin }) => margin && ` margin:${margin};`}
    background:#000;
    color: #fff;
  `;
return <Header margin="10px">Header</Header>

inline으로 margin이 있을 경우에 css의 속성이 반영된다.

Mixin으로 사용하기

import styled, { css } from "styled-components";
const border = css`
    ${({ border }) => border && ` border:${border} solid #000;`}
  `;
const Header = styled.div`
    ${({ margin }) => margin && ` margin:${margin};`}
    background:#000;
    color: #fff;
    ${border};
  `;
const Header = styled.div`
	${({ margin }) => margin && ` margin:${margin};`}
    background:#000;
    color: #fff;
  `;
return <Header  margin="10px" border="10px">Header</Header>

코드를 보면 border를 선언하고 border를 Header에서 사용할 수 있다.

이 외에 createGlobalStyle이나, 상속받아 사용할 수도 있다.
하지만 과연 개발자가 css를 퍼블리셔만큼 사용할 수 있을지는 의문이다.

profile
ksb

0개의 댓글