[๐Ÿฆ TIL 17์ผ์ฐจ] 6์›” 19์ผ

๊ทผ๋“€ยท2023๋…„ 6์›” 18์ผ
0

ํ”„๋ก ํŠธ์—”๋“œ์Šค์ฟจ TIL

๋ชฉ๋ก ๋ณด๊ธฐ
17/30
post-thumbnail

1. Sass

  • pre process ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•ด์„๋˜๊ธฐ์ „์— css๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ •
  • Sass๋Š” pre process(์ „์ฒ˜๋ฆฌ๊ธฐ)์ด๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ํšจ๊ณผ์ ์œผ๋กœ ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํƒ€์ผ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Sass๋Š”ํˆด์„ ์„ค์น˜ํ•˜์ง€์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜จ๋ผ์ธ ์„œ๋น„์Šค์ด๋‹ค.
  • ํ‘œ์ค€ Sass๋Š” dart-sass์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  libSass ๋Š” ์ด์ œ ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ชจ๋“  CSS๋ฒ„์ „๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜ํ•œ๋‹ค.

๐Ÿท๏ธ Sass์˜ ๋ฌธ๋ฒ• โ†’ SCSS ๋ฌธ๋ฒ•๊ณผ Sass ๋ฌธ๋ฒ•

โœ”๏ธ SCSS ๋ฌธ๋ฒ• โ†’ ์ฝง์ˆ˜์—ผ๋ฌธ๋ฒ•, ์ค‘๊ด„ํ˜ธ๋ฌธ๋ฒ•

โ†’ CSS๊ตฌ๋ฌธ๊ณผ ๋ฌธ์ œ์—†์ด ํ˜ธํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

โœ”๏ธ Sass ๋ฌธ๋ฒ• โ†’ ์ธ๋ฒคํ…Œ์ด์…˜ ๋ฌธ๋ฒ•, ๋“ค์—ฌ์“ฐ๊ธฐ ๋ฌธ๋ฒ•, ์„ธ๋ฏธ์ฝœ๋ก  ์—†์Œ

โ†’ SCSS์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ CSS์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š์•„ ์‚ฌ์šฉ์œจ์ด ์ ์ง€๋งŒ SCSSํŒŒ์ผ๊ณผ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿท๏ธ ์„ค์น˜ ๋ฐฉ๋ฒ• ๊ผญ ํ™•์ธ

  • โœ”๏ธ npm i sass โ†’ dart-Sass
  • โœ”๏ธ npm i node-sass โ†’ libSass

๐Ÿ“Œ npx sass scss:css --style=compressed

  • ๋ฐฐํฌ๋ชจ๋“œ์ผ ๋•Œ ์šฉ๋Ÿ‰๋•Œ๋ฌธ์— ์••์ถ•์‹œํ‚ค๋Š” ๊ฒƒ
  • ๋ช…๋ น์–ด๋ฅผ ๋’ค์— ์ ์–ด๋„ ์ƒ๊ด€์—†๋‹ค.

๐Ÿ“Œ npx sass scss:css --no-source-map

  • ์†Œ์Šค๋งต ๋งŒ๋“ค๊ธฐ ์‹ซ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด
  • /*# sourceMappingURL=style.css.map */ ์•ˆ๋œจ๋ฉด ์†Œ์Šค๋งต์ด ์•ˆ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด๋‹ค.

๐Ÿ“Œ npx sass scss:css โ€”watch

  • ๊ณ„์† css๋ฅผ ์ถ”์ ํ•œ๋‹ค.
  • live-server๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๋Š๋‚Œ์ด์ง€๋งŒ scss๋ฅผ css๋กœ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ปดํŒŒ์ผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿท๏ธ ๋‹จ์ถ•ํ‚ค

  • ๐Ÿ”ป ๋“ฑ๋ก
  • package.json ํŒŒ์ผ์˜ scripts ๋ถ€๋ถ„์— โ€œkeyโ€ : โ€œvalueโ€ ๋กœ ๋“ฑ๋ก
  • ๐Ÿ”ป ์‚ฌ์šฉ
  • npm run key๊ฐ’

