代码演示
如何引入
<script setup lang="ts">
import { Image, ImagePreview } from '@fibrous/semi-ui-vue';
</script>
基本用法
通过 src 指定图片路径即可获取一个具有预览功能的图片,通过 width,height 指定图片的宽高

代码
<script setup lang="ts">
import { Image } from '@fibrous/semi-ui-vue';
</script>
<template>
<Image alt="Abstract colorful artwork" :height="200" src="/assets/root-web-sites/abstract.jpg" :width="360" />
</template>加载失败的占位图
fallback 接收加载失败时显示的图片地址(string);需要自定义内容时使用 #fallback 插槽,两者同时提供时插槽优先

自定义加载失败占位图

代码
<script setup lang="ts">
import { IconUploadError } from '@fibrous/semi-icons-vue';
import { Image } from '@fibrous/semi-ui-vue';
</script>
<template>
<div :style="{ display: 'flex', alignItems: 'center', flexDirection: 'column' }">
<span>加载失败默认样式</span>
<Image alt="加载失败的图片" :height="200" src="https://load-error.jpeg" :width="200" />
<br />
<span>自定义加载失败占位图</span>
<Image alt="加载失败的图片" :height="200" src="https://load-error.jpeg" :width="200">
<template #fallback>
<IconUploadError :style="{ fontSize: '50px' }" />
</template>
</Image>
</div>
</template>渐进加载
大图可通过 #placeholder 插槽实现渐进加载

代码
<script setup lang="ts">
import { ref } from 'vue';
import { Button, Image } from '@fibrous/semi-ui-vue';
const timestamp = ref('');
</script>
<template>
<Image alt="Abstract colorful artwork" :height="200" :src="`/assets/root-web-sites/abstract-big.png?${timestamp}`" :width="300">
<template #placeholder>
<Image alt="" :height="200" :preview="false" src="/assets/root-web-sites/abstract-small.jpeg" :width="300" />
</template>
</Image>
<br />
<Button :style="{ marginTop: '10px' }" theme="solid" @click="timestamp = String(Date.now())">Reload</Button>
</template>自定义预览图片
可以通过设置 Image 组件的 src 和 preview 参数中的 src 不同来自定义预览图片

代码
<script setup lang="ts">
import { Image } from '@fibrous/semi-ui-vue';
const preview = {
src: '/assets/root-web-sites/abstract-big.png',
};
</script>
<template>
<Image alt="Abstract colorful artwork" :height="200" :preview="preview" src="/assets/root-web-sites/abstract-small.jpeg" :width="300" />
</template>多图预览
使用 ImagePreview 包裹 Image 即可实现多图片预览




代码
<script setup lang="ts">
import { Image, ImagePreview } from '@fibrous/semi-ui-vue';
const srcList = ['/assets/root-web-sites/abstract.jpg', '/assets/root-web-sites/sky.jpg', '/assets/root-web-sites/greenleaf.jpg', '/assets/root-web-sites/colorful.jpg'];
</script>
<template>
<ImagePreview>
<Image v-for="(src, index) in srcList" :key="src" :alt="`lamp${index + 1}`" :src="src" :style="{ marginRight: '5px' }" :width="200" />
</ImagePreview>
</template>单独使用预览组件
预览组件 ImagePreview 可以单独使用,通过 v-model:visible(或 visible 加 @visibleChange)控制是否预览,通过 src 传入可以预览的图片,通过 previewTitle(string)设置预览顶部的标题
代码
<script setup lang="ts">
import { ref } from 'vue';
import { Button, ImagePreview } from '@fibrous/semi-ui-vue';
const srcList = ['/assets/root-web-sites/abstract.jpg', '/assets/root-web-sites/sky.jpg', '/assets/root-web-sites/greenleaf.jpg', '/assets/root-web-sites/colorful.jpg'];
const visible1 = ref(false);
const visible2 = ref(false);
</script>
<template>
<Button @click="visible1 = true">Preview single Image</Button>
<ImagePreview v-model:visible="visible1" src="/assets/root-web-sites/sky.jpg" />
<br />
<Button :style="{ marginTop: '20px' }" @click="visible2 = true">Preview multiple Images</Button>
<ImagePreview v-model:visible="visible2" previewTitle="Scenery" :src="srcList" />
</template>渲染在指定容器
可以通过 getPopupContainer 指定预览组件的父级 DOM(需要指定 position: relative),图片预览将会渲染至该 DOM 中。这会改变浮层 DOM 树位置,但不会改变视图渲染位置。
容器不是 document.body 时(包括只在 ConfigProvider 上设置 getPopupContainer),预览为非模态:不输出 aria-modal,不锁定 Tab,也不锁定页面滚动。getPopupContainer 返回 document.body 与不传相同。



