代码演示
如何引入
import { Banner } from '@fibrous/semi-ui-solid';
基本用法
代码
import { createSignal, Show } from 'solid-js';
import { Banner, Button, Layout } from '@fibrous/semi-ui-solid';
const commonStyle = {
height: '64px',
'line-height': '64px',
background: 'var(--semi-color-fill-0)',
};
export default function BannerDemo() {
const [visible, setVisible] = createSignal(false);
const changeVisible = () => {
setVisible(!visible());
};
return (
<>
<Layout class="components-layout-demo banner-basic">
<Layout.Header style={commonStyle}>Header</Layout.Header>
<Show when={visible()}>
<Banner onClose={changeVisible} description="Semi D2C 现已支持 Figma DevMode, 安装插件,随时查阅图层对应的前端代码" />
</Show>
<Layout.Content style={{ height: '300px', 'line-height': '300px' }}>Content</Layout.Content>
<Layout.Footer style={commonStyle}>Footer</Layout.Footer>
</Layout>
<Button
onClick={changeVisible}
style={{
display: 'block',
width: '120px',
margin: '0 auto',
}}
>
{visible() ? 'Hide Banner' : 'Show Banner'}
</Button>
</>
);
}不同类型
支持4种类型:info、warning、danger、success。默认为 info。
代码
import { Banner } from '@fibrous/semi-ui-solid';
export default function BannerDemo() {
return (
<>
<Banner type="info" description="Semi D2C 现已支持 Figma DevMode, 安装插件,随时查阅图层对应的前端代码" />
<br />
<Banner type="warning" description="当前使用 Figma UI Kit 为旧版,可能无法支持完整的 Design to code 能力" />
<br />
<Banner type="danger" description="当前使用 API 已过期,请尽快升级" />
<br />
<Banner type="success" description="Semi DSM, Make Semi Design to Any Design" />
</>
);
}非全屏模式
可以设置 fullMode={false} 使用非全屏模式的 banner 样式。通过 bordered 属性可以设置边框。icon={null} 与 closeIcon={null} 分别隐藏图标和关闭按钮。
代码
import { For, Show } from 'solid-js';
import { Banner, Typography } from '@fibrous/semi-ui-solid';
const { Text } = Typography;
const types = ['info', 'warning', 'danger', 'success'] as const;
const titleStyle = {
'font-weight': '600',
'font-size': '14px',
'line-height': '20px',
};
export default function BannerDemo() {
return (
<div style={{ width: '640px' }} class="components-banner-demo">
<For each={types}>
{(type, index) => (
<>
<Show when={index() > 0}>
<br />
</Show>
<Banner
fullMode={false}
type={type}
bordered
icon={null}
closeIcon={null}
title={<div style={titleStyle}>不知道 AppKey?</div>}
description={
<div>
你可先联系对应的研发同学,确认是否已在 <Text link={{ href: 'https://semi.design/' }}>应用云平台</Text> 申请了应用,并填写对应的信息。
</div>
}
/>
</>
)}
</For>
</div>
);
}.components-banner-demo {
.semi-banner-info.semi-banner-bordered {
border: 1px solid var(--semi-color-primary-disabled);
}
.semi-banner-warning.semi-banner-bordered {
border: 1px solid var(--semi-color-warning-light-active);
}
.semi-banner-danger.semi-banner-bordered {
border: 1px solid var(--semi-color-danger-light-active);
}
.semi-banner-success.semi-banner-bordered {
border: 1px solid var(--semi-color-success-light-active);
}
}
自定义内容
可以通过 children 自定义其他渲染内容。
代码
import { Banner } from '@fibrous/semi-ui-solid';
export default function BannerDemo() {
return (
<div style={{ width: '500px', padding: '20px', border: '1px solid var(--semi-color-border)' }}>
<Banner fullMode={false} title="Title" type="warning" bordered description="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat">
<div class="semi-modal-footer">
<button class="semi-button semi-button-tertiary semi-button-light" type="button">
No, thanks.
</button>
<button class="semi-button semi-button-warning" type="button">
Sounds great!
</button>
</div>
</Banner>
<br />
</div>
);
}API参考
Props
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| bordered | 是否展示边框,仅在非全屏模式下有效。 | boolean | - |
| closeIcon | 替换关闭按钮内的图标;传 null 时不显示关闭按钮。 | JSX.Element | - |
| description | 描述内容。 | JSX.Element | - |
| fullMode | 是否为全屏模式。 | boolean | true |
| icon | 替换 type 对应的图标;传 null 时不显示图标。 | JSX.Element | - |
| onClose | 点击关闭按钮时调用,参数为按钮的原生 click 事件;回调返回后横幅隐藏。 | Type(e: MouseEvent) => void | - |
| title | 标题内容。 | JSX.Element | - |
| type | 类型,可选 info、success、danger、warning。 | BannerType | "info" |
class、style、ref 与原生属性和事件(如 aria-*、onClick)落在根元素(role="alert")上,根元素的 role 固定,不能被覆盖。关闭状态在组件内部,卸载后再挂载即可重新显示。
Accessibility
ARIA
- 组件的
role为 'alert' - 关闭按钮的
aria-label来自当前语言包(简体中文为「关闭」,英文为 'Close')
键盘和焦点
- Banner 的关闭按钮可以使用
Tab键聚焦,按钮聚焦后,敲击Enter键或Space键可以关闭 banner
文案规范
- 全屏 Banner
- 尽量保持内容一行展示完全
- 使用正确的标点符号,句子内使用逗号,句子间使用句号
- 非全屏 Banner
- 标题
- 使用精简的语言进行说明
- 标题上尽量避免使用逗号,句号等标点符号,有且只有是疑问句的时候,支持使用问号结尾
- 正文
- 在信息传递完整的前提下,尽可能地将正文压缩至 1 -2 句话
- 对标题进行详尽地描述或者解释,而不是对标题的重复说明
- 使用正确的标点符号,句子内使用逗号,句子间使用句号
- 标题
设计变量
下表是组件内部的 Sass 变量,不能覆写。定制样式请覆写 --semi-* CSS 变量(见 Design Token 页),或写不分层的 CSS 规则。
| Sass 变量 | 值 | 用法 |
|---|---|---|
| $color-banner_info-bg-default | var(--semi-color-info-light-default) | 背景色 - info |
| $color-banner_info-text-default | var(--semi-color-info) | 文本颜色 - info |
| $color-banner_info-border-default | var(--semi-color-info) | 描边颜色 - info |
| $color-banner_warning-bg-default | var(--semi-color-warning-light-default) | 背景色 - 警告 |
| $color-banner_warning-text-default | var(--semi-color-warning) | 文本颜色 - 警告 |
| $color-banner_warning-border-default | var(--semi-color-warning) | 描边颜色 - 警告 |
| $color-banner_success-bg-default | var(--semi-color-success-light-default) | 背景色 - 成功 |
| $color-banner_success-text-default | var(--semi-color-success) | 文本颜色 - 成功 |
| $color-banner_success-border-default | var(--semi-color-success) | 描边颜色 - 成功 |
| $color-banner_danger-bg-default | var(--semi-color-danger-light-default) | 背景色 - 危险 |
| $color-banner_danger-text-default | var(--semi-color-danger) | 文本颜色 - 危险 |
| $color-banner_danger-border-default | var(--semi-color-danger) | 描边颜色 - 危险 |
| $radius-banner | var(--semi-border-radius-small) | 圆角 |
| $spacing-banner_closeBtn-marginLeft | $spacing-base-tight | 关闭按钮左边距 |
| $spacing-banner_extra-marginTop | $spacing-tight | 关闭按钮顶边距 |
| $spacing-banner_icon-marginRight | $spacing-base-tight | 关闭按钮顶边距 |
| $spacing-banner-paddingX | $spacing-base-tight | 整体水平内边距 |
| $spacing-banner-paddingY | $spacing-base-tight | 整体垂直内边距 |
| $spacing-banner_title_description-marginTop | 2px | 标题与描述信息的间距 |
| $height-banner_closeBtn | 24px | 关闭按钮高度 |
| $width-banner_closeBtn | 24px | 关闭按钮宽度 |
| $width-banner-border | 1px | 描边宽度 |