伪状态

Storybook 的 CSS 伪状态

在 Github 上查看

Storybook 伪状态

在 Storybook 中切换组件的 CSS 伪状态。

Published on npm Tested with Chromatic

简介

此插件尝试“强制”组件的伪状态。它重写所有文档样式表,以向任何目标伪类(:hover:focus 等)的规则添加类名选择器。然后,该工具允许您在故事容器(#root)或您想要的任何其他根元素(通过 rootSelector 参数)上切换这些类名。此外,您可以在故事的 parameters 上设置 pseudo 属性,为每个伪类设置默认值。这使得可以使用 Chromatic 测试此类状态。

限制

由于此插件重写样式表而不是像 DevTools 那样切换实际的浏览器行为,因此它不会呈现任何默认用户代理(浏览器)样式。不幸的是,没有 JavaScript API 可以切换真实的伪状态,而不使用浏览器扩展。

入门

此插件需要 Storybook 6.1 或更高版本。使用 npx sb upgrade --prerelease 安装最新版本

首先,安装插件

npm i -D storybook-addon-pseudo-states

然后,将 "storybook-addon-pseudo-states" 添加到 .storybook/main.js 中的 addons 数组中

module.exports = {
  addons: ["storybook-addon-pseudo-states"],
}

设置默认故事状态

您可以通过在 parameters 上设置 pseudo 属性,使您的故事自动使用一组特定的伪状态

export const Hover = () => <Button>Label</Button>
Hover.parameters = { pseudo: { hover: true } }

这使得可以在 Chromatic 中对您的伪状态进行快照测试。

定位特定元素

如果您不想将伪样式强制或切换到所有使用它们的元素,而是只想在特定元素上启用它们,则可以设置字符串或数组值而不是布尔值

export const Buttons = () => (
  <>
    <Button id="one">Hover</Button>
    <Button id="two">Hover focus</Button>
    <Button id="three">Hover focus active</Button>
  </>
)
Buttons.parameters = {
  pseudo: {
    hover: ["#one", "#two", "#three"],
    focus: ["#two", "#three"],
    active: "#three",
  },
}

这接受一个 CSS 选择器(字符串)或要在其上启用该伪样式的 CSS 选择器数组。

覆盖默认根元素

默认情况下,我们使用 #storybook-root(或 Storybook 7 之前的 #root)元素作为所有伪类的根元素。如果您需要在 Storybook 的根元素之外渲染元素,则可以设置 parameters.pseudo.rootSelector 来覆盖它。这对于门户、对话框、工具提示等非常方便。

例如,考虑一个将自身注入到文档的 body 节点的 Dialog 组件

export const DialogButton = () => (
  <Dialog>
    <Button>Hover</Button>
  </Dialog>
)

DialogButton.parameters = {
  pseudo: { hover: true, rootSelector: "body" },
}
作者
  • ghengeveld
    ghengeveld
适用框架
    Angular
    Ember
    HTML
    Marko
    Mithril
    Preact
    Rax
    React
    Riot
    Svelte
    Vue
    Web Components
标签