PostCSS

๊ณต์‹๋ฌธ์„œ ๋งํฌ

CSS ์ „์ฒ˜๋ฆฌ๊ธฐ

  • ์ˆœ์ˆ˜ํ•œ CSS ๊ฐ€ ์•„๋‹ˆ๊ณ 

  • Sass, Lass ์ œ๊ณตํ•˜๋Š” ๋ฌธ๋ฒ•์— ๋งž์ถฐ ์ž‘์„ฑํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ˆœ์ˆ˜ css๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

  • ์ˆœ์ˆ˜ CSS๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ์ค‘๋ณต๋˜๋Š” ์Šคํƒ€์ผ, ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฏน์Šค์ธ ํ•จ์ˆ˜๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์Šคํƒ€์ผ์„ ๋ชจ๋“ˆํ™” ํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Sass, Lass VS PostCSS

  • Sass, Lass๋Š” ์ œ๊ณต๋˜๋Š” ๊ฒƒ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ

  • PostCSS๋Š”

    • ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์กด์žฌ

    • ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๋‹ค์šด๋ฐ›์•„ ์‚ฌ์šฉ

    • npm ์—์„œ ๋‹ค์šด๋กœ๋“œ ์ˆ˜๊ฐ€ ๋†’๊ณ  ์„ ํ˜ธ๋„๊ฐ€ ๊ณ„์† ์˜ฌ๋ผ๊ฐ€๊ณ  ์žˆ๋‹ค. Create React App ์œผ๋กœ ์ดˆ๊ธฐ ์…‹ํŒ…์„ ํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋˜์–ด ์žˆ์„ ์ •๋„๋กœ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

PostCSS ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

  • ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฒ„ํŠผ1, ๋ฒ„ํŠผ2๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ์—์„œ .button ๋ผ๋Š” ๊ฐ™์€ ํด๋ž˜์Šค ๋„ค์ž„์œผ๋กœ ์Šคํƒ€์ผ์„ ์ ์šฉ ํ–ˆ์„ ๋•Œ CSS ์บ์Šค์บ์ด๋”ฉ ๋•Œ๋ฌธ์— ๋’ค์— ์„ ์–ธ๋˜์–ด์ง„ ํด๋ž˜์Šค๊ฐ€ ์ ์šฉ๋˜๋Š”๋ฐ ์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” ๋ฒ„ํŠผ1, ๋ฒ„ํŠผ2 ๋ชจ๋‘ ๋ฐฐ๊ฒฝ์ƒ‰์€ ์˜ค๋ Œ์ง€๊ฐ€ ๋˜์–ด์žˆ๋‹ค.

// button1.css
.button {
  background-color: orange;
}

// button2.css
.button {
  background-color: green;
}
// button1.jsx
@import "button1.css";

class Button1 extends Component {
  render(){
    return {
      <button className="button">button1</button>
    }
  }
}

// button2.jsx
...

// app.jsx
class App extends Component {
  render(){
    return {
      <>
        <Button2 />
        <Button1 />
      </>
    }
  }
}

PostCSS ์‚ฌ์šฉ๋ฐฉ๋ฒ•

  • ๊ธฐ์กด ํŒŒ์ผ๋ช….css ํŒŒ์ผ์„ ํŒŒ์ผ๋ช….module.css ๋ณ€๊ฒฝ

// button1.module.css
.button {
  background-color: orange;
}

// button2.module.css
.button {
  background-color: green;
}

  • ๋ฆฌ์•กํŠธ jsx ํŒŒ์ผ์—์„œ๋Š” ์Šคํƒ€์ผ ํŒŒ์ผ์„ styles ์ด๋ฆ„์œผ๋กœ ์ž„ํดํŠธํ•˜๊ณ  ํด๋ž˜์Šค๋„ค์ž„์—๋Š” ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๊ณ  ์ œ๊ณตํ•˜๋Š” ์ž„ํดํŠธํ•œ styles.์•ˆ์—์žˆ๋Š”์Šคํƒ€์ผ๋„ค์ž„ ์ฝ”๋“œ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.

// button1.jsx
@import styles from "button1.module.css";

class Button1 extends Component {
  render(){
    return {
      <button className={styles.button}>button1</button>
    }
  }
}

// button2.jsx
@import styles from "button2.module.css";

class Button2 extends Component {
  render(){
    return {
      <button className={styles.button}>button2</button>
    }
  }
}

// app.jsx
class App extends Component {
  render(){
    return {
      <>
        <Button2 />
        <Button1 />
      </>
    }
  }
}

์ด์ œ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ฒ„ํŠผ1์€ ์˜ค๋ Œ์ง€, ๋ฒ„ํŠผ2๋Š” ๊ทธ๋ฆฐ์œผ๋กœ ๋ฐฐ๊ฒฝ์ปฌ๋Ÿฌ๊ฐ€ ๋ณด์—ฌ์งˆ ๊ฒƒ์ด๋‹ค.

โœ๏ธ ๋„์ ๋„์ 

๋ฆฌ์•กํŠธ์—์„œ ์ž‘์—…ํ•  ๋•Œ autoprefixer๊ฐ€ PostCSS๋กœ ์ธํ•ด์„œ ๋˜๋Š”์ง€๋Š” ๋ชฐ๋ž๋‹ค. ๊ทธ๋ƒฅ ๋ฆฌ์•กํŠธ๋Š” ์ž๋™์œผ๋กœ ๋˜๋Š” ๊ฑด์ค„ ์•Œ์•˜๋‹ค๋Š”,,๐Ÿ˜…

Last updated