文件
Storybook 文件

Viewport

觀看影片教學

Viewport 工具列項目可讓您調整 Story 渲染所在 iframe 的尺寸。這讓開發響應式 UI 變得容易。

globals API

此附加元件已更新為使用 globals API,當 viewportStoryGlobals 功能標誌 啟用時。使用 globals,當您為 Story 指定 viewport 時,無法從工具列覆寫,這確保了在 Story 之間導航時體驗的一致性。這將是 Storybook 9 中的預設行為和 API。

設定

Viewport 附加元件開箱即用,提供一組標準的 viewport 供您使用。如果您想變更預設的 viewport 集合,您可以使用 viewport 參數 在您的 .storybook/preview.js 中設定您自己的 viewport。

您可以使用 viewports 屬性 定義可用的 viewport,並使用 defaultViewport 屬性 設定初始 viewport

.storybook/preview.ts
// Replace your-renderer with the renderer you are using (e.g., react, vue3, angular, etc.)
import { Preview } from '@storybook/your-renderer';
import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport';
 
const preview: Preview = {
  parameters: {
    viewport: {
      viewports: INITIAL_VIEWPORTS,
      defaultViewport: 'ipad',
    },
  },
};
 
export default preview;

使用 globals API

當使用 globals API 時,您必須使用 options 屬性 定義可用的 viewport。可以使用 initialGlobals 屬性設定初始 viewport,該屬性接受與此附加元件的 globals 相同的物件屬性。

.storybook/preview.ts
// Replace your-renderer with the renderer you are using (e.g., react, vue3, angular, etc.)
import { Preview } from '@storybook/your-renderer';
 
const preview: Preview = {
  parameters: {
    viewport: {
      options: INITIAL_VIEWPORTS,
    },
  },
  initialGlobals: {
    viewport: { value: 'ipad', isRotated: false },
  },
};
 
export default preview;

使用詳細的裝置集合

預設情況下,Viewport 附加元件將使用最小的 viewport 集合,這使您能夠在常見的響應式情境中測試您的 UI。這些也在 MINIMAL_VIEWPORTS 導出 中提供,並包含以下裝置

Key描述尺寸
(×,像素)
mobile1小型手機320 × 568
mobile2大型手機414 × 896
tablet平板834 × 1112

如果您需要更詳細的裝置集合,您可以使用 INITIAL_VIEWPORTS 導出,其中包含以下裝置

Key描述尺寸
(×,像素)
iphone5iPhone 5320 × 568
iphone6iPhone 6375 × 667
iphone6piPhone 6 Plus414 × 736
iphone8piPhone 8 Plus414 × 736
iphonexiPhone X375 × 812
iphonexriPhone XR414 × 896
iphonexsmaxiPhone XS Max414 × 896
iphonese2iPhone SE (第 2 代)375 × 667
iphone12miniiPhone 12 mini375 × 812
iphone12iPhone 12390 × 844
iphone12promaxiPhone 12 Pro Max428 × 926
iphoneSE3iPhone SE 第 3 代375 × 667
iphone13iPhone 13390 × 844
iphone13proiPhone 13 Pro390 × 844
iphone13promaxiPhone 13 Pro Max428 × 926
iphone14iPhone 14390 × 844
iphone14proiPhone 14 Pro393 × 852
iphone14promaxiPhone 14 Pro Max430 × 932
galaxys5Galaxy S5360 × 640
galaxys9Galaxy S9360 × 740
nexus5xNexus 5X412 × 668
nexus6pNexus 6P412 × 732
pixelPixel540 × 960
pixelxlPixel XL720 × 1280
mobile1小型手機
(也在 MINIMAL_VIEWPORTS 中)
320 × 568
mobile2大型手機
(也在 MINIMAL_VIEWPORTS 中)
414 × 896
ipadiPad768 × 1024
ipad10piPad Pro 10.5 吋834 × 112
ipad11piPad Pro 11 吋834 × 1194
ipad12piPad Pro 12.9 吋1024 × 1366
tablet平板
(也在 MINIMAL_VIEWPORTS 中)
834 × 1112

若要使用詳細的裝置集合,您可以將設定中的 viewports 屬性替換為 INITIAL_VIEWPORTS 導出

.storybook/preview.ts
// Replace your-renderer with the renderer you are using (e.g., react, vue3, angular, etc.)
import { Preview } from '@storybook/your-renderer';
import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport';
 
const preview: Preview = {
  parameters: {
    viewport: {
      viewports: INITIAL_VIEWPORTS,
      defaultViewport: 'ipad',
    },
  },
};
 
export default preview;

使用 globals API

當使用 globals API 時,可用的 viewport 是使用 options 屬性 定義的。

.storybook/preview.ts
// Replace your-renderer with the renderer you are using (e.g., react, vue3, angular, etc.)
import { Preview } from '@storybook/your-renderer';
 
const preview: Preview = {
  parameters: {
    viewport: {
      options: INITIAL_VIEWPORTS,
    },
  },
  initialGlobals: {
    viewport: { value: 'ipad', isRotated: false },
  },
};
 
export default preview;

新增裝置

如果預定義的 viewport 無法滿足您的需求,您可以將新裝置新增至 viewport 列表。例如,讓我們將兩個 Kindle 裝置新增至預設的最小 viewport 集合

使用 globals API

當使用 globals API 時,請注意可用的 viewport 是使用 options 屬性 定義的。

