SCSS mixin으로 font 및 반응형 레이아웃 정의하기

2024. 4. 21. 20:29·Side Project/Pennyway

0. TL;DR

  • Font
    • 성능을 위해 woff2, subset font 사용. 지원 안할 경우를 대비 woff는 fallback font로 설정
    • mixin을 사용해 classname으로 간단히 font 사용 가능하도록
  • Layout
    • 모든 iPhone 사이즈에 대응가능하도록 media query로 계산
    • mixin을 사용해 레이아웃 요소가 일관적인 사이즈 유지하도록

1. Why?

  • 현재 iPhone용 App에 들어갈 Webview page 제작 중
  • mixin을 사용해서 팀이 사용할 Font와 Layout을 설정해보자

2. Font

  • 빠르게 Font를 설정할 수 있도록, 용량이 가장 작은 woff2 사용
  • woff를 지원하지 않을 경우를 대비해 woff를 fallback font로 설정
  • 또한 기본 font 대비 1/3가량인 subset font 사용
@mixin font-style($weight, $size, $line-height) {
  font-family: 'Pretendard', sans-serif;
  font-weight: $weight;
  font-size: $size * 1rem;
  letter-spacing: -3%;
  line-height: $line-height;

  @font-face {
    font-family: 'Pretendard';
    src: url('/assets/font/pretendard-#{$weight}-subset.woff2') format('woff2'),
         url('/assets/font/pretendard-#{$weight}-subset.woff') format('woff');
    font-weight: $weight;
    font-style: normal;
  }
}

.h1bold { @include font-style(bold, 1.5, 130%); }
// 이 외 지정 폰트들...
  • mixin을 사용해서 font마다 다른 3가지(weight, size, line-height)를 입력받고 각각의 class를 정의
  • 설정된 font classname을 간단하게 사용할 수 있도록 선언

3. Layout

@mixin responsive-dimensions($default-width, $default-height) {
  width: $default-width;
  height: $default-height;

  @media (min-height: 1px) and (max-height: 480px) {
    // iPhone 3, 4S
    width: $default-width * 0.95;
    height: $default-height * 0.95;
  }
  @media (min-height: 481px) and (max-height: 568px) {
    // iPhone 5, SE 1
    width: $default-width;
    height: $default-height;
  }
// 이 외 아이폰 사이즈들...
  • iPhone용 App이니 모든 iPhone 사이즈에 대응할 수 있도록 media query로 계산해줌
  • 아래와 같이 사용하면 간편하게 계산된 사이즈 적용 가능
//_index.scss
@forward 'colors.scss';
@forward 'fonts.scss';
@forward 'responsive.scss';

// 사용할파일.scss
@use '경로/_index.scss' as *;

.button {
  @include responsive-dimensions(48px, 24px);
}

4. 래퍼런스

https://blog.banksalad.com/tech/font-preload-on-safari/

 

지연 시간 없이 웹폰트 서빙하기 - Feat. Safari & Edge functions | 뱅크샐러드

안녕하세요 뱅크샐러드 Web Front-End Engineer 민찬기입니다. 여러분들은 운영하시는 서비스의 폰트를 바꾸신 적이 있으신가요? 바꾸시는 과정에서 어떤 어려움을 겪으셨나요? 눈썰미가 남다르신 분

blog.banksalad.com

https://velog.io/@sammy1101/CSS-SCSS%EC%99%80-styled-component%EC%9D%98-mixin-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%86%8C%EA%B0%9C

 

[CSS] SCSS와 styled-component의 mixin 그리고 사용법

꽤 오래전부터 듣기만 했던 scss와 styled-component에서의 mixin을 한번 알아보고자 정리를 해보았다!사실 10개월간 회사에서 styled-component를 쓰면서 믹스인을 쓴적은 없지만 이전부터 css를 간결하게

velog.io

 

'Side Project > Pennyway' 카테고리의 다른 글

코드 가꾸기 - 테스트 코드  (0) 2024.07.09
커뮤니케이션 잘 하기  (0) 2024.06.16
최고의 공통 컴포넌트를 찾아서  (0) 2024.05.21
eslint + husky + lint-staged로 CI 부담 덜어주기  (1) 2024.04.18
'Side Project/Pennyway' 카테고리의 다른 글
  • 코드 가꾸기 - 테스트 코드
  • 커뮤니케이션 잘 하기
  • 최고의 공통 컴포넌트를 찾아서
  • eslint + husky + lint-staged로 CI 부담 덜어주기
이의찬
이의찬
철학 학사의 개발블로그
  • 이의찬
    Übermensch Dev
    이의찬
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • Frontend (8)
        • Js & Ts (1)
        • React & Next.js (3)
        • Etc (4)
      • DevOps (1)
      • Backend (0)
      • Side Project (29)
        • Pennyway (5)
        • 스타게이트 (4)
        • 모익 (5)
        • 관리하당 (4)
        • 기타 (6)
        • 프로젝트 회고 (5)
      • Computer Science (2)
      • 주절주절 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 카테고리
  • 링크

    • LinkedIn
    • Github
  • 공지사항

  • 인기 글

  • 태그

    아워홈사전과제
    REF
    스타게이트
    프론트폴더구조
    Next.js
    setInterval
    forwardRef
    모익
    Atomic
    Next.js14
    우수프로젝트
    ampify
    이력서
    eslint
    Page Visibility API
    SSAFY
    사전과제
    amplify preview
    react 폴더구조
    공통 컴포넌트
    구름톤
    React
    과제테스트
    폴더구조
    SSAFY우수
    영남대철학과
    next 폴더구조
    관리하당
    useRef
    amplify gitlab
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
이의찬
SCSS mixin으로 font 및 반응형 레이아웃 정의하기
상단으로

티스토리툴바