代码演示
如何引入
<script lang="ts">
import { Banner } from '@fibrae/semi-ui-svelte';
</script>
基本用法
代码
<script lang="ts">
import { Banner, Button, Layout, LayoutContent, LayoutFooter, LayoutHeader } from '@fibrae/semi-ui-svelte';
let visible = $state(false);
const toggle = () => {
visible = !visible;
};
const commonStyle = 'height: 64px; line-height: 64px; background: var(--semi-color-fill-0)';
</script>
<Layout class="components-layout-demo banner-basic">
<LayoutHeader style={commonStyle}>Header</LayoutHeader>
{#if visible}
<Banner onClose={toggle}>
{#snippet description()}Semi D2C 现已支持 Figma DevMode, 安装插件,随时查阅图层对应的前端代码{/snippet}
</Banner>
{/if}
<LayoutContent style="height: 300px; line-height: 300px">Content</LayoutContent>
<LayoutFooter style={commonStyle}>Footer</LayoutFooter>
</Layout>
<Button style="display: block; width: 120px; margin: 0 auto" onclick={toggle}>
{visible ? 'Hide Banner' : 'Show Banner'}
</Button>不同类型
支持4种类型:info、warning、danger、success。默认为 info。
代码
<script lang="ts">
import { Banner } from '@fibrae/semi-ui-svelte';
</script>
<Banner type="info">
{#snippet description()}Semi D2C 现已支持 Figma DevMode, 安装插件,随时查阅图层对应的前端代码{/snippet}
</Banner>
<br />
<Banner type="warning">
{#snippet description()}当前使用 Figma UI Kit 为旧版,可能无法支持完整的 Design to code 能力{/snippet}
</Banner>
<br />
<Banner type="danger">
{#snippet description()}当前使用 API 已过期,请尽快升级{/snippet}
</Banner>
<br />
<Banner type="success">
{#snippet description()}Semi DSM, Make Semi Design to Any Design{/snippet}
</Banner>非全屏模式
可以设置 fullMode={false} 使用非全屏模式的 banner 样式。通过 bordered 属性可以设置边框。icon={null} 与 closeIcon={null} 分别隐藏图标和关闭按钮。
代码
<script lang="ts">
import { Banner, TypographyText } from '@fibrae/semi-ui-svelte';
const types = ['info', 'warning', 'danger', 'success'] as const;
</script>
<div class="components-banner-demo" style="width: 640px">
{#each types as type, index (type)}
{#if index > 0}
<br />
{/if}
<Banner bordered closeIcon={null} fullMode={false} icon={null} {type}>
{#snippet title()}
<div style="font-weight: 600; font-size: 14px; line-height: 20px">不知道 AppKey?</div>
{/snippet}
{#snippet description()}
<div>
你可先联系对应的研发同学,确认是否已在
<TypographyText link={{ href: 'https://semi.design/' }}>应用云平台</TypographyText>
申请了应用,并填写对应的信息。
</div>
{/snippet}
</Banner>
{/each}
</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);
}
}
自定义内容
可以把内容直接写在 Banner 标签内(children snippet)自定义其他渲染内容。
代码
<script lang="ts">
import { Banner } from '@fibrae/semi-ui-svelte';
</script>
<div style="width: 500px; padding: 20px; border: 1px solid var(--semi-color-border)">
<Banner bordered fullMode={false} title="Title" type="warning">
{#snippet 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
{/snippet}
<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 | false |
| children | 消息下方的自定义内容。 | Snippet | - |
| closeIcon | 替换关闭按钮内图标的 snippet;传入 null 则不显示关闭按钮。 | Snippet | null | - |
| description | 描述内容的 snippet。 | Snippet | - |
| fullMode | 是否为全屏模式。 | boolean | true |
| icon | 替换类型图标的 snippet;传入 null 则不显示图标。 | Snippet | null | - |
| onClose | 点击关闭按钮时的回调,参数为按钮的原生 click 事件;回调返回后横幅隐藏。 | Type(event: MouseEvent) => void | - |
| title | 标题,可以是字符串或 snippet。 | string | Snippet | - |
| type | 类型,可选 info、success、danger、warning。 | BannerType | "info" |
class、style(字符串)与原生属性和事件(如 aria-*、onclick)落在根元素上。title 可以是字符串或 snippet,description、icon、closeIcon 是 snippet。关闭状态在组件内部,没有 bind:,用 {#if} 卸载再挂载即可重新显示。
Accessibility
ARIA
- 根元素默认不设
role,页面上常驻的说明不会被读屏软件当作警报。动态出现、需要立即播报的消息(如操作失败提示)传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 | 描边宽度 |