본문 바로가기

Web.d

[CSS][SCSS] SCSS의 기본 개념

반응형

https://github.com/joohaem/prt-scss

 

GitHub - joohaem/prt-scss: what is SCSS (nomad coders/boostcourse)

what is SCSS (nomad coders/boostcourse). Contribute to joohaem/prt-scss development by creating an account on GitHub.

github.com

 


CSS Preprocessor란?

별도의 컴파일과정을 통해 CSS의 기능을 확장하고, 반복적인 작업을 자동화 하게 도와 주는 툴

 

SASS ( Syntactically Awesome Stylesheets )

CSS 호환성 / 다양한 프레임워크 / 많은 실무 사용 사례

 

문법

// scss, Sassy CSS
ul {
  li {
    display: block;				    
  }
}

// sass
ul 
  li 
    display: block					

// Compiled CSS
ul li {
  display: block;
}

 

세팅하기

  1. https://github.com/joohaem/prt-scss/tree/a47d68f6945db7237b7d322922acf45b57ddbc19
  2. .babelrc / .gulpfile.babel.js / package.json / package-lock.json scss 세팅 파일들을 복붙, 혹은 위 링크에서 clone 한다
  3. npm install or npm i
  4. npm run dev

.gulpfile.babel.js 에서

 

const routes = {
  css: {
    watch: "src/scss/*",
    src: "src/scss/styles.scss",
    dest: "dist/css"
  }
};

 

  • 코드에 의해 src 파일이 dest 파일에 Compile 된다
  • Compile을 원하지 않은 파일은 _를 붙여 저장한다. ex> _variables.scss (styles.scss 파일에서 @import "_variables";)
  • index.html 에서는 dist/css/styles.css 파일을 불러온다

 

Nesting

자식 선택자를 부모 선택자 블럭 안에 중첩해 쓴다 (가급적 3뎁스 이내로; 가독성)

 

.espresso {
   color: red;

	&:hover {
		color: orange; // 가상 클래스
	}
	&::after {
		color: yellow; // 가상 요소
	}
	&.americano {
		color: blue; // 클래스 선택자
	}
}

 

Variables

$bg: #ffe; 와 같은 형식으로 변수를 선언한다

 

a {
	color: $color-normal;

	&:hover {
		color: $color-point;
	}
}

p.#{$name} {
	#{$attr}-color: blue;
}

 

Mixins

어떤 종류의 argument를 mixin에 보내 css의 결과값을 바꾼다

 

@mixin myLink($word) {
  text-decoration: none;
  display: block;
  @if $word == "odd" {
    color: darkred;
  } @else {
    color: darkblue;
  }
}

a {
  &:nth-child(odd) {
    @include myLink("odd");
  }
  &:nth-child(even) {
    @include myLink("even");
  }
}

 

// 기본값 설정
@mixin border($color, $width: 1px) {
	border: {
		color: $color;
		width: $width;
		style: solid;
	}
}
// 인자... 로 갯수에 영향 X
@mixin margin($variable...) {
	margin: $variable;
}

p { 
   @include border(red); 
} 
p { 
   @include margin(5px 5px);
}

 

Extends

많은 CSS style을 재사용 할 때 사용된다

자식선택자, 인접선택자로 사용할 수 없다

 

%water {
	font-size: 12px;
	text-align: center;
	color: #fff;
}

.americano {
	@extend %water;
	background-color: red;
}
.americano_ice {
	@extend %water;
   background-color: blue;
}

 

@content, 반응형 Mixins 활용

@content로 include 한 컨텐츠 블록을 믹스인에 통으로 전달할 수 있다

미디어 쿼리문으로 반응형을 작성할 때 유용하다

 

@mixin responsive($device) {
  @if $device == "phone" {
    @media screen and (max-width: 768px), screen and (max-height: 768px) and (orientation: landscape)  {
       @content;
    }
  } @else if $device == "tablet" {
    @media screen and (max-width: 375px), screen and (max-height: 375px) and (orientation: landscape) {
       @content;
    }
  }
}

h3 {
  color: blue;
  @include responsive("tablet") {
    color: green;
  }
  @include responsive("phone") {
    color:red;
  }
}
반응형