文件
Storybook 文件

視窗

觀看影片教學

「視窗」工具列項目可讓您調整渲染 story 的 iframe 的尺寸。它讓開發響應式 UI 變得容易。

globals API

此擴充功能已更新為在啟用 viewportStoryGlobals 功能旗標時使用 globals API。使用 globals 時,如果您為 story 指定了視窗,則無法從工具列覆寫它,這可確保在 story 之間導覽時體驗一致。這將是 Storybook 9 中的預設行為和 API。

設定

「視窗」擴充功能可讓您直接使用一組標準視窗。如果您想要變更預設視窗組,您可以使用 viewport 參數.storybook/preview.js 中設定自己的視窗。

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

.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 屬性定義可用的視窗。可以使用 initialGlobals 屬性設定初始視窗,該屬性接受與此擴充功能的 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: {
      viewports: INITIAL_VIEWPORTS,
    },
  },
  initialGlobals: {
    viewport: { value: 'ipad', isRotated: false },
  },
};
 
export default preview;

使用詳細的裝置組

依預設,「視窗」擴充功能會使用一組最小視窗,讓您能夠在常見的響應式案例中測試 UI。這些也適用於 MINIMAL_VIEWPORTS 匯出,並包含下列裝置

索引鍵描述尺寸
(w×h,像素)
mobile1小型手機320 × 568
mobile2大型手機414 × 896
tablet平板電腦834 × 1112

如果您需要更詳細的裝置組,您可以使用 INITIAL_VIEWPORTS 匯出,其中包含下列裝置

索引鍵描述尺寸
(w×h,像素)
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 時,可用的視埠會使用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: {
      viewports: INITIAL_VIEWPORTS,
    },
  },
  initialGlobals: {
    viewport: { value: 'ipad', isRotated: false },
  },
};
 
export default preview;

新增裝置

如果預定義的視埠不符合您的需求,您可以將新裝置新增至視埠清單。例如,讓我們將兩個 Kindle 裝置新增到預設的最小視埠集中

使用 globals API

當使用 globals API 時,請注意可用的視埠是使用 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;

為每個元件或故事設定

在某些情況下,您在全域範圍內使用特定的視覺視埠並不實際,您需要針對個別的故事或元件的一組故事調整它。

參數可以套用在專案、元件和故事層級,讓您可以在需要時指定設定。例如,您可以為元件的所有故事設定可用的視埠,如下所示

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;

定義故事的視埠

視埠附加元件可讓您從工具列中預定義的視埠清單中選取,來變更套用至故事的視埠。如果需要,您可以使用 parameters.viewport.default 參數,將故事設定為預設為特定的視埠。

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' },
  },
};

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

使用 globals API

當您使用 globals 為故事(或元件的故事)指定視埠時,會套用視埠,且無法使用工具列變更。當您想要確保故事始終在特定視埠上呈現時,這非常有用。

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

鍵盤快捷鍵

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

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

使用 globals API

全域設定

此附加元件會在 Storybook 的 viewport 命名空間下貢獻以下全域設定

value

類型:string

設定後,將會套用視埠,且無法使用工具列變更。必須符合可用視埠的其中一個索引鍵。

isRotated

類型:boolean

如果為 true,則套用的視埠會旋轉 90°,例如,它會從直向旋轉為橫向。

參數

此附加元件會在 Storybook 的 viewport 命名空間下貢獻以下參數

defaultOrientation

類型:'portrait' | 'landscape'

預設值:'portrait'

指定檢視故事時使用的預設方向。只有在您未啟用全域 API時才可用。

defaultViewport

類型:string

指定檢視故事時使用的預設視埠。必須符合viewports (或 options)物件中的索引鍵。

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';
  };
}

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

使用 globals API

options

類型

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

取代:viewports

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

匯出

此附加元件將以下匯出內容貢獻給 Storybook

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

INITIAL_VIEWPORTS

類型:object

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

MINIMAL_VIEWPORTS

類型:object

Viewport 附加元件提供的最小視窗集如上所列。 預設情況下會使用這些。