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

如何为Storybook添加标签页以展示纯HTML/CSS组件版本

解决方案:在现有Storybook中集成纯HTML/CSS组件标签页与扩展详情

一、添加标签页展示纯HTML/CSS组件(无需额外插件/第三个Storybook)

你不需要维护独立的纯HTML/CSS Storybook,直接利用Storybook原生功能就能在现有Angular/Web Component页面中添加切换标签:

方法1:用MDX文档实现多版本标签切换

MDX是Storybook官方推荐的文档格式,支持直接嵌入组件、纯HTML和自定义标签页:

import { Meta, Story, Tabs, TabItem } from '@storybook/addon-docs';
import { MyAngularComponent } from './my-angular.component';
import { MyWebComponent } from './my-web-component';

<Meta title="Components/MyComponent" component={MyAngularComponent} />

# MyComponent

<Tabs>
  <TabItem value="angular" label="Angular">
    <Story name="Angular Version">
      {() => ({ component: MyAngularComponent, props: { text: 'Click Me' } })}
    </Story>
  </TabItem>
  <TabItem value="web-component" label="Web Component">
    <Story name="Web Component Version">
      {() => ({
        template: `<my-web-component text="Click Me"></my-web-component>`
      })}
    </Story>
  </TabItem>
  <TabItem value="html-css" label="Pure HTML/CSS">
    <div className="my-component-demo">
      <!-- 直接写纯HTML结构 -->
      <button class="btn-primary">Click Me</button>
    </div>
    <!-- 内嵌CSS样式 -->
    <style>
      .btn-primary {
        padding: 8px 16px;
        background: #007bff;
        color: #fff;
        border: none;
        border-radius: 4px;
        cursor: pointer;
      }
      .btn-primary:hover {
        background: #0056b3;
      }
    </style>
  </TabItem>
</Tabs>

这种方式能让三个版本共享同一个组件页面上下文,逻辑连贯,无需额外维护成本。

方法2:用CSF+自定义装饰器实现全局标签切换

如果偏好CSF(Component Story Format)写法,可以在全局预览配置中添加装饰器,自动给所有Story加上纯HTML/CSS切换标签:

// .storybook/preview.js(Angular版本示例)
import { addDecorator } from '@storybook/angular';

addDecorator((storyFn, context) => {
  const originalStory = storyFn();
  // 定义纯HTML/CSS内容(可根据context动态匹配对应组件的HTML)
  const htmlCssContent = `
    <div class="html-css-demo">
      <button class="btn-primary">${context.args?.text || 'Click Me'}</button>
    </div>
    <style>
      .btn-primary { /* 样式代码 */ }
    </style>
  `;

  return {
    template: `
      <div class="story-tab-container">
        <button (click)="activeTab='original'">${context.parameters.framework || 'Angular'}</button>
        <button (click)="activeTab='html'">Pure HTML/CSS</button>
        <div *ngIf="activeTab === 'original'">${originalStory.template}</div>
        <div *ngIf="activeTab === 'html'" [innerHTML]="htmlContent"></div>
      </div>
    `,
    props: {
      ...originalStory.props,
      activeTab: 'original',
      htmlContent: htmlCssContent
    }
  };
});

二、添加更多页面详情内容

不用新增Story,直接在现有组件页面中扩展详情:

1. MDX文档中直接添加详情

在MDX里除了标签页,还可以自由添加组件说明、API文档、使用示例等:

<!-- 接上面的MDX代码 -->
## 组件详情
这是一个用于触发核心操作的按钮组件,支持三种使用形态:Angular组件、Web Component、纯HTML/CSS。

### API 参数说明
| 参数名 | 类型 | 默认值 | 描述 |
|--------|------|--------|------|
| text | string | "Click Me" | 按钮显示文本 |
| size | "sm" / "md" / "lg" | "md" | 按钮尺寸 |

### 纯HTML使用示例
```html
<button class="btn-primary btn-lg">提交表单</button>
### 2. CSF中通过参数添加详情
如果用CSF,可以通过`parameters.docs`配置添加组件描述和详情:
```javascript
export default {
  title: 'Components/MyComponent',
  component: MyAngularComponent,
  parameters: {
    docs: {
      description: {
        component: '核心操作按钮,支持Angular、Web Component和纯HTML三种使用方式,可自定义文本和尺寸。',
      },
      // 还可以添加自定义文档片段
      page: () => `<div>额外的组件详情内容...</div>`
    }
  },
  args: { text: 'Click Me' }
};

内容的提问来源于stack exchange,提问作者James Wilkinson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:17:17