CSS-in-JS ?


CSS코드를 작성하여 꾸며진 컴포넌트를 생성하는 방식. 이를 위해 styled-componenets 패키지가 사용된다.

styled-components


React에서 CSS-in-JS를 사용할 수 있도록 하는 패키지.

  • 설치하기

    yarn add styled-components
    

    ( + ) vscode plug-in 중 ‘vscode-styled-componenets’ 설치되어있어야 작성이 편하다.

  • 사용하기 : 기본

    • impot

      import styled from 'styled-components'
      
    • CSS를 적용하여 component를 생성할 수 있다.

      const StDiv = styled.div`
      width: 100px;
      height: 100px;
      `; // 백틱 안에 css 코드 작성
      
    • 생성한 components 사용

      function APP(){
          return <StDiv> DIV </StDiv>	// Div 태그 대신 생성한 Div 사용
      }
      
  • 사용하기 : 조건부 스타일링

    props를 통해 style을 전달받아 같은 style의 일부만 변경하여 재사용할 수 있다.

    • props로 받은 매개변수를 적용하여 생성하기

      const StDiv = styled.div`
      width: 100px;
      height: 100px;
      border: 1px solid ${(props) => props.borderColor};
      `; 			       // △ border Color가 입력되는 부분에 매개변수사용
      

      ${}은 템플릿 리터럴 ` `` `에서 javascript를 사용한다는 표현

    • 매개변수 전달하여 사용하기

      function APP(){
          return <StDiv borderColos="red"> Red border DIV </StDiv>
      }				  //△ 매개변수 전달
      

전역 스타일 ( Global Style )


  • 전역 스타일의 필요성

    위 예제의 방식은 작성한 컴포넌트 내부에서만 유효하며 이를 컴포넌트 레벨 스타일링이라한다.

    import styled from 'styled-components';
      
    const StDiv = styled.div``;
      
    function App(){
          
        return <StDiv />
    }
      
    export default App;
    

    다만 다수의 모든 컴포넌트에 동일한 스타일이 사용된다면, 이를 매 컴포넌트마다 설정하는 것은 비효율적인 일이다.

  • 전역 스타일

    • 애플리케이션 레벨 스타일링

      최상위 컴포넌트를 CSS-in-JS component로 생성하여 해당 component의 CSS를 하위 component에 모두 적용시키는 것을 말한다.

      • Import

        import { createGlobalStyle } from 'styled-components'
        
      • Global Style component 생성하기

        특정 class나 id를 사용하여 설정하기보다 예시와 같이 HTML Element에 대한 스타일을 명시하는 경우가 자주 사용되는 것 같다.

        const GlobalStyle = createGlobalStyle`
        *, *::before, *::after {
         box-sizing: border-box; 
        }
              
        body {
        	font-family: 'Verdana';
        }
              
        p{
        	font-size: 12px;
        }
        `
              
        export default GlobalStyle
        
      • Global Style component 사용하기

        import GlobalStyle from './GlobalStyle'
              
        function APP(){
                  
            return (
        	    <>
            	    <GlobalStyle/>
                	// 그 외 component를 추가하면 추가한 component에도 위 GlobalStyle이 적용된다.
                </>
            )
        }
        

참조

  • https://www.daleseo.com/styled-components-global-style/