ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Web] 웹 스타일링 도구 (CSS, CSS Modules, SCSS, Tailwind CSS, Styled-components)
    Web/Web 2024. 11. 26. 17:39

     

    • CSS
    • CSS Modules
    • SCSS (+ Sass)
    • Tailwind CSS
    • Styled-components
    • 요약

    웹 개발에서 스타일링은 단순히 보기 좋은 화면을 만드는 것을 넘어, 사용자의 경험을 향상시키고

    브랜드의 가치를 표현하는 중요한 요소이다.

     

    다양한 스타일링 방법 중에서 CSS, CSS Modules, SCSS, Tailwind CSS, Styled-components

    각각의 장단점과 활용 방식으로 주목받고 있다.

     

    이번 포스팅에서는 이들 스타일링 도구와 방법을 비교하며, 상황에 맞는 선택을 할 수 있도록 탐구해 보려 한다.


    - CSS

     

    CSSCascading Style Sheets의 줄임말이며,

    전통적인 스타일링 언어로, HTML 요소의 스타일을 정의한다.

     

    정적 스타일링 방식으로, 아래와 같은 방식을 따른다.

        1. 스타일은 외부 파일(.css) 또는 <style> 태그에 정의되고, HTML 요소에 적용한다.

        2. 클래스나 선택자를 사용하여 전역적으로 동작한다.

     

    CSS는 브라우저에서 기본적으로 지원하고, 가장 기본적인 스타일링 방법이라는 특징이 있다.

     

    아래의 코드는 jsx(.js) 예시 코드와 css 예시 코드이다.

    // Button.jsx
    import React from 'react';
    import './button.css';
    
    const Button = () => {
      return <button className="button">Click Me</button>;
    };
    
    export default Button;
    /* button.css */
    .button {
      background-color: blue;
      color: white;
      padding: 10px 20px;
      border: 2px solid white;
    }
    
    .button:hover {
      background-color: red;
    }

     


    - CSS Modules

     

    CSS Modules는, CSS 파일을 모듈화하여 각 컴포넌트에 국한된 스타일을 작성한다.

     

    모듈식 스타일링 방식으로, 아래와 같은 방식을 따른다.

        1. 클래스 이름이 자동으로 로컬화되어 충돌을 방지할 수 있다.

        2. module.css 파일을 사용하며, React에서 주로 사용한다.

        3. CSS 파일과는 다르게 객체를 통해 접근해야 한다. ( ex) styles.button )

     

    CSS Modules는 스타일을 격리하고 유지보수성을 증가시키며, 기존 CSS와 호환이 가능하다는 특징이 있다.

     

    아래의 코드는 jsx(.js) 예시 코드와 module.css 예시 코드이다.

    // Button.jsx
    import React from 'react';
    import styles from './button.module.css';
    
    const Button = () => {
      return <button className={styles.button}>Click Me</button>;
    };
    
    export default Button;
    /* button.module.css */
    .button {
      background-color: blue;
      color: white;
      padding: 10px 20px;
      border: 2px solid white;
    }
    
    .button:hover {
      background-color: red;
    }

     


    - SCSS

     

    SCSS Sassy CSS의 줄임말로, CSS의 상위 집합(Superset)으로, Sass의 최신 문법이다.

     

    정적 스타일링 방식으로, 아래와 같은 방식을 따른다.

        1. CSS와 유사하지만, 변수, 중첩, 믹스인, 상속 등 프로그래밍적인 기능이 추가됐다.

        2. 컴파일러(Sass 또는 Node.js)를 사용해 .scss를 .css로 변환 후 브라우저에서 사용한다.

     

    SCSS는 코드의 재사용성과 유지보수성을 강화시키는 특징이 있다.

     

    아래의 코드는 jsx(.js) 예시 코드와 scss 예시 코드이다.

    // Button.jsx
    import React from 'react';
    import './button.scss';
    
    const Button = () => {
      return <button className="button">Click Me</button>;
    };
    
    export default Button;
    /* button.scss */
    .button {
      background-color: blue;
      color: white;
      padding: 10px 20px;
      border: 2px solid white;
    
      &:hover {
        background-color: red;
      }
    }

     

     

    + 여기서, Sass와 SCSS의 차이점은?

     

    1. Sass는 들여쓰기 기반으로 중괄호( {} )가 없고, 세미콜론 ( ; )이 필요가 없다.

    2. 기존 CSS와의 호환성의 낮다. ( 문법의 수정이 필요하기 때문에. )

    /* button.sass */
    .button
      background-color: blue
      color: white
      padding: 10px 20px
      border: 2px solid white
    
      &:hover
        background-color: red

     


    - Tailwind CSS

     

    Tailwind CSS유틸리티-퍼스트( Utility-First ) CSS 프레임워크이다.

     

    유틸리티-퍼스트는 프레임워크가 사진 정의된 유틸리티 클래스를 제공하고, 

    이를 조합해서 스타일링을 할 수 있음을 의미한다.

     

    유틸리티 기반 스타일링 방식으로, 아래와 같은 방식을 따른다.

        1. CSS 클래스 이름이 짧고 기능별로 정의되어 있다. ( ex) text-center, bg-red-500 등 )

        2. HTML에서 직접 스타일링: CSS 파일 없이 HTML 클래스 속성으로 구현 가능하다.

     

    Tailwind CSS는 빠른 개발 속도, 모듈식 구성, 디자인 시스템 구축에 적합하다는 특징이 있다.

     

    아래의 코드는 jsx(.js) 예시 코드이다.

    // Button.jsx
    import React from 'react';
    
    const Button = () => {
      return <button className="bg-blue-500 text-white px-6 py-2 border-2 border-white hover:bg-red-500">Click Me</button>;
    };
    
    export default Button;

     


    - Styled-components

     

    Styled-componentsJavaScript에서 CSS를 작성하는 CSS-in-JS 라이브러리이다.

     

    컴포넌트 기반 스타일링 방식으로, 아래와 같은 방식을 따른다.

        1. 스타일이 컴포넌트에 직접 바인딩되어 CSS와 JavaScript를 함께 관리한다.

        2. 동적으로 스타일링을 적용 가능하다. ( props 기반 )

     

    Styled-components는 스타일의 캡슐화, 동적 스타일링, React와 함께 자주 사용하는 특징이 있다.

     

    아래의 코드는 jsx(.js) 예시 코드이다.

    // Button.jsx
    import React from 'react';
    import styled from 'styled-components';
    
    const Button = styled.button
      background-color: blue;
      color: white;
      padding: 10px 20px;
      border: 2px solid white;
    
      &:hover {
        background-color: red;
      }
    ;
    
    const App = () => {
      return <Button>Click Me</Button>;
    };
    
    export default App;

     

     

    + 캡슐화 예시

     

    Styled-components는 각 컴포넌트에 고유한 클래스 이름을 생성하므로, 스타일이 다른 컴포넌트와

    충돌하지 않는 특징이 있다.

    import React from 'react';
    import styled from 'styled-components';
    
    // Button 컴포넌트 (파란 버튼)
    const Button = styled.button`
      background-color: blue;
      color: white;
      padding: 10px 20px;
      border: 2px solid white;
    
      &:hover {
        background-color: red;
      }
    `;
    
    // SecondaryButton 컴포넌트 (녹색 버튼)
    const SecondaryButton = styled.button`
      background-color: green;
      color: white;
      padding: 10px 20px;
      border: 2px solid white;
    
      &:hover {
        background-color: darkgreen;
      }
    `;
    
    const App = () => {
      return (
        <div>
          <Button>Primary</Button>
          <SecondaryButton>Secondary</SecondaryButton>
        </div>
      );
    };
    
    export default App;

     

     

    + 동적 스타일링 예시


    Styled-components
    props를 사용해 스타일을 동적으로 변경할 수 있다.

    import React from 'react';
    import styled from 'styled-components';
    
    // 동적 스타일링 버튼 컴포넌트
    const Button = styled.button`
      background-color: ${(props) => (props.primary ? "blue" : "gray")};
      color: white;
      padding: 10px 20px;
      border: 2px solid white;
    
      &:hover {
        background-color: ${(props) => (props.primary ? "red" : "darkgray")};
      }
    `;
    
    const App = () => {
      return (
        <div>
          <Button primary>Primary Button</Button>
          <Button>Secondary Button</Button>
        </div>
      );
    };
    
    export default App;

     

    위의 코드 예시는 다음과 같다.

    1. 첫 번째 버튼(Primary Button)은 primary prop이 전달되었으므로 파란색 배경 빨간색 hover 스타일

    2. 두 번째 버튼(Secondary Button)은 primary prop이 없으므로 회색 배경과 어두운 회색 hover 스타일

     


    - 요약

    스타일링 방식 예제 코드
    CSS .button { ... } CSS 파일을 별도로 작성
    CSS Modules import styles from './button.module.css'; 로컬화된 클래스 사용
    SCSS button { ... } Sass 문법 사용
    Tailwind CSS className="bg-blue-500 text-white ..." 유틸리티 클래스 사용
    Styled-components styled.button\\ ... `` CSS-in-JS

    'Web > Web' 카테고리의 다른 글

    [Web] HTTP vs HTTPS 개념 & 차이점  (1) 2022.09.15
    [Web] 쿠키(cookie), 세션(session)의 특징과 차이점  (0) 2022.09.09
Designed by Tistory.