• Sass[SCSS] 기초 이론 1 - 주석, 중첩(Nesting), 부모 선택자 참조(& Ampersand) 사용하기

    2023. 1. 31.

    by. kimyang-Sun

    Sass

    Scss 기초적인 부분을 기록해두려고 합니다.

    우선 주석을 사용해볼게요. Scss 의 주석은 두가지가 있는데 자바스크립트와 마찬가지로

    해당하는 줄에 적용하는 주석인 //, 그리고 해당하는 지정영역에 적용하는 주석인 /*  */ 이 두 가지가 있습니다.

    // 이 주석은 컴파일 후에 사라짐
    /* 이 주석은 컴파일 후에도 남아있음 */

    scss 주석
    컴파일된 css 파일

    여기서 특이점은 // 주석은 컴파일된 css 파일에서 사라진다는 점입니다.

    반면에 /* */ 주석은 컴파일돼서 css 파일에 잘 나타나는 모습입니다. 컴파일 된 후에도 남아있어야 할 주석은 /*  */으로 해줘야 겠죠??

     

    이어서 기본적인 scss를 쭉 작성한 코드를 올려볼게요 :)

    // 이 주석은 컴파일 후에 사라짐
    /* 이 주석은 컴파일 후에도 남아있음 */
    .link-list {
      .link-item { // 선택자 중첩(Nesting)
        .link {
          display: inline-block;
          text-align: center;
          &:hover, &:focus { // 부모요소 선택자 참조 &(Ampersand)
            color: gold;
          } 
          &::before, &::after {
            content: "";
            display: block;
            width: 10px;
            height: 10px;
            background-color: blue;
          }
          &:hover::before, &:focus::before {
            background-color: skyblue;
          }
          &:hover::after, &:focus::after {
            background-color: darkblue;
          }
          &-block {
            display: block;
          }
          &-flex {
            display: flex;
          }
          &.red {
            color: red;
          }
        }
      }
    }

     

    scss는 중첩(Nesting)이 가능한데, 위에서처럼 .link-list 안에서 괄호를 열어가면서 계속 중첩해서 자식 선택자를 쓸 수 있습니다.

    여기서 중첩을 사용하면 좋은점은 여기서 만약 HTML에서 link-list 라는 클래스가 link-group 이라는 클래스로 변경이 된다면

    실제 css에서는 link-list 부분을 전부 찾아서 일괄 변경을 해줘야하는 번거로움이 있는데

    scss에선 중첩을 사용하기 때문에 가장 바깥에 link-list만 link-group으로 변경해주면 css로 컴파일되면서 한번에 다 바뀝니다. :)

     

    그리고 괄호 안에서 부모요소 선택자를 참조할 수 있는 &(Ampersand) 를 볼 수 있는데,

    위에 코드에서 &:hover 나 &::before 등으로 .link 괄호 안에서  .link 를 참조해서 사용할 수 있습니다.

     

    아래쪽에 &-block 이나 &-flex 와 같이 저런식으로 응용해서 사용하면 link-block 클래스와 link-flex 클래스에 css를 줄 수 있고,

    마찬가지로 &.red 를 사용하면 .link.red, 즉 link 클래스와 red 클래스를 둘 다 가지고 있는 선택자를 선택할 수 있습니다.

     

    아래는 이렇게 해서 컴파일된 css 파일입니다.

     

    @charset "UTF-8";
    /* 이 주석은 컴파일 후에도 남아있음 */
    .link-list .link-item .link {
      display: inline-block;
      text-align: center;
    }
    .link-list .link-item .link:hover, .link-list .link-item .link:focus {
      color: gold;
    }
    .link-list .link-item .link::before, .link-list .link-item .link::after {
      content: "";
      display: block;
      width: 10px;
      height: 10px;
      background-color: blue;
    }
    .link-list .link-item .link:hover::before, .link-list .link-item .link:focus::before {
      background-color: skyblue;
    }
    .link-list .link-item .link:hover::after, .link-list .link-item .link:focus::after {
      background-color: darkblue;
    }
    .link-list .link-item .link-block {
      display: block;
    }
    .link-list .link-item .link-flex {
      display: flex;
    }
    .link-list .link-item .link.red {
      color: red;
    }

     

    추가로 접두어(Prefix) 와 @at-root 의 사용법도 알아볼게요.

    .link-list {
      font: { /* 접두어(Prefix) - 공통 접두어 부분 합쳐 사용하기 */
        size: 18px;
        weight: bold;
      }
      .link-item {
        color: red;
        @at-root .link { /* @at-root 부모 선택자 중첩 나가기 (중첩 안에서 사용하면서 중첩 바깥으로 빼기) */
          display: block;
        }
      }
    }

    이런식으로 font-size와 font-weight에 공통으로 들어가는 접두어 font를 이용해서 저런식으로 작성해줄 수 있습니다.

    @at-root의 경우는 중첩 안에서 사용하면서 중첩 바깥으로 빼는 경우에 사용하는데 아래 컴파일된 모습처럼 @at-root .link를 선택해준 부분은 .link 로 컴파일된걸 볼 수 있습니다.

    .link-list {
      font-size: 18px;
      font-weight: bold;
    }
    .link-list .link-item {
      color: red;
    }
    .link {
      display: block;
    }

     

    댓글