代码
<script setup lang="ts">
import { useTemplateRef } from 'vue';
import { Image, ImagePreview } from '@fibrous/semi-ui-vue';
const srcList = ['/assets/root-web-sites/abstract.jpg', '/assets/root-web-sites/sky.jpg', '/assets/root-web-sites/greenleaf.jpg'];
const container = useTemplateRef<HTMLDivElement>('container');
// called when the preview opens, after the container is mounted
const getPopupContainer = () => container.value as HTMLElement;
</script>
<template>
<div ref="container" :style="{ height: '400px', position: 'relative' }">
<ImagePreview :getPopupContainer="getPopupContainer" :style="{ height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }">
<Image v-for="(src, index) in srcList" :key="src" :alt="`lamp${index + 1}`" :src="src" :style="{ marginRight: '5px' }" :width="200" />
</ImagePreview>
</div>
</template>自定义预览底部操作区
可以使用 #previewMenu 插槽自定义预览底部操作区域,插槽参数为 MenuProps。ImagePreview 包裹的 Image 使用 ImagePreview 的插槽,单独使用的 Image 使用自己的同名插槽
如果想基于默认底部操作区域自定义预览底部操作区域,可以通过插槽参数 menuItems 获取默认各项的 VNode 数组,顺序依次为上一张、页码、下一张、缩小、缩放滑块、放大、原始尺寸 / 适应页面、旋转、下载,可用 <component :is> 渲染
自定义预览顶部展示区
通过 #title="{ title, index }" 插槽替换预览顶部标题区的内容。有标题时预览对话框经 aria-labelledby 以标题区命名,名称即插槽渲染出的文字;没有标题时名称为语言包的「预览」。顶部的关闭按钮可用 #closeIcon 替换图标,切换箭头可用 #leftIcon="{ index }"、#rightIcon="{ index }" 替换图标