๐Ÿ“Œ rimraf

  • ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์ง€์šฐ๊ฑฐ๋‚˜ ๊ฒฝ๋กœ๊ฐ€ ๊ธธ ๋•Œ ์‰ฝ๊ฒŒ ์‚ญ์ œ์‹œ์ผœ์ฃผ๋Š” ํŒจํ‚ค์ง€
  • rimraf css build โ†’ cssํด๋”๋„ ์ง€์šฐ๊ณ  build ํด๋”๋„ ์ง€์›Œ๋ผ

๐Ÿ“Œ npm-run-all

  • npm ๋ช…๋ น์„ ๋™์‹œ๋‹ค๋ฐœ์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ ์“ฐ๋Š” ํŒจํ‚ค์ง€
  • npm-s ์ˆœ์ฐจ์  ์ง„ํ–‰
  • npm-p ๋ณ‘๋ ฌ์  ์ง„ํ–‰

2. Sass ๋ฌธ๋ฒ• โ‘ 

๐Ÿ“Œ ์ฃผ์„

  • /**/ ์ปดํŒŒ์ผ๋œ CSS ํŒŒ์ผ์— ๋‚จ์•„ ์žˆ๋‹ค.
  • // ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์— ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“Œ ๋ณ€์ˆ˜ ์„ ์–ธ

  • $๋ณ€์ˆ˜์ด๋ฆ„ : ๊ฐ’
  • ๋ณ€์ˆ˜ ์ด๋ฆ„์€ ์–ธ๋”์Šค์ฝ”์–ด(_) ๋˜๋Š” ํ•˜์ดํ”ˆ(-)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋‘˜์€ ๋™์ผํ•œ ๋ณ€์ˆ˜์ด๋‹ค.
  • menu-list = menu_list
  • ์ „์—ญ ๋ณ€์ˆ˜(๊ธ€๋กœ๋ฒŒ๋ณ€์ˆ˜) โ†’ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜ โ†’ ๋กœ์ปฌ ๋ฒ”์šฐ ์•ˆ์—์„œ ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜์— ๊ฐ’์„ ์„ค์ •ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ !global ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ
  • ์ง€์—ญ ๋ณ€์ˆ˜(๋กœ์ปฌ ๋ณ€์ˆ˜) โ†’ ๋ธ”๋ก ๋‚ด๋ถ€์— ์„ ์–ธ๋˜์–ด ๋ธ”๋ก ์•ˆ์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. โ†’ ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ ์ค‘์ฒฉ ๋ฐ ์ƒ์œ„์„ ํƒ์ž

  • &:ํ•˜์œ„์š”์†Œ
  • &๋Š” ์ƒ์œ„์„ ํƒ์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŠน๋ณ„ํ•œ ์„ ํƒ์ž
  • ์ด ์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณด๋‹ค ๋ณต์žกํ•œ ๋ฐฉ์‹์œผ๋กœ ์ƒ์œ„ ์„ ํƒ์ž๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ค‘์ฒฉ์€ ํ•œ๋ฒˆ๋งŒ ํ•˜๋Š”๊ฒŒ ๊ฐ€๋…์„ฑ์ด ๋†’๋‹ค.
.menu {
  list-style: none;
  padding-left: 0;

  &__item {
    margin-top: 16px;
  }
}
  • ์ƒ์œ„ ์„ ํƒ์ž๋Š” BEM ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ ๋„๋กœ ๊ตฌ์กฐํ™” ๋œ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค
.Menu{
	//.menu__list
	&__list{
		background : #fff;
	}
}

๐Ÿ“Œ ๋ชจ๋“ˆ

  • @use ์— ์˜ํ•ด ๋ถˆ๋Ÿฌ์™€์ง„ ์Šคํƒ€์ผ = ๋ชจ๋“ˆ
  • ๋…๋ฆฝ์ ์œผ๋กœ ๋ฌถ์ธ ์ž‘์€ ์ฝ”๋“œ ์กฐ๊ฐ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํƒ€์ผ์„ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋งค์šฐ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•
  • @use
  • @use โ€œ๋ถˆ๋Ÿฌ์˜ฌ ํด๋”/ํŒŒ์ผโ€
  • ๋‹ค๋ฅธ Sass ํŒŒ์ผ์—์„œ ๋ฏน์Šค์ธ, ํ•จ์ˆ˜, ๋ณ€์ˆ˜ ๋“ฑ์„ ๋ถˆ๋Ÿฌ์™€ ๊ฒฐํ•ฉํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ“Œ ๋ชจ๋“ˆ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

  • ๋ชจ๋“ˆ ์‚ฌ์šฉํ•˜๊ธฐ(๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ถ™์ด๊ธฐ)
  • ํŒŒ์ผ ์ด๋ฆ„์„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ๊ฐ€์ง€๋ฉฐ ์ (.) ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด ๋ชจ๋“ˆ์˜ ๋ณ€์ˆ˜ ๋“ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

