反馈类

通知横幅

横幅通常用于标识全页的状态或通知等。它通常是常驻的,需要用户主动将其关闭。

代码演示

如何引入

<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。

Semi D2C 现已支持 Figma DevMode, 安装插件,随时查阅图层对应的前端代码

当前使用 Figma UI Kit 为旧版,可能无法支持完整的 Design to code 能力

当前使用 API 已过期,请尽快升级

Semi DSM, Make Semi Design to Any Design
代码
<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} 分别隐藏图标和关闭按钮。

不知道 AppKey?
你可先联系对应的研发同学,确认是否已在 应用云平台 申请了应用,并填写对应的信息。

不知道 AppKey?
你可先联系对应的研发同学,确认是否已在 应用云平台 申请了应用,并填写对应的信息。

不知道 AppKey?
你可先联系对应的研发同学,确认是否已在 应用云平台 申请了应用,并填写对应的信息。

不知道 AppKey?
你可先联系对应的研发同学,确认是否已在 应用云平台 申请了应用,并填写对应的信息。
代码
<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)自定义其他渲染内容。

Title
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

代码
<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是否展示边框,仅在非全屏模式下有效。booleanfalse
children消息下方的自定义内容。Snippet-
closeIcon替换关闭按钮内图标的 snippet;传入 null 则不显示关闭按钮。Snippet | null-
description描述内容的 snippet。Snippet-
fullMode是否为全屏模式。booleantrue
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-defaultvar(--semi-color-info-light-default)背景色 - info
$color-banner_info-text-defaultvar(--semi-color-info)文本颜色 - info
$color-banner_info-border-defaultvar(--semi-color-info)描边颜色 - info
$color-banner_warning-bg-defaultvar(--semi-color-warning-light-default)背景色 - 警告
$color-banner_warning-text-defaultvar(--semi-color-warning)文本颜色 - 警告
$color-banner_warning-border-defaultvar(--semi-color-warning)描边颜色 - 警告
$color-banner_success-bg-defaultvar(--semi-color-success-light-default)背景色 - 成功
$color-banner_success-text-defaultvar(--semi-color-success)文本颜色 - 成功
$color-banner_success-border-defaultvar(--semi-color-success)描边颜色 - 成功
$color-banner_danger-bg-defaultvar(--semi-color-danger-light-default)背景色 - 危险
$color-banner_danger-text-defaultvar(--semi-color-danger)文本颜色 - 危险
$color-banner_danger-border-defaultvar(--semi-color-danger)描边颜色 - 危险
$radius-bannervar(--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-marginTop2px标题与描述信息的间距
$height-banner_closeBtn24px关闭按钮高度
$width-banner_closeBtn24px关闭按钮宽度
$width-banner-border1px描边宽度