代码演示
如何引入
<script setup lang="ts">
import { Banner } from '@fibrous/semi-ui-vue';
</script>
基本用法
代码
<script setup lang="ts">
import { ref } from 'vue';
import { Banner, Button, Layout } from '@fibrous/semi-ui-vue';
const visible = ref(false);
const toggle = () => {
visible.value = !visible.value;
};
const commonStyle = {
height: '64px',
lineHeight: '64px',
background: 'var(--semi-color-fill-0)',
};
</script>
<template>
<Layout class="components-layout-demo banner-basic">
<Layout.Header :style="commonStyle">Header</Layout.Header>
<Banner v-if="visible" @close="toggle">
<template #description>Semi D2C 现已支持 Figma DevMode, 安装插件,随时查阅图层对应的前端代码</template>
</Banner>
<Layout.Content style="height: 300px; line-height: 300px">Content</Layout.Content>
<Layout.Footer :style="commonStyle">Footer</Layout.Footer>
</Layout>
<Button style="display: block; width: 120px; margin: 0 auto" @click="toggle">
{{ visible ? 'Hide Banner' : 'Show Banner' }}
</Button>
</template>不同类型
支持4种类型:info、warning、danger、success。默认为 info。
代码
<script setup lang="ts">
import { Banner } from '@fibrous/semi-ui-vue';
</script>
<template>
<Banner type="info">
<template #description>Semi D2C 现已支持 Figma DevMode, 安装插件,随时查阅图层对应的前端代码</template>
</Banner>
<br />
<Banner type="warning">
<template #description>当前使用 Figma UI Kit 为旧版,可能无法支持完整的 Design to code 能力</template>
</Banner>
<br />
<Banner type="danger">
<template #description>当前使用 API 已过期,请尽快升级</template>
</Banner>
<br />
<Banner type="success">
<template #description>Semi DSM, Make Semi Design to Any Design</template>
</Banner>
</template>非全屏模式
可以设置 :fullMode="false" 使用非全屏模式的 banner 样式。通过 bordered 属性可以设置边框。传入空的 #icon 与 #closeIcon 插槽分别隐藏图标和关闭按钮。
代码
<script setup lang="ts">
import { Banner, Typography } from '@fibrous/semi-ui-vue';
const types = ['info', 'warning', 'danger', 'success'] as const;
</script>
<template>
<div class="components-banner-demo" style="width: 640px">
<template v-for="(type, index) in types" :key="type">
<br v-if="index > 0" />
<Banner bordered :fullMode="false" :type="type">
<template #icon />
<template #closeIcon />
<template #title>
<div style="font-weight: 600; font-size: 14px; line-height: 20px">不知道 AppKey?</div>
</template>
<template #description>
<div>
你可先联系对应的研发同学,确认是否已在
<Typography.Text :link="{ href: 'https://semi.design/' }">应用云平台</Typography.Text>
申请了应用,并填写对应的信息。
</div>
</template>
</Banner>
</template>
</div>
</template>.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);
}
}
自定义内容
可以通过默认插槽自定义其他渲染内容。
代码
<script setup lang="ts">
import { Banner } from '@fibrous/semi-ui-vue';
</script>
<template>
<div style="width: 500px; padding: 20px; border: 1px solid var(--semi-color-border)">
<Banner bordered :fullMode="false" title="Title" type="warning">
<template #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 </template>
<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>
</template>API参考
Props
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| bordered | 是否展示边框,仅在非全屏模式下有效。 | boolean | semiDefault("Banner", "bordered", false) |
| fullMode | 是否为全屏模式。 | boolean | semiDefault("Banner", "fullMode", true) |
| title | 纯文本标题;同时传入 title 插槽时以插槽为准。 | string | undefined |
| type | 类型,可选 info、success、danger、warning。 | BannerType | semiDefault("Banner", "type", "info") |
Events
| 事件 | 说明 | 回调参数 |
|---|---|---|
| close | 点击关闭按钮时触发,载荷为按钮的原生 click 事件;监听器返回后横幅隐藏。 | [event: MouseEvent] |
Slots
| 插槽 | 说明 | 作用域参数 |
|---|---|---|
| default | 消息下方的自定义内容。 | any |
| description | 描述内容。 | any |
| icon | 替换类型图标;传入空插槽则不显示图标。 | any |
| closeIcon | 替换关闭按钮内的图标;传入空插槽则不显示关闭按钮。 | any |
| title | 标题内容。 | any |
Exposes
| 名称 | 说明 | 类型 |
|---|---|---|
| 无 |
class、style 与原生属性经 attrs 传入,落在根元素上;根元素的 role="alert" 固定,不能被覆盖。title 另有 string prop,同时给出 #title 插槽时以插槽为准。title、description 与默认插槽的内容为 0 时也会渲染。关闭状态在组件内部,没有 v-model,用 v-if 卸载再挂载即可重新显示。
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 | 描边宽度 |