Skip to content

Watermark 水印 ​

在宿主元素上平铺文字或图案水印。组件拥有高安全性的防御防篡改机制,在用户尝试修改水印的 style 或物理从 DOM 树中移除水印节点时,会瞬间触发内置的 MutationObserver 监听,瞬间销毁脏节点并彻底重建。

预览 ​

Preview

基础文本水印 (全区域铺满)

机密合同内容详情

本协议及其附件所含全部技术信息、商业机密和规划均属甲乙双方的核心资产。未经双方共同书面授权,严禁任何第三方以任何形式进行复制、分发或传播。

旋转度数与网格间距定制

红色醒目警告水印

此处平铺的是红色倾斜的 Confidential 英文防篡改水印,间距加宽为 100x100 像素网格,多层防护。

安装 ​

pnpm dlx brutx-vue@latest add watermark

用法 ​

基础文字水印 ​

将敏感页面或机密内容包裹在 <Watermark> 中。

vue
<script setup>
import { Watermark } from 'brutx-ui-vue'
</script>

<template>
    <Watermark content="机密信息,严禁外传">
        <div class="confidential-doc">
            <h3>核心机密数据</h3>
            <p>合作条款 details...</p>
        </div>
    </Watermark>
</template>

多行水印与字体/旋转定制 ​

支持传入数组生成多行水印,并且可以控制倾斜角度、网格大小以及文字样式。

vue
<template>
    <Watermark
        :content="['CONFIDENTIAL', 'DEPT 01']"
        :rotate="-15"
        :gap="[120, 120]"
        :font="{ color: 'rgba(239, 68, 68, 0.12)', fontSize: 16, fontWeight: 'bold' }"
    >
        <div class="content-box">
            <p>敏感段落数据示例...</p>
        </div>
    </Watermark>
</template>

API 参考 ​

Watermark — 属性
名称类型默认值说明
width
number | undefined
120
设置单个水印图块的宽度,单位为像素。
详情

声明类型

number | undefined

默认值详情

解析值
120

来源

Watermark.vue:14

packages/ui/src/components/watermark/Watermark.vue

height
number | undefined
64
设置单个水印图块的高度,单位为像素。
详情

声明类型

number | undefined

默认值详情

解析值
64

来源

Watermark.vue:15

packages/ui/src/components/watermark/Watermark.vue

rotate
number | undefined
-22
设置水印图案的旋转角度,单位为度;默认值 -22 表示逆时针倾斜。
详情

声明类型

number | undefined

默认值详情

解析值
-22

来源

Watermark.vue:16

packages/ui/src/components/watermark/Watermark.vue

zIndex
number | undefined
9999
设置水印覆盖层的 CSS z-index。
详情

声明类型

number | undefined

默认值详情

解析值
9999

来源

Watermark.vue:17

packages/ui/src/components/watermark/Watermark.vue

image
string | undefined
undefined
设置作为水印的图片 URL 或 Data URL;提供图片时使用图片图案而不绘制文本内容。
详情

声明类型

string | undefined

默认值详情

解析值
undefined

来源

Watermark.vue:18

packages/ui/src/components/watermark/Watermark.vue

content
string | string[] | undefined
""
设置水印文本;传入字符串数组可在单个图块中排布多行。
详情

声明类型

string | string[] | undefined

默认值详情

解析值
""

来源

Watermark.vue:19

packages/ui/src/components/watermark/Watermark.vue

font
WatermarkFont | undefined
{ "fontFamily": "sans-serif", "fontSize": 14, "fontStyle": "normal", "fontWeight": "normal" }

按实例调用工厂函数

配置文字水印的颜色、字号、字重、字形和字体族;默认使用 14px sans-serif 常规字重,颜色跟随 --brutal-fg 并以 15% 不透明度绘制。
详情

声明类型

WatermarkFont | undefined

关联类型

WatermarkFont
类型定义 — WatermarkFont
interface WatermarkFont {
    color?: string
    fontSize?: number | string
    fontWeight?: 'normal' | 'light' | 'weight' | 'bold' | number
    fontStyle?: 'normal' | 'italic' | 'oblique'
    fontFamily?: string
}

默认值详情

声明
() => ({ fontSize: 14, fontWeight: 'normal', fontStyle: 'normal', fontFamily: 'sans-serif' })

来源: packages/ui/src/components/watermark/Watermark.vue

解析值
{ "fontFamily": "sans-serif", "fontSize": 14, "fontStyle": "normal", "fontWeight": "normal" }

来源

Watermark.vue:20

packages/ui/src/components/watermark/Watermark.vue

gap
[number, number] | undefined
[100, 100]

按实例调用工厂函数

设置相邻水印图块在水平方向和垂直方向的间距,顺序为 [gapX, gapY]。
详情

声明类型

[number, number] | undefined

默认值详情

解析值
[100, 100]

来源

Watermark.vue:21

packages/ui/src/components/watermark/Watermark.vue

offset
[number, number] | undefined
[0, 0]

按实例调用工厂函数

设置水印平铺起点在水平和垂直方向上的偏移,顺序为 [offsetX, offsetY]。
详情

声明类型

[number, number] | undefined

默认值详情

解析值
[0, 0]

来源

Watermark.vue:22

packages/ui/src/components/watermark/Watermark.vue

seal
boolean | undefined
false
启用复古印章装饰,在图块中绘制双圆环和中心五角星。
详情

声明类型

boolean | undefined

字面量

  • false
  • true

默认值详情

解析值
false

来源

Watermark.vue:24

packages/ui/src/components/watermark/Watermark.vue

Watermark — 插槽
名称签名或类型说明
#default
{}
水印覆盖的宿主内容;组件在其上方平铺装饰性水印。
详情

声明类型

{}

来源

Watermark.vue

packages/ui/src/components/watermark/Watermark.vue

WatermarkFont 类型定义 ​

typescript
interface WatermarkFont {
    color?: string                  // 文本颜色,默认 'rgba(0, 0, 0, 0.15)'
    fontSize?: number | string      // 字体大小,支持数字或带单位字符串(如 14, '16px', '1.2rem'),默认 14
    fontWeight?: 'normal' | 'light' | 'weight' | 'bold' | number  // 字体粗细,默认 'normal'
    fontStyle?: 'normal' | 'italic' | 'oblique'                   // 字体风格,默认 'normal'
    fontFamily?: string             // 字体族,默认 'sans-serif'
}

安全特性 ​

  • Canvas 兼容兜底:在不支持 Canvas 渲染的无浏览器测试环境(如 JSDOM)下,自动降级为生成纯矢量 SVG 的 Base64 水印图层,保障组件渲染通过。
  • 防止恶意篡改:采用基于 MutationObserver 的防篡改防火墙,一旦用户强行在 Devtools 中修改样式(如 display: none)或强制 remove() 节点,组件将拦截该变动,并在 50ms 内摧毁原位置垃圾,重新生成干净的 DOM 节点,保障高安全要求。

可访问性 ​

  • 装饰层语义:水印是装饰性背景层,不参与语义内容;建议结合 aria-hidden 与 pointer-events-none 使用,避免被辅助技术朗读或被指针事件拦截。
  • 对比度考虑:水印文本颜色(--brutal-watermark-color 等令牌)需与背景保持足够对比,但作为装饰层不承担信息传达职责,不强制 WCAG 文本对比。
  • 动效降级:防篡改重建、Canvas 绘制均无强制动效,尊重 prefers-reduced-motion。

蛮力铸就。