代码
<script setup lang="ts">
import { Image, ImagePreview } from '@fibrous/semi-ui-vue';
const srcList = ['/assets/root-web-sites/abstract.jpg', '/assets/root-web-sites/sky.jpg'];
</script>
<template>
<ImagePreview>
<template #title="{ title }">
<div
:style="{
width: '100%',
height: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
}"
>
<span :style="{ background: 'black', padding: '0 10px' }">自定义标题:{{ title }}</span>
</div>
</template>
<div>
<Image v-for="(src, index) in srcList" :key="src" :alt="`lamp${index + 1}`" :preview="{ previewTitle: `lamp${index + 1}` }" :src="src" :style="{ marginRight: '5px' }" :width="200" />
</div>
</ImagePreview>
</template>API 参考
Image
Props
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| src | 图片获取地址。 | string | semiGlobalDefault("Image", "src") |
| width | 图片显示宽度,数值按 px 处理。 | string | number | semiGlobalDefault("Image", "width") |
| height | 图片显示高度,数值按 px 处理。 | string | number | semiGlobalDefault("Image", "height") |
| alt | 图像描述,同时作为可预览缩略图的读屏名称。 | string | semiGlobalDefault("Image", "alt") |
| crossOrigin | 透传给原生 img 标签的 crossorigin。 | "anonymous" | "use-credentials" | semiGlobalDefault("Image", "crossOrigin") |
| fallback | 加载失败时显示的容错图片地址;自定义内容使用 fallback 插槽,插槽优先。 | string | semiGlobalDefault("Image", "fallback") |
| preview | 预览配置,为 false 时禁用预览;对象只放数据与回调,自定义内容使用 Image 的插槽。 | boolean | ImagePreviewProps | semiDefault("Image", "preview", true) |
| imgStyle | 自定义样式,透传给 img 节点。 | StyleValue | semiGlobalDefault("Image", "imgStyle") |
| imgCls | 自定义样式类名,透传给 img 节点。 | string | semiGlobalDefault("Image", "imgCls") |
| setDownloadName | 设置图片下载名称。 | Type((src: string) => string) | undefined |
Events
| 事件 | 说明 | 回调参数 |
|---|---|---|
| load | 图片加载成功时触发。 | [event: Event] |
| error | 图片加载失败时触发。 | [event: Event] |
Slots
| 插槽 | 说明 | 作用域参数 |
|---|---|---|
| placeholder | 图片未加载成功时的占位内容。 | any |
| fallback | 加载失败时显示的自定义内容,优先于 fallback 属性。 | any |
| title | 替换预览顶部标题区的内容,有标题时对话框以插槽渲染出的文字命名;仅作用于该 Image 自己的预览,位于 ImagePreview 内时无效。 | ImagePreviewTitleSlotProps |
| previewMenu | 自定义预览底部操作区;仅作用于该 Image 自己的预览,位于 ImagePreview 内时无效。 | MenuProps |
| leftIcon | 自定义向左切换图标;仅作用于该 Image 自己的预览,位于 ImagePreview 内时无效。 | ImagePreviewIconSlotProps |
| rightIcon | 自定义向右切换图标;仅作用于该 Image 自己的预览,位于 ImagePreview 内时无效。 | ImagePreviewIconSlotProps |
| closeIcon | 自定义关闭图标;仅作用于该 Image 自己的预览,位于 ImagePreview 内时无效。 | any |
Exposes
| 名称 | 说明 | 类型 |
|---|---|---|
| 无 |
width、height 的数值按 px 处理。class、style 落在根元素上,其余未声明的原生属性与监听落在内部的 img 上。preview 对象接受 ImagePreview 的 props 与回调(onVisibleChange、onChange、onClose、onZoomIn、onZoomOut、onPrev、onNext、onRatioChange、onRotateLeft、onDownload、onDownloadError),但不含 lazyLoad、lazyLoadMargin、class、style(预览样式请用 previewCls、previewStyle);自定义节点不放在 preview 里,使用 Image 的插槽。preview.src 为数组时,切换图片后回到「适应页面」。处于 ImagePreview 内的 Image 不使用 #title、#previewMenu、#leftIcon、#rightIcon、#closeIcon,以 ImagePreview 的插槽为准。
ImagePreview
Props
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| src | 要预览的图片地址列表。包裹 Image 时与各 Image 登记的预览图合并,src 中的图片排在前面。 | string | string[] | semiDefault("ImagePreview", "src", []) |
| visible | 受控属性,是否预览。 | boolean | semiGlobalDefault("ImagePreview", "visible") |
| defaultVisible | 首次是否开启预览。 | boolean | semiGlobalDefault("ImagePreview", "defaultVisible") |
| currentIndex | 受控属性,当前预览图片下标。 | number | semiGlobalDefault("ImagePreview", "currentIndex") |
| defaultCurrentIndex | 首次展示图片下标。 | number | semiGlobalDefault("ImagePreview", "defaultCurrentIndex") |
| previewTitle | 预览顶部标题,同时作为预览对话框的读屏名称;组内图片的 preview.previewTitle 优先。 | string | semiGlobalDefault("ImagePreview", "previewTitle") |
| lazyLoad | 是否开启懒加载。 | boolean | semiDefault("ImagePreview", "lazyLoad", true) |
| lazyLoadMargin | 懒加载的 rootMargin,相对视口计算;滚动祖先仍会裁剪。 | string | semiDefault("ImagePreview", "lazyLoadMargin", "0px 100px 100px 0px") |
| maskClosable | 点击遮罩是否可关闭。 | boolean | TypesemiDefault("ImagePreview", "maskClosable", previewDefaults.maskClosable) |
| closable | 是否显示关闭按钮。 | boolean | semiDefault("ImagePreview", "closable", previewDefaults.closable) |
| closeOnEsc | 按 Esc 是否关闭预览。 | boolean | semiDefault("ImagePreview", "closeOnEsc", previewDefaults.closeOnEsc) |
| infinite | 是否无限循环。 | boolean | semiDefault("ImagePreview", "infinite", previewDefaults.infinite) |
| showTooltip | 是否展示底部操作区提示。 | boolean | TypesemiDefault("ImagePreview", "showTooltip", previewDefaults.showTooltip) |
| preLoad | 是否开启预加载。 | boolean | semiDefault("ImagePreview", "preLoad", previewDefaults.preLoad) |
| preLoadGap | 预加载的步长。 | number | semiDefault("ImagePreview", "preLoadGap", previewDefaults.preLoadGap) |
| viewerVisibleDelay | 隐藏预览操作按钮前的无操作时长,单位毫秒。 | number | TypesemiDefault("ImagePreview", "viewerVisibleDelay", previewDefaults.viewerVisibleDelay) |
| zoomStep | 每次缩小或放大的比例。 | number | semiDefault("ImagePreview", "zoomStep", previewDefaults.zoomStep) |
| maxZoom | 预览图片最大缩放倍数。 | number | semiDefault("ImagePreview", "maxZoom", previewDefaults.maxZoom) |
| minZoom | 预览图片最小缩放倍数。 | number | semiDefault("ImagePreview", "minZoom", previewDefaults.minZoom) |
| zIndex | 预览层层级。 | number | semiDefault("ImagePreview", "zIndex", previewDefaults.zIndex) |
| disableDownload | 是否禁用下载。 | boolean | TypesemiDefault("ImagePreview", "disableDownload", previewDefaults.disableDownload) |
| initialZoom | 预览图片初始缩放倍数,仅在首次打开或切换到该图片时生效一次,会被 minZoom 与 maxZoom 限制。 | number | semiGlobalDefault("ImagePreview", "initialZoom") |
| crossOrigin | 透传给预览图片的原生 img 标签的 crossorigin。 | "anonymous" | "use-credentials" | semiGlobalDefault("ImagePreview", "crossOrigin") |
| previewCls | 自定义预览样式类名。 | string | semiGlobalDefault("ImagePreview", "previewCls") |
| previewStyle | 自定义预览样式。 | StyleValue | semiGlobalDefault("ImagePreview", "previewStyle") |
| prevTip | 上一步操作按钮提示。 | string | semiGlobalDefault("ImagePreview", "prevTip") |
| nextTip | 下一步操作按钮提示。 | string | semiGlobalDefault("ImagePreview", "nextTip") |
| zoomInTip | 放大操作按钮提示。 | string | semiGlobalDefault("ImagePreview", "zoomInTip") |
| zoomOutTip | 缩小操作按钮提示。 | string | semiGlobalDefault("ImagePreview", "zoomOutTip") |
| rotateTip | 旋转操作按钮提示。 | string | semiGlobalDefault("ImagePreview", "rotateTip") |
| downloadTip | 下载操作按钮提示。 | string | semiGlobalDefault("ImagePreview", "downloadTip") |
| adaptiveTip | 适应页面操作按钮提示。 | string | semiGlobalDefault("ImagePreview", "adaptiveTip") |
| originTip | 原始尺寸操作按钮提示。 | string | semiGlobalDefault("ImagePreview", "originTip") |
| getPopupContainer | 指定预览渲染的父级 DOM。容器不是 document.body 时预览为非模态,自定义容器需要 position: relative。 | Type(() => HTMLElement) | undefined |
| setDownloadName | 设置图片下载名称。 | Type((src: string) => string) | undefined |
Events
| 事件 | 说明 | 回调参数 |
|---|---|---|
| update:visible | 可见状态变化时触发,用于 v-model:visible。 | [visible: boolean] |
| visibleChange | 可见状态变化时触发。 | [visible: boolean] |
| update:currentIndex | 当前图片下标变化时触发,用于 v-model:currentIndex。 | [index: number] |
| change | 切换图片时触发。 | [index: number] |
| close | 点击关闭按钮或按 Esc 关闭时触发;点击遮罩关闭只触发 visibleChange。 | [] |
| zoomIn | 图片放大时触发。 | [zoom: number] |
| zoomOut | 图片缩小时触发。 | [zoom: number] |
| prev | 向前切换图片时触发。 | [index: number] |
| next | 向后切换图片时触发。 | [index: number] |
| ratioChange | 切换原始尺寸与适应页面时触发。 | [type: RatioType] |
| rotateLeft | 逆时针旋转图片时触发。 | [angle: number] |
| download | 下载图片时触发。 | [src: string, index: number] |
| downloadError | 图片下载失败时触发。 | [src: string] |
Slots
| 插槽 | 说明 | 作用域参数 |
|---|---|---|
| default | 要预览的 Image 组件。 | any |
| title | 替换预览顶部标题区的内容。有标题时对话框经 aria-labelledby 以标题区命名,名称即插槽渲染出的文字;没有标题时名称来自语言包。 | ImagePreviewTitleSlotProps |
| previewMenu | 自定义预览底部操作区,参数为 MenuProps,menuItems 是默认各项的 VNode 数组。 | MenuProps |
| leftIcon | 自定义向左切换图标。 | ImagePreviewIconSlotProps |
| rightIcon | 自定义向右切换图标。 | ImagePreviewIconSlotProps |
| closeIcon | 自定义关闭图标。 | any |
Exposes
| 名称 | 说明 | 类型 |
|---|---|---|
| 无 |
class、style 与原生属性经 attrs 落在根元素(分组 div)上,传入 aria-label 或 aria-labelledby 且未传 role 时根元素带 role="group"。预览对话框渲染到 getPopupContainer(默认 document.body)中,名称来自 previewTitle,没有标题时来自语言包。
MenuProps
min、max、step、zoom 是百分比数值(如 min 为 10 表示 10%,step 为 10 表示每次 10%),与 ImagePreview 的 minZoom、maxZoom、zoomStep、initialZoom(倍数,如 0.1、5)单位不同。
| 属性 | 说明 | 类型 |
|---|---|---|
| curPage | 当前图片页下标 | number |
| disabledPrev | 是否禁用向左切换按钮 | boolean |
| disabledNext | 是否禁用向右切换按钮 | boolean |
| disabledZoomIn | 是否已放大到最大比例(放大按钮禁用) | boolean |
| disabledZoomOut | 是否已缩小到最小比例(缩小按钮禁用) | boolean |
| disableDownload | 是否禁用下载按钮 | boolean |
| max | 图片缩放最大比例(百分比) | number |
| min | 图片缩放最小比例(百分比) | number |
| onDownload | 图片下载的调用函数 | () => void |
| onZoomIn | 图片放大时的调用函数 | () => void |
| onZoomOut | 图片缩小时的调用函数 | () => void |
| onRatioClick | 切换原始尺寸与适应页面的调用函数 | () => void |
| onPrev | 向前切换图片的调用函数 | () => void |
| onNext | 向后切换图片的调用函数 | () => void |
| onRotateLeft | 逆时针旋转图片的调用函数 | () => void |
| onRotateRight | 顺时针旋转图片的调用函数 | () => void |
| ratio | 原始尺寸或适应页面按钮状态 | "adaptation" | "realSize" |
| step | 缩放的比例步长(百分比) | number |
| totalNum | 可预览的总图片数 | number |
| zoom | 当前图片缩放比例(百分比) | number |
| menuItems | 默认底部预览操作区域各项的 VNode 数组,可原样渲染 | VNode[] |
Accessibility
ARIA
- 预览渲染在
document.body(默认)时是role="dialog"、aria-modal="true"的模态对话框;渲染到自定义容器(getPopupContainer返回其他元素,含 ConfigProvider 设置的容器)时是非模态对话框,不输出aria-modal。有标题(previewTitle,或组内图片的preview.previewTitle)时由标题命名,否则以语言包的「预览」作为名称 - 关闭、左右切换箭头,以及底部的上一张、下一张、缩小、放大、原始尺寸 / 适应页面、旋转、下载都是原生
button,读屏名称取自对应的prevTip、nextTip等属性,未设置时取自语言包;缩放滑块的名称是语言包的「缩放」,aria-valuetext为当前百分比 - 到达首张、末张或缩放上下限时,底部对应按钮带
aria-disabled="true",仍可聚焦,焦点不会丢失。没有当前图片(src为空列表)时下载按钮同样禁用 - 底部页码带
aria-live="polite",切换图片时读屏会读出新的位置 - 开启预览且图片加载成功后,Image 缩略图的根元素是
role="button"、tabindex="0"、aria-haspopup="dialog"的可聚焦按钮,名称取自图片的alt;preview为 false 或图片未加载成功时不可聚焦。关闭预览后焦点回到缩略图。ImagePreview 分组内的缩略图鼠标可点开,键盘同样可以:加载中或加载失败时也带按钮角色、可聚焦,Enter 或空格打开分组预览 - 预览图的
alt取自对应缩略图的alt(ImagePreview的src数组没有 alt,为空字符串)
键盘交互
- 焦点在缩略图上时,Enter 或空格打开预览
- 打开预览后焦点移入预览层。模态预览中 Tab 与 Shift + Tab 在预览层内的控件间循环,关闭后焦点回到打开前聚焦的元素;渲染到自定义容器的非模态预览不锁定 Tab,关闭时只有焦点仍在预览内或落在 body 上才回到打开前聚焦的元素,焦点已移到页面其他位置时保持不变
- Enter 或空格触发聚焦的按钮
- ← 与 → 切换上一张、下一张,RTL(ConfigProvider
direction="rtl")下左右互换。到首张或末张时与按钮一致:infinite为 true 时循环,否则不切换 - 焦点在输入框、文本域、下拉框或可编辑元素中(例如自定义页脚里的输入框),或同时按下 Alt、Ctrl、Meta、Shift 时,← 与 → 不切换图片;缩放滑块聚焦时 ← 与 → 调整缩放比例
- Esc 关闭预览(
closeOnEsc为 false 时不关闭) - 操作区因
viewerVisibleDelay隐藏后,按键或焦点移到操作区上会重新显示;焦点停在操作区时不再自动隐藏
设计变量
| Sass 变量 | 值 | 用法 |
|---|---|---|
| $transform_rotate-image_preview_spinner | var(--semi-transform_rotate-clockwise360deg) | 预览图像加载spin旋转角度 |
| $transform_scale3d-image_preview_image_img | 1, 1, 1 | 预览图片放大 |
| $transform_rotate-image_preview_image_img | var(--semi-transform_rotate-none) | 预览图片旋转角度 |
| $transition_duration-image_preview | 500ms | 预览图片透明度变化动画时间 |
| $transform_rotate-image_preview_icon_rtl | var(--semi-transform_rotate-clockwise180deg) | rtl模式下向前/向后切换图片按钮旋转角度 |
| $spacing-image_preview_icon-x | 24px | 图像预览中部左右调节icon与页面距离 |
| $spacing-image_preview_header-paddingY | 0 | 图像预览header部分上下内边距 |
| $spacing-image_preview_header-paddingX | 24px | 图像预览header部分左右内边距 |
| $spacing-image_preview_footer-paddingY | 0 | 图像预览footer操作区部分上下内边距 |
| $spacing-image_preview_footer-paddingX | 16px | 图像预览footer操作区部分左右内边距 |
| $spacing-image_preview_footer_page-marginY | 0 | 图像预览footer操作区图像页数据上下内边距 |
| $spacing-image_preview_footer_page-marginX | 12px | 图像预览footer操作区图像页数据左右内边距 |
| $spacing-image_preview_footer_slider-paddingY | 0 | 图像预览footer操作区slider上下内边距 |
| $spacing-image_preview_footer_slider-paddingX | 16px | 图像预览footer操作区slider左右内边距 |
| $spacing-image_preview_footer_slider_handle-marginTop | 8px | 图像预览footer操作区slider的滑块上外边距 |
| $spacing-image_preview_footer_divider-marginY | 0 | 图像预览footer操作区slider的分割线上下外边距 |
| $spacing-image_preview_footer_divider-marginX | 16px | 图像预览footer操作区slider的分割线左右外边距 |
| $spacing-image_preview_footer_gap-marginLeft | 16px | 图像预览footer操作区icon的左外边距 |
| $width-image_preview_footer_slider | 132px | 图像预览footer操作区slider宽度 |
| $width-image_preview_footer_slider_handle | 16px | 图像预览footer操作区滑块宽度 |
| $width-image_preview_icon | 40px | 图像预览footer操作区icon宽度 |
| $width-image_preview_header_close | 30px | 图像预览header部分的关闭热区宽度 |
| $height-image_preview_header | 60px | 图像预览header部分高度 |
| $height-image_preview_footer | 48px | 图像预览footer部分高度 |
| $height-image_preview_footer_slider | 2px | 图像预览footer中slider高度 |
| $height-image_preview_footer_slider_handle | 16px | 图像预览footer中slider的滑块高度 |
| $height-image_preview_icon | 40px | 图像预览footer操作区icon高度 |
| $height-image_preview_header_close | 30px | 图像预览header部分的关闭热区高度 |
| $radius-image | var(--semi-border-radius-small) | 图像圆角 |
| $radius-image_preview_footer | var(--semi-border-radius-medium) | 图像预览footer操作区圆角 |
| $color-image_status-bg | var(--semi-color-fill-0) | 图像加载失败背景颜色 |
| $color-image_status | var(--semi-color-disabled-text) | 图像状态加载失败 icon 颜色 |
| $color-image_preview_icon | var(--semi-color-white) | 图像预览中部左右icon背景色 |
| $color-image_preview_header | var(--semi-color-white) | 图像预览header文字颜色 |
| $color-image_preview_footer_icon | var(--semi-color-white) | 图像预览footer中icon颜色 |
| $color-image_preview_footer_slider_rail | var(--semi-color-white) | 图像预览footer中slider滑轨颜色 |
| $color-image_preview_disabled | rgba(249, 249, 249, 0.35) | 图像预览禁用颜色 |
| $color-image_preview_icon-bg | rgba(0, 0, 0, 0.75) | 图像预览中部icon背景色 |
| $color-image_header_close-bg | rgba(0, 0, 0, 0.75) | 图像预览header的关闭icon的hover背景色 |
| $color-image_preview_footer-bg | rgba(0, 0, 0, 0.75) | 图像预览footer部分背景色 |
| $color-image-preview_divider-bg | rgba(255, 255, 255, 0.5) | 图像预览footer中的分割线背景色 |
| $color-image_preview_image_spin | #ccc | 图像预览的加载状态颜色 |