ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SCSS
    IT 이야기/FrontEnd 2021. 9. 10. 16:39

    퓨어 CSS로 코딩을 하다 보면 코드가 길고 지저분해지는 경우가 많다.

    학원 프로젝트용으로 만든 상단바. 생긴건 이렇게 단순하지만

     

    지옥의 CSS... 내용이 너무 길어 접어둠

    더보기

     

    body {
        color: #333;
        font-style: 16px;
        font-weight: 400;
        line-height: 1.4;
        font-family: 'Nanum Gothic', sans-serif;
    }
    
    img {
        display: block;
    }
    
    a {
        text-decoration: none;
    }
    
    .inner{
        width: 1100px;
        position: relative;
        margin: 0 auto;
    }
    
    /* 상단 로그인바 */
    
    
    .header .loginarea{
        width: 100%;
        position: fixed;
        top: 0;
        font-size: 12px;
        border-bottom: 1px solid #c8c8c8;
        background-color: #fff;
        z-index: 9;
    }
    
    .header .inner{
        height: 30px;
    }
    
    .header .loginarea .login-items {
        margin: auto 0;
        position: absolute;
        display: flex;
        right: 0;
        top: 6px;
    }
    
    .header .loginarea .login-items .login-item {
        color: #333;
        padding-left: 15px;
    }
    
    /* 메인카테고리 */
    
    .header .menuarea{
        position: fixed;
        top: 31px;
        width: 100%;
        border-bottom: 1px solid #c8c8c8;
        background-color: #fff;
        z-index: 9;
    }
    
    .header .menuarea .inner{
        height: 90px;
        display: flex;
        align-items: center;
    }
    
    .header .menuarea .logoarea{
        width: 500px;
        height: 50px;
        background-image: url("../images/mainlogo_wtext.png");
        background-size: contain;
        background-repeat: no-repeat;
    
    
    }
    
    .header .menuarea .menucontainer {
        position: absolute;
        right: -35px;
        display: flex;
        align-items: center;
        height: 100%;
    }
    
    .header .menuarea .menucontainer .menu-category {
        color: #333;
        height: 100%;
        display: flex;
        text-align: center;
        align-items: center;
    }
    
    .header .menuarea .menucontainer .menu-category:hover{
        background-color: #509ff8;
        color: #fff;
    }
    
    .header .menuarea .menucontainer .menu-category .menu-item {
        margin: 0 35px;
        font-weight: 700;
        box-sizing: border-box;
    }
    
    .header .menuarea .menucontainer .menu-category .subcategories {
        z-index: 9;
        position: fixed;
        left: 0;
        top: 120px;
        width: 100%;
        background-color: #509ff8;
        display: none;
    
    }
    
    .header .menuarea .menucontainer .menu-category:hover .subcategories {
        display: block;
    }
    
    .header .menuarea .menucontainer .menu-category .subcategories .inner {
        display: flex;
        height: 100px;
        align-items: center;
    }
    
    .header .menuarea .menucontainer .menu-category .subcategories .inner .subcategorylist {
        position: absolute;
        left: 0;
    }
    
    .header .menuarea .menucontainer .menu-category .subcategories .inner a {
        font-weight: 700;
        font-size: 14px;
        color: #fff
    }
    
    .header .menuarea .menucontainer .menu-category .subcategories .inner .subcategorylist .subcategoryitems {
        display: inline-block;
        padding: 0 30px 0 30px;
        border-right: 1px solid rgba(255,255,255, .3);
    }
    
    .header .menuarea .menucontainer .menu-category .subcategories .inner .subcategorylist .subcategoryitems:first-child {
        padding: 0 30px 0 0;
    }
    
    .header .menuarea .menucontainer .menu-category .subcategories .inner .subcategorylist .subcategoryitems:last-child {
        border-right: transparent;
    }

     

    이런 CSS를 좀 더 효율적으로 활용하기 위해 필요한 것이 바로 SCSS다.

    SCSS의 주요 개념을 정리하고, 직접 작성한 CSS 코드를 SCSS로 리팩토링해보는 포스팅.

     


     

    1. SCSS 시작하기

     

    SCSS란 CSS의 표준 전처리기다. 이외에도 less, stylus 등 다양한 CSS 전처리기가 존재한다.

    실제 브라우저에서 동작할 때는 CSS로 컴파일되기 때문에 일반 라이브서버만으로는 실행이 불가능하고, npm 환경 하에서 SASS를 인스톨해야 사용할 수 있다. 

     

    요렇게 해서 세팅 완료

     

    npm으로 parcel-bundler, sass를 설치해주었다. 이 포스팅은 원래 작성했던 css 코드를 리팩토링하는 과정을 기술하고 있지만, 추후 처음부터 scss로 코드를 작성하게 되더라도 내가 참여하고 있는 프로젝트에서는 scss를 사용하지 않기 때문에 결과물을 팀 vcs에 업로드할때는 아래 링크의 사이트를 통해 css로 바꿀 예정이다.

     

    https://www.sassmeister.com/

     

    SassMeister | The Sass Playground!

    SassMeister: The sassiest way to play with Sass, Compass, & LibSass! Loading...

    www.sassmeister.com

    SCSS를 CSS로 컴파일한 결과물을 보여주는 사이트.

     


     

    2. SCSS의 주요 문법

     

    SCSS는 일반 프로그래밍 언어에서 사용되는 반복문, 변수선언과 같은 개념들을 도입하여 CSS를 한층 더 쉽게 제어할 수 있게 해준다. 또한, 중첩선택자를 지원하여 개판오분전복잡한 CSS 선택자들의 가독성과 개발편의성을 높여준다.

     

    주석처리

     

    (1) 중첩선택자와 변수선언

     

    SCSS의 변수선언은 $기호를 사용하면 된다. 여러번 반복하여 사용하는 border 속성을 변수로 선언하고, 지저분한 선택자들을 중첩선택자를 통해 깔끔하게 정리해주었다. 이 변수는 여타 프로그래밍 언어와 동일하게 전역변수와 지역변수의 개념을 적용받는다.

     

    • 산술연산자를 사용할 수 있다.
      • 단, 나누기 연산자는 css 구분 기호와 동일한 형태를 지니기 때문에 사용에 주의가 필요하다.
      • 1) 나눌 값을 변수에 담아 사용하거나 (2) 소괄호로 해당 나눗셈 연산 부분을 괄호로 묶은 뒤 연산을 수행해야 제대로 된 값을 얻을 수 있다.
      • 단순 연산자는 단위가 같아야만 작동한다. (ex. calc(100% - 200px)은 연산이 불가능하다.)

     


    (2) 네임스페이스가 동일한 속성들의 제어

     

    font 속성 묶음
    bg속성 묶음

    font나 background처럼 같은 네임스페이스의 세부속성에 해당하는 항목들을 묶음으로 선언할 수 있다. [네임스페이스: {세부속성}]형태로 선언하면 된다. 그런데 VSCode에서는 이렇게 묶음으로 선언할 경우 경우 세부속성 자동완성 기능을 제공하지 않아서 각별히 편한지는... 가독성은 확실히 좋아지는것같지만.

     

     


     

    (3) 반복문

     

    for문을 사용할 수 있다. 아래와 같이 적고 for문을 적용하고 싶은 범위를 중괄호 블럭으로 감싸면 된다.

    @for $인덱스변수 from 시작값 though 끝값{
    내용
    }

     

    학원 프로젝트는 반복문을 적용하기가 여의치 않아서 인강 예제 프로젝트를 가져왔다.


    사진처럼 보간과 함께 활용하는 경우가 많다. 파이썬 포맷팅과 비슷한데 중괄호 앞에 # 하나가 더 붙는다.

     


     

    (4) 상위선택자 치환

     

    &기호를 사용하면 바로 위에 있는 선택자가 &의 위치로 치환되어 들어간다. 가상선택자 및 각종 이름이 유사한 하위선택자를 만들때 유용하게 사용할 수 있다.

     

    치환을 이용하여 가상선택자 꾸미기

     

    당연히 일반선택자도 만들어진다

     


    (5) Mixin

     

     

    Mixin이란, css의 속성값을 재활용하는 것을 의미한다.

    @mixin 이름 {
    }

    @include 이름(인수: 기본)

    기본값이면 인수 없어도 됨

    인수 당연히 여러개일수 있음
    기본적으로는 인수 순서는 맞춰야함
    키워드 인수 ($color: blue);

    @import "경로1", "경로2"

    확장자(SCSS) 안써도 됨

    minin 사용시
    @content 영역에 추가적인 내용 삽입하여 사용할수도 있음

     


    (6) SCSS에서 함수 선언하기

     

    • 함수
      @function ratio{$size, $ratio) {
      @return $size * $ratio
      }

     

    (7) SCSS의 내장함수들

    • 내장함수
      mix($color, red);
      보라색 됨
      lighten(red, 10%)
      darken(1, 2)
      saturate
      desaturate
      grayscale 1
      invert1 색반전
      rgba($color, .5)

    'IT 이야기 > FrontEnd' 카테고리의 다른 글

    JS 농구게임 개선하기  (0) 2021.09.21
    JS 농구게임 만들기  (0) 2021.09.21
    JS 로또뽑기 만들기  (0) 2021.09.20
    JS 가위바위보 게임 만들기  (0) 2021.09.20
    마크다운 (Markdown)  (0) 2021.09.05
Designed by Tistory.