โ†’ ์œ„์น˜ํ•œํŒŒ์ผ.$๋ณ€์ˆ˜์ด๋ฆ„

@use "./themes/themes";
@use "./utils/mixins";

body {
  background: themes.$purple;
  color: mixins.$purple;
}
  • ์ž์ฃผ ์“ฐ๋Š” ๊ฑด ๋ณ„์นญ์„ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. โ†’ as ๋ณ„์นญ โ†’ ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ๋Š” ๋ณ„์นญ.$๋ณ€์ˆ˜์ด๋ฆ„ โ†’ ๋ณ„์นญ์ด *์ผ ๊ฒฝ์šฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์—†์ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.
@use "./themes/themes" as *;
@use "./utils/mixins" as mix;

body {
  background: $purple;
  color: mix.$purple;
}

๐Ÿ“Œ partial

  • ํŒŒ์ผ ์ด๋ฆ„ ์•ž์— ์–ธ๋”์Šค์ฝ”์–ด(_)๋ฅผ ๋ถ™์ด๋ฉด CSS ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ชจ๋“ˆ์˜ ๋ชจ๋“  ๊ฒƒ์€ ๊ณต๊ฐœ์ด์ง€๋งŒ ํ•˜์ดํ”ˆ(-) ๋˜๋Š” ์–ธ๋”์Šค์ฝ”๋”(_)๊ฐ€ ๋ถ™์€ ๊ฒฝ์šฐ ๋น„๊ณต๊ฐœ๊ฐ€ ๋œ๋‹ค. โ†’ ๋น„๊ณต๊ฐœ๋Š” ์˜ค์ง ํ•ด๋‹น ๋ฉค๋ฒ„๋ฅผ ์ •์˜ํ•œ ํŒŒ์ผ์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ณ  ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์น™

๐Ÿ“Œ ๋ชจ๋“ˆ ๋‚ด๋ณด๋‚ด๊ธฐ

  • ๊ด€์‹ฌ์‚ฌ ๋ณ„ ์—”ํŠธ๋ฆฌ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.
  • @forward -> SassํŒŒ์ผ์˜ ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์™€ ๋‹ค์‹œ ๋‚ด๋ณด๋‚ด์ค€๋‹ค.

๐Ÿ”ป sass/modules/_index.scss

๐Ÿ”ป common.scss

@forward 'config';
@forward 'base';
@forward 'colors';
@forward 'layout';
@forward 'typography';
@forward 'spacing';
@use 'modules' as *;

.container {
  margin-top: $spacing-2;
  color: $primary-500;
}

3. Sass ๋ฌธ๋ฒ• โ‘ก

๐Ÿ“Œ ๋ฏน์Šค์ธ

  • ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์–ด ์œ ์šฉํ•˜๋‹ค.
  • ๋ฏน์Šค์ธ ๋‚ด๋ถ€์— ๋‹ค๋ฅธ ๋ฏน์Šค์ธ์„ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
@mixin flexbox {
  display: flex;
  flex-flow: row nowrap;
  justify-content: flex-start;
  align-items: center;
}

ul {
  @include resetList;
  @include flexbox;
  background: pink;
}

๐Ÿ“Œ ๋ฏน์Šค์ธ ํ™•์žฅ

  • ๋งค๊ฐœ๋ณ€์ˆ˜(์ธ์ž) ๋ฐ ์˜ต์…˜ ์ธ์ž(๊ธฐ๋ณธ๊ฐ’) ์„ค์ •
@mixin flexbox($fd: row, $jc: flex-start) {
  display: flex;
  flex-flow: $fd nowrap;
  justify-content: $jc;
  align-items: center;
}

ul {
  @include resetList;
  @include flexbox($fd: space-between); 
  @include autoMargin;
  width: 500px;
  background: pink;
}

