리액트에서 컴포넌트를 스타일링 할때엔 다양한 방식을 사용한다.
import './App.css';
.App .logo {
animation: App-logo-spin infinite 20s linear;
height: 40vmin;
}
❓ 참고) .scss vs .sass 차이점
.sass 확장자는 중괄호({})와 세미콜론(;)을 사용하지 않는다.
// (.sass)
$font-stack: Helvetica, sans-serif
$primary-color: #eee;
body
font: 100% $font-stack
color: $primary-color
// (.scss)
$font-stack: Helvetica, sans-serif;
$primary-color: #eee;
body {
font: 100% $font-stack;
color: $primary-color;
}
1) import(불러오기) : 보통의 CSS파일처럼 import로 불러오는 방식으로 스타일 파일을 여러개 나누어서 관리를 한다.
scss파일명은 사용해도되고 사용하지 않아도 된다.
// @import "파일명.scss" 또는 @import "파일명";
만약에 .scss 파일이나 .scss 파일의 이름을 underscore(_)로 시작하면 css파일로 따로 컴파일되지 않는다. html에서 해당 css파일을 불러올일이 없고, import만 되는 경우에는 이 기능을 사용하면 된다.
2) 변수사용 : $변수명: 변수에넣을값;
// (Detail.scss)
$main-color: #ff0000;
.red {
color: $main-color;
}
3) nesting : 셀렉터해석이 쉬우며, 관련된 class들 끼리 관리하기가 쉽다.
// ( Detail.css )
div.container h1 {
font-size: 30px;
}
div.container p {
color: #ffaaaa;
}
// ( Detail.scss )
div.container {
h1 {
font-size: 30px;
}
p {
color: #ffaaaa;
}
}
4) extend(상속) : sass 에서 특정 선택자를 상속 할 때, @extend 지시자를 사용한다.
CSS코드를 재사용할 일이 있을 때 비슷한 UI 만들기도 쉬워진다.
// (box.scss)
// @extend .클래스명; 또는 @extend %클래스명;
.box {
background-color: #000000;
color: #fff;
padding: 30px;
border-radius: 7px;
}
.box-red {
@extend .box;
background-color: red;
}
.box-blue {
@extend .box;
background-color: blue;
}
// ( CSSModule.js )
import React from 'react';
import styles from './CSSModule.module.css';
function CSSModule(){
return(
<div className={`${styles.wrapper} ${styles.inverted}`}>
안녕하세요, 저는 <span className={styles.something}>CSS Module</span>입니다.
</div>
)
}
// ( CSSModule.module.css )
/* 자동으로 고유해질 것이므로 흔히 사용되는 단어를 클래스 이름으로 마음대로 사용 가능 */
.wrapper {
background: black;
padding: 1rem;
color: white;
font-size: 2rem;
}
.inverted {
color: balck;
background: white;
border: 1px solid black;
}
/* 글로벌 CSS를 작성하고 싶다면(전역적으로 사용되는 경우) */
:global .something {
font-weight: 800;
color: black;
}
❓ 참고) ES6 문법 템플릿 리터럴(Template Literal)
→ 문자열 안에 자바스크립트 레퍼런스를 쉽게 넣어줄 수 있다.
→ ``(백틱, Backtick)을 사용한다.const name = '리액트'; // const message = '제 이름은 ' + name + '입니다.' const message = `제 이름은 ${name} 입니다`;
① yarn add styled-components
또는
② npm install styled-components
① import 해오기
import styled , { css } from 'Styled-Components';
② styled.html태그` `(백틱); 사용
styled.div`
// <div> HTML element에 대한 스타일 작성
`;
또는
let box = styled.div`
padding: 20px;
`;
③ component안에 사용하기
예시) padding: 25px인 <div>박스와 font-size: 30px, color: blue;인 <h2> 를 만들 때
import React from 'react';
import styled, { css } from 'Styled-Components';
let box = styled.div`
padding: 25px;
`;
let title = styled.h2`
font-size: 30px;,
color: blue;
`;
function Detail(){
reutnr(
<div>
<box>
<title>제목입니다.</title>
</box>
</div>
)
}