개발/Storybook

[Storybook] 필수 addon - Viewport

@wadoob 2023. 7. 6. 10:42

스토리북에서 Viewport 툴바를 사용하면 스토리가 렌더링되는 iframe의 크기를 조정할 수 있습니다. 이를 통하여 반응형 UI를 쉽게 개발할 수 있습니다.

 

설치

$ npm i -D @storybook/addon-viewport

그런 다음 .storybook/main.ts 에 다음과 같이 추가합니다.

export default {
  addons: ['@storybook/addon-viewport'],
};

설정

기본적으로 Viewport 애드온은 표준 Viewport 세트를 제공합니다.

기본 Viewport 세트를 변경하려는 경우, 전역 파라미터로 설정할 수 있습니다. 다음과 같이 .storybook/preview.js 에 viewport 파라미터로 설정 가능합니다.

// .storybook/preview.ts

// Replace your-framework with the framework you are using (e.g., react, vue3)
import { Preview } from '@storybook/your-framework';

const preview: Preview = {
  parameters: {
    viewport: {
      viewports: newViewports, // newViewports would be an ViewportMap. (see below for examples)
      defaultViewport: 'someDefault',
    },
  },
};

export default preview;
타입 설명 예제 값
defaultViewport String 기본 viewport를 설정합니다. 'responsive'
defaultOrientation String 기본 방향을 설정합니다. (ex. portrait, landscape) 'portrait'
disable Boolean viewport를 비활성화합니다. N/A
viewports Object viewport에 대한 설정 객체 {}

viewports 객체

타입 설명 예제 값
name String viewport 이름 'Responseive'
styles Object 스토리에 적용할 인라인 스타일을 설정합니다. {width:0,height:0}
type String 기기 타입(ex. desktop, mobile, tablet) desktop

상세한 기기 세트 사용

기본적으로, 스토리북은 최소한의 뷰포트 세트를 사용하여 시작할 수 있습니다. 

.storybook/preview.js 를 다음과 같이 수정합니다.

// .storybook/preview.ts

// Replace your-framework with the framework you are using (e.g., react, vue3)
import { Preview } from '@storybook/your-framework';

import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport';

const preview: Preview = {
  parameters: {
    viewport: {
      viewports: INITIAL_VIEWPORTS,
    },
  },
};

export default preview;

스토리북을 시작하면, 사용할 수 있는 새 장치를 확인할 수 있습니다.

장치 및 구성의 전체 목록은 여기를 참조하세요.

새 장치 추가

특정 viewport가 필요한 경우, .storybook/preview.ts 파일에 다음과 같이 추가할 수 있습니다.

// .storybook/preview.js|ts

const customViewports = {
  kindleFire2: {
    name: 'Kindle Fire 2',
    styles: {
      width: '600px',
      height: '963px',
    },
  },
  kindleFireHD: {
    name: 'Kindle Fire HD',
    styles: {
      width: '533px',
      height: '801px',
    },
  },
};

스토리북에서 사용하려면 다음과 같이 수정합니다.

// .storybook/preview.ts

// Replace your-framework with the framework you are using (e.g., react, vue3)
import { Preview } from '@storybook/your-framework';

const preview: Preview = {
  parameters: {
    viewport: { viewports: customViewports },
  },
};

export default preview;

컴포넌트, 스토리별 구성

때로는 보편적인 viewport 보다 컴포넌트별, 스토리별 개별 viewport를 설정하여 사용해야 할 때가 있습니다. 이를 사용하기 위해서는 Story 의 parameter 에 viewport를 추가하면 됩니다. 아래의 코드를 참조합니다.

// MyComponent.stories.ts|tsx

import type { Meta, StoryObj } from '@storybook/react';

import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport';

import { MyComponent } from './MyComponent';

const meta: Meta<typeof MyComponent> = {
  component: MyComponent,
  parameters: {
    //👇 The viewports object from the Essentials addon
    viewport: {
      //👇 The viewports you want to use
      viewports: INITIAL_VIEWPORTS,
      //👇 Your own default viewport
      defaultViewport: 'iphone6',
    },
  },
};

export default meta;
type Story = StoryObj<typeof MyComponent>;

export const MyStory: Story = {
  parameters: {
    viewport: {
      defaultViewport: 'iphonex',
    },
  },
};

단축키

  • 이전 viewport로 전환: shift + v
  • 다음 viewport로 전환: v
  • viewport reset: alt + v

필요한 경우, shortcuts 페이지에서 편집할 수 있습니다.