-
SCSSIT 이야기/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로 바꿀 예정이다.
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 - 산술연산자를 사용할 수 있다.