노트

Sass와 PostCSS

Sass and PostCSS

프런트엔드#css#tooling · 연결된 개념 4개

쉽게 말하면

Sass는 자기만의 말투로 쓴 스타일을 표준 CSS로 옮겨 주는 통역사이고, PostCSS는 표준 CSS를 받아 여러 작업대를 차례로 거치게 하는 조립 라인이에요. 손으로 하기 번거로운 일을 빌드할 때 대신 해 줘요.

비유가 깨지는 곳 통역사는 파일 전체를 자기 문법으로 해석해서, Tailwind 전용 구문이 Sass 규칙과 겹치면 에러를 내요. 그래서 Tailwind를 불러오는 파일은 .css로 두고 PostCSS만 거치게 하는 게 안전해요.

둘 다 CSS를 변환하는 빌드 도구지만 출발점이 다르다. Sass(Syntactically Awesome Style Sheets)는 자기 언어(SCSS, Sassy CSS)를 CSS로 번역하는 전처리기(Preprocessor)이고, PostCSS는 표준 CSS를 받아 플러그인 체인으로 변환하는 도구다.

SassPostCSS
입력.scss·.sass.css
문법고정(변수 $x, @mixin, 중첩, @extend, 연산)플러그인마다 다름
동작자체 파서로 파일 전체를 해석CSS를 AST(Abstract Syntax Tree)로 파싱하고 플러그인이 순서대로 바꿈
모르는 문법모르는 at-규칙은 대체로 통과, Sass 문법과 겹치면 에러해당 플러그인이 없으면 그대로 통과
  • PostCSS 플러그인 예: Tailwind(유틸리티 생성, @apply 처리), Autoprefixer(벤더 접두사(Vendor Prefix) 자동 추가, 크로스 브라우징 참고), cssnano(압축), 중첩 지원
  • 중첩·변수(--x)·@layer처럼 Sass가 먼저 주던 기능이 표준 CSS로 들어오면서 Sass 없이 PostCSS만 쓰는 구성이 흔해졌다

같이 쓸 때 부딪히는 지점

Sass는 파일 전체를 자기 문법으로 해석하므로, Tailwind 전용 구문이 Sass 규칙과 겹치면 파싱 에러를 낸다. Tailwind v4 문서도 Sass·Less 같은 전처리기와 함께 쓰는 것을 전제로 하지 않는다고 밝힌다. 예를 들어 @import "tailwindcss" prefix(tw);의 prefix(tw)는 Tailwind 플러그인이 처리할 옵션이지만 Sass에게는 모르는 문법이다. Tailwind를 불러오는 CSS 파일은 .css로 두고 PostCSS(또는 Tailwind 자체 빌드 도구)만 거치게 하는 것이 안전하다. 참고로 CSS의 @import는 @charset·@layer 선언 말고는 모든 규칙보다 앞에 와야 한다.

이 도구들은 모두 번들러 파이프라인 안에서 돈다. 런타임에 스타일을 만드는 방식과의 비교는 CSS-in-JS와 빌드 타임 CSS 참고.

참고: Sass 공식 문서 · PostCSS

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • CSS @layer

    CSS 규칙을 이름 붙인 묶음(레이어)으로 나누고, 묶음 사이의 우선순위를 명시적으로 정하는 기능. CSS Cascade Level 5 명세에서 캐스케이드에 새 단계로 들어왔고, 명시도보다 먼저 평가된다.

  • CSS 명시도

    캐스케이드에서 레이어까지 비겼을 때, 선택자가 요소를 얼마나 구체적으로 가리키는지로 승부를 내는 점수. (A, B, C) 세 자리로 매기고 앞자리부터 비교한다.

  • 속성 선택자와 형제 선택자

    대괄호 []로 HTML 속성을 기준으로 요소를 고르는 선택자와, +·~로 형제 관계를 따라 고르는 선택자. CSS뿐 아니라 querySelectorAll에서도 똑같이 쓴다.

  • XSS

    XSS(Cross-Site Scripting)는 공격자가 넣은 스크립트가 내 사이트의 출처(origin) 권한으로 사용자 브라우저에서 실행되는 공격이다. 같은 출처의 코드로 돌기 때문에 same-origin-policy가 막아 주지 못한다. 그 스크립트는 페이지를 바꾸고, 로그인한 사용자 행세를 하며 요청을 보내고, JS가 읽을 수 있는 데이터(localStorage의 토큰 등)를 빼 갈 수 있다.

  • CSS 리셋

    브라우저마다 다른 기본 스타일(제목 여백, 목록 들여쓰기 등)을 지우거나 맞춰서, 같은 출발점에서 스타일링하게 하는 기법.

보기 옵션