You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为指定Storybook故事选择性修改storybook-root宽度?

为指定Storybook故事单独调整宽度

以下几种方法可实现仅针对单个故事调整渲染宽度,无需修改组件本身或全局样式:

方法1:用Decorator包裹故事(推荐)

给目标故事添加自定义装饰器,用固定宽度的容器包裹组件——由于你的组件宽度设为100%,会自动继承容器宽度,无需改动storybook-root:

// 你的故事文件
import YourComponent from './YourComponent';

export default {
  title: 'Components/YourComponent',
  component: YourComponent,
};

// 默认故事
export const Default = () => <YourComponent />;

// 需要调整宽度的故事
export const FixedWidth = () => <YourComponent />;
FixedWidth.decorators = [
  (Story) => (
    <div style={{ width: '500px', margin: '0 auto' }}>
      <Story />
    </div>
  ),
];

这样FixedWidth故事的组件会被限制在500px宽度内,其他故事不受影响。

方法2:动态修改storybook-root样式(特殊场景适用)

如果必须修改storybook-root的宽度,可通过装饰器在故事渲染时动态调整样式,卸载时恢复:

import { useEffect } from 'react';
import YourComponent from './YourComponent';

export const FixedWidthRoot = () => <YourComponent />;
FixedWidthRoot.decorators = [
  (Story) => {
    useEffect(() => {
      const root = document.getElementById('storybook-root');
      if (root) {
        root.style.width = '500px';
        root.style.margin = '0 auto';
      }
      // 组件卸载时恢复原有样式
      return () => {
        if (root) {
          root.style.width = '';
          root.style.margin = '';
        }
      };
    }, []);

    return <Story />;
  },
];

注:如果使用Vue等其他框架,替换对应生命周期钩子即可。

方法3:通过Storybook参数配置样式

部分Storybook版本支持通过parameters.styles添加故事专属样式:

export const FixedWidth = () => <YourComponent />;
FixedWidth.parameters = {
  styles: {
    '#storybook-root': {
      width: '500px',
      margin: '0 auto',
    },
  },
};

注:该特性支持度因Storybook版本而异,建议先测试当前版本兼容性。

内容的提问来源于stack exchange,提问作者Mix Master Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:42:02