.storybook/preview.ts
// Replace your-renderer with the renderer you are using (e.g., react, vue3, angular, etc.)
import { Preview } from '@storybook/your-renderer';
import { MINIMAL_VIEWPORTS } from '@storybook/addon-viewport';
 
const kindleViewports = {
  kindleFire2: {
    name: 'Kindle Fire 2',
    styles: {
      width: '600px',
      height: '963px',
    },
  },
  kindleFireHD: {
    name: 'Kindle Fire HD',
    styles: {
      width: '533px',
      height: '801px',
    },
  },
};
 
const preview: Preview = {
  parameters: {
    viewport: {
      viewports: {
        ...MINIMAL_VIEWPORTS,
        ...kindleViewports,
      },
    },
  },
};
 
export default preview;

設定每個元件或 Story

在某些情況下,在全球範圍內使用特定的視覺 viewport 不切實際,您需要針對個別 Story 或元件的一組 Story 進行調整。

Parameters 可以應用於專案、元件和 Story 層級,這讓您可以根據需要指定設定。例如,您可以為元件的所有 Story 設定可用的 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: {
    viewport: {
      //👇 Set available viewports for every story in the file
      viewports: INITIAL_VIEWPORTS,
    },
  },
};
 
export default meta;

定義 Story 的 viewport

Viewport 附加元件讓您能夠透過從工具列中預定義的 viewport 列表中選擇來變更應用於 Story 的 viewport。如果需要,您可以使用 parameters.viewport.default 參數將 Story 設定為預設為特定的 viewport

Button.stories.ts|tsx
// Replace your-framework with the name of your framework
import type { Meta, StoryObj } from '@storybook/your-framework';
 
import { Button } from './Button';
 
const meta: Meta<typeof Button> = {
  component: Button,
  parameters: {
    // 👇 Set default viewport for all component stories
    viewport: { defaultViewport: 'tablet' },
  },
};
 
export default meta;
type Story = StoryObj<typeof Button>;
 
export const OnPhone: Story = {
  parameters: {
    // 👇 Override default viewport for this story
    viewport: { defaultViewport: 'mobile1' },
  },
};

顧名思義,此方法僅設定 Story 的預設 viewport。當檢視 Story 時,您仍然可以使用工具列變更 viewport。

使用 globals API

當您使用 globals 為 Story(或元件的 Stories)指定 viewport 時,viewport 會被應用,且無法使用工具列變更。當您想要確保 Story 始終在特定的 viewport 上渲染時,這非常有用。

Button.stories.ts|tsx
// Replace your-renderer with the renderer you are using (e.g., react, vue3, angular, etc.)
import type { Meta, StoryObj } from '@storybook/your-renderer';
 
import { Button } from './Button';
 
const meta: Meta<typeof Button> = {
  component: Button,
  globals: {
    // 👇 Set viewport for all component stories
    viewport: { value: 'tablet', isRotated: false },
  },
};
 
export default meta;
type Story = StoryObj<typeof Button>;
 
export const OnPhone: Story = {
  globals: {
    // 👇 Override viewport for this story
    viewport: { value: 'mobile1', isRotated: false },
  },
};

API

鍵盤快捷鍵

如果需要,您可以在快捷鍵頁面編輯這些。

  • 下一個 viewport:alt + v
  • 上一個 viewport:alt + shift + v
  • 重設 viewport:alt + control + v

使用 globals API

Globals

此附加元件將以下 globals 貢獻給 Storybook,在 viewport 命名空間下

value

類型:string

設定後,viewport 會被應用,且無法使用工具列變更。必須與 可用的 viewport 之一的 key 相符。

isRotated

類型:boolean

為 true 時,應用的 viewport 將旋轉 90°,例如,它將從直向旋轉為橫向。

Parameters

此附加元件將以下 參數 貢獻給 Storybook,在 viewport 命名空間下

defaultOrientation

類型:'portrait' | 'landscape'

預設值:'portrait'

指定檢視 Story 時使用的預設方向。僅在您尚未啟用 globals API 時可用。

defaultViewport

類型:string

指定檢視 Story 時使用的預設 viewport。必須與 viewports(或 options)物件中的 key 相符。

disable

使用 globals API

請注意,該屬性已重新命名為 disabled

類型:boolean

關閉此附加元件的行為。如果您希望關閉整個 Storybook 的此附加元件,您應該在註冊 addon-essentials 時執行此操作。請參閱基礎附加元件的文件以取得更多資訊。

此參數對於允許在更特定的層級覆寫最有用。例如,如果此參數在專案層級設定為 true,則可以透過在 meta(元件)或 Story 層級將其設定為 false 來重新啟用它。

viewports

類型

{
  [key: string]: {
    name: string;
    styles: { height: string, width: string };
    type: 'desktop' | 'mobile' | 'tablet';
  };
}

指定可用的 viewport。請參閱上方的使用範例widthheight 值必須包含單位,例如 '320px'

使用 globals API

options

類型

{
  [key: string]: {
    name: string;
    styles: { height: string, width: string };
    type: 'desktop' | 'mobile' | 'tablet' | 'other';
  };
}

取代:viewports

指定可用的 viewport。請參閱上方的使用範例widthheight 值必須包含單位,例如 '320px'

Exports

此附加元件將以下 exports 貢獻給 Storybook

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

INITIAL_VIEWPORTS

類型:object

Viewport 附加元件提供的完整初始 viewport 集合,如上所列

MINIMAL_VIEWPORTS

類型:object

Viewport 附加元件提供的最小 viewport 集合 如上所列。這些是預設使用的。