ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CSS/Side Lib.] SASS, SCSS
    Front-End(Web)/HTML, CSS 2020. 12. 29. 15:40
    반응형

    오늘은 React-router 와 SASS 세션이 진행되었다. SASS를 처음 접하다보니, 구글링을 병행하면서 별도 포스팅을 진행하겠다.


    🧑‍💻 Session : Sass


    - Sass 란?

    Sass(Syntactically Awesome style sheets)는 CSS Pre-Processor(전처리기, 스크립트 확장 언어) 라고 정의한다.

    Sass에서 추가적인 기능들을 구현한 뒤, 컴파일러가 브라우저에서 인식하는 CSS 언어로 전환해준다. (파일 확장자는 .css -> .scss)

    • 스타일들의 네스팅을 통해 불필요한 클래스명을 줄임으로서 복잡한 코드를 간결하게 만들고, 코드 가독성을 높인다.
    • 속성과 값에 대한 변수 저장을 통해 코드의 재활용으로 효율적인 마크업이 가능하다.

    * CSS 전처리기 3대장 : Sass / Less / Stylus

    • Less : 진입장벽이 낮아 사용이 편하다 / 구비되지 않은 기능들의 한계가 존재
    • Stylus : 깔끔하고 세련되며 다양한 기능 지원 / 비교적 최근에 출시되어, 범용성이 적으며 컴파일 후 일부 버그가 잔재
    • Sass : 둘 장단점을 충족. Sass(새로운 문법)가 Stylus, SCSS(CSS 직관적 문법)는 Less와 유사하며, 하나의 컴파일러로 컴파일 가능.

    * 설치

    npm install node-sass --save
    // v^4.0.0 과 v^5.0.0 선택적 사용

      -> node-sass 는 Node.js 컴파일러인 LibSass에 바인딩한 라이브러리이다. Sass, SCSS가 브라우저에 적용되도록 돕는 툴.

     

     

    - Sass 주요 기능

    0. Comment(주석)

    /* show */
    // no-show
    
    /* show
       show
       show
    */

    // 한 줄 주석이 추가되었다. 이는 CSS로 컴파일되면 보이지 않는다.

     

    1. Variable(변수) : CSS에 변수개념을 도입해준다. $구문으로 선언하며 숫자, 문자열, 폰트, 색상, Null, Array 등 저장

    $theme-color : #3b20f1;
    
    main {
      background-color: $theme-color;
    }
    • 이 변수에도 Scope 개념이 적용된다. 즉, 선택자 내에서 선언한 변수는 그 안에서만 사용 가능하다.
    • 지역변수를 전역변수로 사용하려면 값 우측에 !global 플래그를 사용한다. { $theme-color: #333 !global; }
    • 해당 변수의 기본값을 설정하려면 !default 플래그를 사용한다. 변수값이 없거나 null 일 때 대체 { $theme-color: #eee !default } 

    2. Operators(연산자) : 다른 언어들처럼 수학 연산자들을 지원한다.

    Operator Description
    + addition
    - subtraction
    / division
    * multiplication
    % modulo
    == equality
    != inequality

    * 주의할 점은, +, - 연산자 사용 시에는 단위를 통일 시켜야 한다. { width: 100% - 20px } 은 오류가 발생하며, CSS calc() 함수로 대체

      곱셈과 나눗셈은 상관없이 작동한다. { width: 300px / 960px * 100% }

     

    3. Built-in Functions(내장함수) : 다양한 기능을 지원하는 내장함수를 지원

    // darken(색상, 비율) : 해당 '색상'에서 '비율'만큼 어두워진 색상값을 반환 
    
    $buttonColor: #2ecc71;
    $buttonDark: darken($buttonColor, 10%);
    Sass-lang (Built-in Modules) : https://sass-lang.com/documentation/modules

     

    4. Nesting(중첩)

    // .css
    nav ul {
      margin: 0;
      padding: 0;
      list-style: none;
    }
    
    nav li {
      display: inline-block;
    }
    
    nav a {
      display: block;
      padding: 6px 12px;
      text-decoration: none;
    }
    
    
    // .scss
    nav {
      ul {
        margin: 0;
        padding: 0;
        list-style: none;
          li {
            display: inline-block;
          }
      }
      a {
        display: block;
        padding: 6px 12px;
        text-decoration: none;
      }
    }

     

    1) & : 부모 선택자를 리퍼런스하는 선택자

    button {
      width: 200px;
      height: 100px;
      background-color: $theme-color;
      &:hover {
        background-color: red;
        cursor: pointer;
      }
    }

     

    2) @at-root : 해당 선택자를 네스팅 밖으로 배출시켜준다. 일반적으론, @at-root 선택자보단 선택자 자체를 밖에 작성한다.

    .header {
      .child {
        color: blue;
      }
      @at-root .sibling {			// .sibling 이 다른 구역에서도 사용!
        color: gray;
      }
    }

     

    5. Import(불러오기) : 다른 SCSS 파일을 불러올 수 있다. (.scss 확장자가 없어도 정상적용) @import 구문으로 불러옴

    @import "layout.css";
    @import "layout";

      * Partial : .sass, .scss 파일 이름이 underscore('_') 로 시작하면, 컴파일링에서 제외된다. 대신 import는 동일하게 가능.

     

    6. Extend(상속) : 특정 상속자 기능의 모음에 상속시킬 때 @extend 선택자를 사용한다.

    %flex-center {
      display: flex;
      justify-content: center;
      align-items: center
    }
    
    login-container {
      @extend flex-center;
    }

      * %(Placeholder) : 해당 선택자를 사용하면 상속은 정상적으로 이루어지나, 그 선택자는 컴파일에 제외된다. (효율성 향상)

     

    7. Mixin(믹스인) : Extend 와 유사한 기능이나, argument(인자)를 받아 함수처럼 동작할 수 있다.

    @mixin [믹스인명] ($변수1, $변수2..) 구문으로 지정, @include [믹스인명] (변수값1, 변수값2...) 선택자로 적용

    @mixin headline ($color, $size) {
      color: $color;
      font-size: $size;
    }
    
    h1 {
      @include headline(green, 12px);
    }

     

    8. Function(함수) : 내장함수와는 달리 임의의 함수를 제작한다.

    Mixin 과 유사하나 Mixin 은 Style Markup을, Function은 @return 값을 반환

    @function calc-percent($target, $container) {
      @return ($target / $container) * 100%;
    }
    
    .my-module {
      width: calc-percent(650px, 1000px);
    }

    Sass 가 유용한 툴인 건 인지됬지만, 상당히 많은 기능을 지원하는 것을 새삼 깨우쳤다. 또한, 문법 역시 사뭇 다르다는 느낌까지..

    앞으로의 프로젝트들에, Sass를 적용해보면서 위 주요 문법들을 조금씩 익혀봐야겠다.

     

    <출처>
    Velopert.log : https://velopert.com/1712
    Sass-lang : https://sass-lang.com/documentation/
    반응형

    'Front-End(Web) > HTML, CSS' 카테고리의 다른 글

    [CSS/Side Lib.] Tailwind CSS  (0) 2022.01.23
    [CSS/Lang] LESS  (0) 2021.08.12
    [CSS/Side Lib.] Styled Components  (0) 2021.01.24
    [CSS] Position / Display(block) / Float  (0) 2020.12.14
    [HTML] Semantic Web, Semantic Tag  (0) 2020.12.14
Designed by Tistory.