본문 바로가기

카테고리 없음

[신입OJT] SCSS란?

728x90
반응형

**참고 : https://heropy.blog/2018/01/31/sass/

 

- CSS는 상대적으로 배우기 쉽고 재미있지만, 작업이 고도화되고 프로젝트 규모가 커질수록 효율이 떨어진다. 

웹에서는 표준 css만 작동하기 때문에, SCSS라는 전처리기의 사용을 통해 편하게 작성하고 CSS로 바꿔주면 된다 ! 

SCSS는 CSS와 거의 같은 문법으로 Sass 기능을 지원해준다. Sass를 좀 더 CSS스럽게 사용할 수 있도록 해준다고 생각하면 될듯 ! 

**SCSS에서는 믹스인 방식이 조금 다르기 때문에 쓸때 찾아보면 될듯 ! 

 

 

- 컴파일 방법 ? 

SCSS는 웹에서 동작하지 않기 때문에 컴파일 해야한다. 

node-sass, webpack등..있지만 비교적 Parel(웹 애플리케이션 번들러)로 단순하게 컴파일 할 수 있다.

 

파일을 만들고,, parcel을 이용해서 간편하게 컴파일 해준 예시 ! 

해당 폴더에서 npx parcel index.html 입력해주면 link태그 안의 파일이 컴파일 되어 

요렇게 포트가 열리고 자동으로 보인다 ! 

 

- 중첩 사용자의 편리한 사용 

.section{
	width : 100px;
    .list{
    	padding:20px;
        }
}

// 이렇게 쓸필요 없이 위에처럼 중첩하여 쓸수 있다는 말 ! 

.section {
	width : 100px;
}

.section .list {
	padding : 20px;
}

- &선택자의 편리한 사용 

- https://www.sassmeister.com/여기서 scss가 어떻게 일반 css코드로 컴파일되는지 확인해보면서 쳐보면

&연산자의 손쉬운 사용을 할 수 있다. 

 

- 전체 테마 혹은 글꼴설정에 편리한 전역변수 설정, @at-root 중첩 벗어나기

-중첩에서 벗어나고 싶을때 @at-root키워드를 사용한다. 변수를 설정해서 자주쓰이는 컬러나 픽셀단위를 설정할 수 있다. 

- 아래의 예시처럼 사용할순 있지만,, 사실 가독성 문제 때문에,, 전역으로 설정하고 싶은 변수는 그냥 전역에 설정해주자. 

**클래스 안에서 쓴 변수를 전역에 설정하고 싶다면 $w : 100px !global 이라는 글로벌 키워드를 붙이면 전역으로 쓸수있다 

 

.section {
	$w : 100px;
    $h : 200px;
    // 이렇게 변수로 설정해준다 
    @at-root.item {
    	width : $w;
        height : $h;
        }
        //item은 section안에서 만들어지지만, 변수를 사용하기 위해서였으니
        가장 상단루트에서 section이라는 클래스를 만들어주는 속성이 at-root
    }

- #{} 문자보간

- #{} 를 이용해서 코드의 어디든지 변수값을 넣을수 있다. 

-$로 설정해준 변수를 자바스크립트의 템플릿 리터럴처럼 사용하면 된다 !! 

 

- 파일을 나눠 관리할수 있는 Partials 기능

예를들어 Sass-App 에 이렇게 파일이 3개가 있다고 하자 

그렇다면 @import "header", "side-menu";를 통해서 main.scss로 나머지 ~.scss 파일을 가져올 수 있다. 

그리고 이 파일들을 css/ 디렉토리로 node-sass scss --output css로 컴파일 해주면 main.css로 병합 컴파일된다 

(**병합 컴파일을 한다면 병합당하는 파일이름 앞에 _를 붙여줘야 한다)

 

- @mixin 사이즈 재사용 기능 

@mixin position(
  $p: absolute,
  $t: null,
  $b: null,
  $l: null,
  $r: null
) {
  position: $p;
  top: $t;
  bottom: $b;
  left: $l;
  right: $r;
}

.absolute {
  // 키워드 인수로 설정할 값만 전달
  @include position($b: 10px, $r: 20px);
}
.fixed {
  // 인수가 많아짐에 따라 가독성을 확보하기 위해 줄바꿈
  @include position(
    fixed,
    $t: 30px,
    $r: 40px
  );
}

 

728x90
반응형