Grace
grace's dev_note
Grace
전체 방문자
오늘
어제
  • 분류 전체보기
    • FrontEnd
      • Next.js
      • React
      • ReactNativ..
      • Vue
    • Javascript
      • 러닝 자바스크립트
      • 모던 자바스크립트
    • CS
    • DataScienc..
      • Data Struc..
      • LeetCode
    • BackEnd
      • Express
      • Node.js
      • Nest.js
    • DevOps
      • Docker
    • 매일메일
    • 회고
    • 코드캠프

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 번들러
  • backend
  • nest.js
  • Express
  • postgres
  • vue-query
  • vitejs
  • 함수
  • pinia
  • PostgreSQL
  • React Native
  • javascript
  • node.js
  • Vue.js
  • tanstack
  • 자바스크립트
  • Vue3
  • 알고리즘
  • Vue
  • Vite

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Grace
FrontEnd/Next.js

Next.js와 호환이 잘 되는, SSR에 최적화된 스타일 컴포넌트, Emotion

FrontEnd/Next.js

Next.js와 호환이 잘 되는, SSR에 최적화된 스타일 컴포넌트, Emotion

2022. 11. 17. 18:59

mediaQuery

Emotion에서 미디어 쿼리를 사용하는 것은 일반 css에서 사용하는 것과 같습니다.

const Wrapper = styled.div`
  font-size: 100px;
  @media (min-width: 420px) {
    font-size: 50px;
  }
`;

재사용 가능한 미디어 쿼리

미디어 쿼리는 반응형 앱을 만드는 데 유용할 수 있지만 반복해서 작성해주면 각 스타일마다 다르게 적용될 수도 있고 비효율적입니다. 사용할 때마다 다시 작성하는 대신 상수로 옮겨 사용하고 싶을 때마다 참조할 수 있습니다.

const breakpoints = [576, 768, 992, 1200];
const mq = breakpoints.map((bp) => `@media (min-width: ${bp}px)`);

const Wrapper = styled.div`
  font-size: 100px;
  ${mq[0]} {
    font-size: 50px;
  }
`;

facepaint

상수로 미디어 쿼리를 정의하는 것이 매번 미디어 쿼리를 다시 작성하는 것보다 훨씬 쉽지만 일반적으로 다른 중단점에서 동일한 속성을 변경하려고 하기 때문에 여전히 문제가 있습니다. facepaint를 사용하여 미디어 쿼리에서 각 css 속성이 배열로 있어야 하는 것을 정의할 수 있게 하여 쉽게 사용할 수 있습니다..

단, 객체스타일 css에서만 사용할 수 있습니다.

yarn add facepaint
const mq = facepaint(breakpoints.map((bp) => `@media (min-width: ${bp}px)`));

Theming

theme는 @emotion/react패키지에 포함되어 있습니다.

ThemeProvider 앱의 최상위 수준에 추가하고 props.theme로 테마에 접근할 수 있는 기능을 제공합니다.

// _app.tsx
import {ThemeProvider} from '@emotion/react'

declare module '@emotion/react' {
    export interface DefaultTheme {
     colors: {
         primary: string;
     }
    }
}

const theme:DefaultTheme = {
    colors: {
      primary: 'hotpink'
    }
}

return(
    <ThemeProvider theme={theme}>
          <Component {...pageProps} />
      </ThemeProvider>
)
// styled에서 props.theme로 사용
const Wrapper = styled.div`
    color: ${(props)=> props.theme.colors.primary}
`
저작자표시 비영리 변경금지 (새창열림)

'FrontEnd > Next.js' 카테고리의 다른 글

Third-Party Cookies Blocking과 Storage Access API  (0) 2022.11.30
Recoil로 State 관리하기  (0) 2022.11.30
Shallow Routing  (0) 2022.11.02
  • mediaQuery
  • 재사용 가능한 미디어 쿼리
  • facepaint
  • Theming
'FrontEnd/Next.js' 카테고리의 다른 글
  • Third-Party Cookies Blocking과 Storage Access API
  • Recoil로 State 관리하기
  • Shallow Routing
Grace
Grace
기술 및 회고 블로그

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.