๐Ÿ“Œ ํ™•์žฅ / ์ƒ์†

  • ์„ ํƒ์ž์˜ ์ด๋ฆ„ ์•ž์— %๋ฅผ ์‚ฌ์šฉํ•ด ์„ ์–ธํ•œ ํ”Œ๋ ˆ์ด์Šคํ™€๋” ํด๋ž˜์Šค๋Š” ์Šคํƒ€์ผ์„ ํ™•์žฅํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์Šคํƒ€์ผ ์ง‘ํ•ฉ์„ ๊ณต์œ ํ•  ๋•Œ๋Š” @extend ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ํ•  ๋•Œ ๊ฐ€๊ธ‰์ ์ด๋ฉด ์“ฐ์ง€ ๋ง ๊ฒƒ!
  • ์„ ํƒ์ž ์šฐ์„ ์ˆœ์œ„์— ์˜ํ–ฅ์„ ๋ผ์นœ๋‹ค.
%a11yHidden {
  overflow: hidden;
  position: absolute;
  clip: rect(0, 0, 0, 0);
  clip-path: circle(0);
  width: 1px;
  height: 1px;
  margin: -1px;
  border: 0;
  padding: 0;
  white-space: nowrap;
}

@mixin makeA11yHidden($selector) {
	#{$selector} {
		@extend %a11yHidden;
	}
}

๐Ÿ“Œ ์—ฐ์‚ฐ์ž

  • ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž( +, - , *, % ) ๋ฐ ์ˆ˜ํ•™ ํ•จ์ˆ˜(math,div() , calc() โ€ฆ) ๋“ฑ
  • calc() โ†’ ๊ณ„์‚ฐ์‹
  • math.div(a, b) โ†’ a ๋‚˜๋ˆ„๊ธฐ b ๊ณ„์‚ฐ์‹ โ†’ a์™€ b๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋ชจ๋“  ๋‹จ์œ„๋Š” ์ทจ์†Œ๋œ๋‹ค. โ†’ css์—์„œ๋Š” / ๊ธฐํ˜ธ๋Š” ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋กœ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ math.div()๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

4. ํšŒ๊ณ 

์ฃผ๋ง์— ๋ฏธ๋ฆฌ ์˜ˆ์Šตํ•˜๊ณ  ์˜ค๊ธธ ์ž˜ํ–ˆ๋‹ค. ๊ฐ•์˜๋ฅผ ์•ˆ๋“ฃ๊ณ  ์™”์œผ๋ฉด ์˜ค๋Š˜ ์ˆ˜์—… ํ•˜๋‚˜๋„ ๋ชป์•Œ์•„๋“ค์„ ๋ป”ํ–ˆ๋‹ค.
๊ฐ•์˜๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๋ถ€๋ถ„์€ ์—ญ์‹œ๋‚˜ ๋ชป์•Œ์•„๋“ค์—ˆ๋‹ค. ๊ฐ•์‚ฌ๋‹˜์ด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ํ•ด์ฃผ์…จ๋Š”๋ฐ๋„ ๋ชป์•Œ์•„๋“ค์—ˆ๋‹คใ… ใ… ใ…  ๋˜ ๋‚˜๋งŒ ๋ชป์•Œ์•„๋“ค์—ˆ์ง€ใ… ใ… ใ… ใ…  ์ด์ œ ์ดํ‹€๋™์•ˆ Sass ๋กœ ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋Š”๋ฐ ์ž˜ ํ• ์ˆ˜์žˆ์–ด์•ผํ• ํ…๋ฐ ๊ฑฑ์ •์ด๋‹ค

ํญ์—ผ๋•Œ๋ฌธ์— ์ง‘์ด ๋„ˆ๋ฌด ๋”์›Œ์„œ ์ง‘์ค‘์„ ๋ชปํ•œ ๊ฒƒ๋„ ์žˆ์—ˆ๋‹ค. ๊ฒฐ๊ตญ ์ฐธ๊ณ  ์ฐธ๋‹ค๊ฐ€ ์—์–ด์ปจ์„ ํ‹€์—ˆ๋Š”๋ฐ ์ด๋ฒˆ๋‹ฌ ์ „๊ธฐ์„ธ ํญํƒ„๋งž์„ ๊ฒƒ ๊ฐ™๋‹ค. ์ ๋‹นํžˆ ๋”์›Œ์•ผ์ง€... ์‚ด๋ ค์ฃผ์„ธ์š”...

profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ทจ์ค€์ƒ์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€