生态产品多个设计器现已发布正式版

查看生态总览
跳转到内容

Watermark 水印 ​

在内容区域上重复显示文字或图片水印。

用法 ​

为内容添加文字水印

季度报告

本季度活跃用户增长 18.6%,核心功能使用率持续提升。

组件结构 ​

加粗的是必需部件。

data-scope="watermark":root · content

示例 ​

多行水印 ​

显示归属和时间信息

设计稿预览

该内容仅供项目成员评审。

外观 ​

设置角度、间距、字号和透明度

默认
紧凑
宽松

自定义颜色 ​

设置水印前景色

财务摘要

仅限授权成员查看。

图片地址 ​

同源或放行了跨域的地址先取回再印出剪影

设计稿预览

预览版本仅供内部评审,请勿外传。

全屏水印 ​

固定铺满整个视口,压在页面一切内容之上

设计指引 ​

何时使用 ​

  • 标记内部数据、预览稿或样例内容。
  • 在导出或截图内容中保留归属信息。

何时不用 ​

  • 水印不能替代访问控制或数据脱敏。
  • 装饰纹理应使用背景样式。

特性 ​

  • 支持单行、多行文字和图片水印。图片可以是 data:image/ 内联图片,也可以是 http(s)、blob: 或相对路径的地址:地址形式的图片按匿名跨域取回、画进 canvas 转成内联图片再印,取回之前只印文字;跨域地址须带 Access-Control-Allow-Origin 放行,否则浏览器拒载或 canvas 被污染,这张图不印并报一条诊断,文字照印。javascript: 等其余协议一律不收。
  • 支持角度、间距、字号、透明度和字体配置。
  • 水印不拦截指针事件,也不影响文本选择。
  • 深浅主题下自动使用对应的前景色。
  • 防篡改:删掉水印的根节点会被原位放回,改写它的 data-scope / data-part / data-state / data-fullscreen 或内联的图样变量会被改回当下 props 算出的值;组件卸载时先撤掉观察,正常卸载不受影响。它防的是直接动 DOM 的抹除,覆盖样式表、截图后处理之类防不住。
  • fullscreen 全屏档:印子固定铺满整个视口,压在页面一切内容之上(含对话框与轻提示),页面滚动时原地不动;此时 root 不再建层叠上下文,放在页面任何位置都一样。祖先带 transform / filter 时 fixed 会被困在那个祖先里,全屏水印要放在没有这类祖先的地方。

组合 ​

最佳实践 ​

  • 保持水印可见,但不要干扰正文阅读。
  • 需要追溯时包含用户、时间或文档编号。
  • 图片水印优先使用轮廓清晰的单色图形。

反模式 ​

  • 不要把水印当作安全边界。
  • 不要使用过高的不透明度。

API 参考 ​

产物 ​

层值
自定义元素<xh-watermark>
Vue 组件XhWatermarkContent XhWatermarkRoot
状态机watermarkMachine
皮肤@xihan-ui/styles/watermark.css

Props ​

属性类型必填说明
fontFamilystring印文字使用的字体,默认 sans-serif。 图样是一张用作遮罩的 SVG,无法获取页面中的字体,因此需要在这里把字体名写全 (例如 'PingFang SC, sans-serif');书写的字体在运行环境中不存在时由平台自行回退。
fontSizenumber字号,单位像素,默认 14。
fullscreenboolean全屏档:印子固定铺满整个视口,压在页面一切内容之上(含对话框与轻提示),不随 root 的盒子走, 页面滚动时原地不动;root 本身不再建层叠上下文。默认 false。
gapnumber两块图样之间的空白,单位像素,默认 24。
imagestring印在文字上方的图片:data:image/ 开头的内联图片,或 http(s)、相对路径与 blob: 地址。 图样用作遮罩,遮罩只取图样的透明度:印出的是该图的剪影,颜色仍由 --xh-watermark-fg 提供。 地址形式的图片先按匿名跨域取回、画进 canvas 转成内联图片再印:SVG 当图片用时自己取不到外部资源。 跨域的地址须带 Access-Control-Allow-Origin 放行,否则取不回或 canvas 被污染,这张图不印并报一条诊断, 文字照印;取回之前只印文字。其余协议(如 javascript:)一律不收。
imageSizeWatermarkImageSize图片的像素尺寸,默认 64 × 64。
opacitynumber印记的深浅,0 到 1,默认 0.15。
rotatenumber倾斜角度,单位度,默认 -22。
textstring | string[]水印文字。提供数组即多行,单个字符串中的换行同样断行; 空白行会被去除:它只使图样增高,不印出任何内容。

状态 ​

以下名称仅用于内部状态机。

状态:idle

事件:IMAGE.LOADED · IMAGE.CLEAR

connect API ​

getXxxProps() 返回对应部件的宿主属性。

成员类型说明
linesreadonly string[]归一化后的文字行;没有可印的文字时为空数组。
tileWatermarkTile图样尺寸,即平铺步距;没有图样时宽高都是 0。
imagestring图样的 data URI;没有图样时为空串。
stateWatermarkState
fullscreenboolean全屏档:印子固定铺满视口。
getRootProps() => T['element']
getContentProps() => T['element']

无障碍 ​

键盘 ​

规格出处:W3C APG

无键盘交互(不接收焦点,或焦点行为完全由原生元素提供)。

样式参考 ​

皮肤 ​

@xihan-ui/styles/watermark.css 按 [data-scope="watermark"][data-part="root"] 部件选择器书写,发布产物以挂载类 .xh-scope-watermark 代替其中的 data-scope(特异性相同),位于 xihan.components 层。覆盖样式使用 xihan.overrides,部件选择器照常可用。

forced-colors: active 下另有一套规则:颜色交给系统,边框与状态标记改用系统色关键字。

CSS 变量 ​

本组件公开覆盖槽由独立皮肤的实际消费位生成;默认来源、作用部件和状态均与 CSS 同源。

变量部件CSS 属性状态默认来源说明
--xh-watermark-fgrootbackground-colorstate=ready--xh-fg-mutedwatermark 的 root 部件 background-color 覆盖槽。
--xh-watermark-imageroot-webkit-mask-image
mask-image
state=readynonewatermark 的 root 部件 -webkit-mask-image、mask-image 覆盖槽。
--xh-watermark-layerrootz-indexfullscreen
state=ready
--xh-layer-tooltipwatermark 的 root 部件 z-index 覆盖槽。
--xh-watermark-tileroot-webkit-mask-size
mask-size
state=readyautowatermark 的 root 部件 -webkit-mask-size、mask-size 覆盖槽。

动效 ​

本组件皮肤不含过渡与关键帧,也没有脚本驱动的动效:状态一变,外观立即到位。

Released under The MIT License