Sass는 CSS로 컴파일 되는 스타일 시트 확장 언어이며 CSS 전처리기의 하나 브라우저가 Sass를 직접 로딩하는 것이 아니라 개발은 Sass를 기반으로 한 후, CSS로 익스포트하는 과정을 거친다.
Sass를 작성하는데에는 기본적으로 두가지 방법
//SCSS
$font-stack: Helvetica, sans-serif;
$primary-color : #333;
body {
font: 100% $font-stack
color: $primary-color
}
//Sass
$font-stack: Helvetica, sans-serif
$primary-color : #333
body
font: 100% $font-stack
color: $primary-color
각 프레임 별 css를 분리하고, variable과 mixin 파일도 따로 분리
메인 파일인 style.scss에 분리했던 파일들을 import
이렇게 파일을 스타일 별로 기능별로 분리하여 사용할 수 있으며 파일을 기능 별, 레이아웃 별로 분할해서 사용하기 때문에 코드를 관리하기 편리함
※ css는 import할 때 파일 URL을 적어줘야 하지만, Sass에서 import할 때는 확장명을 제외하고 파일명만을 사용할 수 있음
주석을 한 줄 작성할 때는 //을 사용하고, 작성한 주석 내용은 sass 내에서만 볼 수 있음
여러 줄을 작성할 경우 /*을 사용하고, scss파일이 컴파일 될 때 주석 내용이 css 파일에 나타남
Nesting(중첩)을 사용하면, html의 시각적 계층 방식과 동일하게 CSS를 중첩하여 작성할 수 있음
CSS코드가 구조화 되어 가독성이 높아지며 유지 보수하기 편리
<nav> <!--nav안에 ul이 중첩되어 있고-->
<ul> <!--ul안에 세가지 li가 중첩되어 있다.-->
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
</ul>
</nav>
//Scss
//Scss에서도 HTML처럼 계층구조로 스타일을 적용할 수 있다.
nav{
background : #C39BD3;
padding : 10px;
height: 50px;
ul{
display: flex;
list-style : none;
justify-content: flex-end;
li{
color: white;
margin-right: 10px;
}
}
}
기존 CSS는 부모에게 상속된 자식 요소에게 스타일을 적용하려고 할 때마다 최상위 선택자를 반복 선언
=> 중첩을 사용하면 최상위 선택자를 한번만 선언하여도 자식 선택자에게 스타일을 적용할 수 있게 되어 코드 반복을 줄임
//Scss
info-list {
div {
display: flex;
font-size: 14px;
color: #4f4f4f;
dt {
font-weight: 700;
margin-right: 7px;
}
}
}
// 중첩을 사용하여 부모선택자를 한번만 사용
// 그리고 코드를 봤을 때 info-list div tag안에 dt가 들어있음을 한눈에 알아볼 수 있음
중첩은 선택자뿐만 아니라 스타일 속성들도 가능
속성을 중첩 할 때는 콜론:을 사용
Sass는 속성이 중첩되었음을 인지하고 css 속성들로 변환
//Scss
.add-icon {
background : {
image: url("./assets/arrow-right-solid.svg");
position: center center;
repeat: no-repeat;
size: 14px 14px;
}
}
/*CSS*/
.add-icon {
background-image: url("./assets/arrow-right-solid.svg");
background-position: center center;
background-repeat: no-repeat;
background-size: 14px 14px;
}
"&"는 상위에 있는 부모선택자를 가르킴
1) &
을 이용하여 after, hover 등의 가상요소, 가상클래스, class나 id 셀렉터 등을 참조
.box {
&:focus{} // 가상선택자
&:hover{}
&:active{}
&:first-child{}
&:nth-child(2){}
&::after{} // 가상요소
&::before{}
}
2) &
를 응용하면 아래 예시와 같이 공통 클래스 명을 가진 선택자들을 중첩시킬 수 있음
//Scss
.box {
&-yellow {
background: #ff6347;
}
&-red {
background: #ffd700;
}
&-green {
background: #9acd32;
}
}
//.box라는 이름이 같기 때문에 &를 사용해 중첩구조로 만들 수 있다
3) & 은 자신의 부모 선택자를 참조하지만 중첩이 깊어지면, 자신의 직계 부모가 아닌 최상위 부모 선택자로부터 참조
//Scss
.nav {
height: 60px;
font-size: 18px;
.nav-list {
background: #3e68ff;
span {
padding: 10px 13px;
a {
color: white;
.one {
& .two {
color: skyblue;
}
}
}
}
}
}
=> 깊은 중첩을 하게 되면서 불필요한 선택자들이 사용
@at-root
키워드를 사용하면 중첩에서 벗어날 수 있다
중첩에서 벗어나고 싶은 선택자 앞에 @at-root
를 작성
컴파일된 css 코드에서 @at-root
를 사용한 선택자가 중첩에서 벗어났음을 확인할 수 있음
중첩된 선택자에게만 사용
//Scss
.article {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 10px;
.article-content {
font-size: 14px;
opacity: 0.7;
@at-root i {
opacity: 0.5;
}
}
}
감사합니다