Skip to content

Watermark 水印 ​

容器级水印层,铺在内容之上且不拦截任何交互,适合敏感信息防泄露。

渲染引擎:文字/灰阶图片水印由 canvas 绘制平铺单元(toDataURL 作背景平铺),尺寸按 devicePixelRatio 放大,高分屏不模糊;SSR 与无 canvas 环境自动回退 SVG data-uri(fill=currentColor 跟随主题),两路径渲染结构一致,真水合校验后接管。tile 按绘制参数缓存,仅相关属性或主题色变化才重绘;窗口 resize 由背景平铺天然适配。

文字水印 ​

基础文字水印

平铺文字水印,容器内任意内容均可作为 slot 传入

text 生成斜纹平铺单元;repeat 存在时平铺,缺省时单枚居中。

单枚与透明度 ​

单枚居中 + 透明度

opacity 控制水印层透明度(0–1,自动夹取边界)。

图片水印 ​

图片水印

`image` 属性传入图片 URL,与 text 同时存在时 image 优先

图片灰阶 ​

grayscale:图片灰阶滤镜

grayscale 存在时图片水印经 canvas filter: grayscale(1) 转为灰度(跨域图片需目标站放行 CORS,否则回退原图);无 canvas 环境回退为图层 CSS filter,能力不丢。

不拦截交互 ​

内容正常交互

水印层 `pointer-events: none`,上方的按钮/输入等交互完全不受影响。

空容器 ​

无内容也显示水印

容器没有任何 slot 内容时,水印层照常渲染。

多行、旋转与字体 ​

多行文字 / 旋转 / 字体族

text 支持 JSON 数组(或 \n)多行;rotate 控制旋转角(默认 -30);width / height 调单枚画布尺寸(缺省按文字内容自适应:旋转外接框 + 内边距,保证默认密度下每个平铺单元完整容纳文字);font-size / font-weight / font-family 进 canvas 文字;color 支持 11 个预设色名(走 --oas-preset-* token,暗色自动适配)或任意 CSS 色值,缺省跟随主题文字色(暗色下同样可见,主题切换自动重绘)。

间隙与偏移 ​

gap / offset 平铺参数

gap="[x,y]" 控制平铺单元间距(默认取 tile 尺寸),offset="[x,y]" 控制起始偏移(默认 gap/2);width / height 可改文字 tile 尺寸,z-index 可抬升水印层(默认 2)。

错位排布 ​

staggered 奇偶行错位

staggered 存在时双层背景错位半 tile,奇偶行错开排布(仅平铺模式生效)。

防篡改 ​

tamper-proof:删不掉的水印

打开浏览器开发者工具,在 Elements 里删除 shadow 内的水印层、或改写它的 style——水印会自动重挂/恢复,并触发 oas-remove 事件
模拟篡改(删除水印层)tamper-proof="false" 对照

尚未检测到篡改

tamper-proof 默认开启(="false" 关闭):MutationObserver 监听水印层被移除或样式被改写,自动重挂/恢复并派发 oas-remove 事件(detail.type 为 removed / modified)。防君子不防小人——它兜底「随手删除」,不是安全边界。

可拖拽水印 ​

movable:按住水印拖动

在水印上按住拖动(grab 光标),图案随手势平移,offset 实时写回属性

movable 存在时水印层接管指针(grab/grabbing 光标),拖拽把位移写入 offset 属性——受控通道更新,组件重绘后位置仍保留。注意:此时水印层会拦截其覆盖区域的交互。

全屏水印 ​

fullscreen:铺满视口的全屏水印

开启全屏水印

点击按钮开启全屏水印:宿主变为 fixed 铺满视口,页面滚动水印不动,不拦截任何交互;再次点击关闭。

fullscreen 存在时组件自身 position: fixed; inset: 0 铺满视口(pointer-events: none),无需宿主包裹;默认最高层级,可用 z-index 属性或 --oas-watermark-fullscreen-z-index CSS 变量调整。与 repeat / staggered / movable / grayscale 均可组合;不设 fullscreen 时容器模式行为零变化。注意:全屏模式下 slot 内容不参与布局交互。

API ​

oas-watermark ​

属性 ​

属性说明类型默认值
color水印文字色:11 预设名(--oas-preset-*)或任意 CSS 色值;缺省走文本主色 tokenstring—
font-family字体族(默认 sans-serif)stringsans-serif
font-size字号(px,默认 16)string16
font-weight字重(默认 400)string400
fullscreen全屏水印:宿主 fixed inset:0 铺满视口(pointer-events:none),默认最高层级(z-index 属性或 --oas-watermark-fullscreen-z-index 可调),页面滚动不动boolean—
gap平铺间隙 JSON [x,y](默认 tile 尺寸)string—
grayscale图片水印灰阶滤镜(canvas filter: grayscale(1));无 canvas 环境回退图层 CSS filterboolean—
height文字 tile 高(未设置时按内容自适应;图片水印缺省 120)string—
image图片水印 URL(存在时优先于 text)string—
movable可拖拽移动水印(位移写回 offset 属性,受控保留)boolean—
offset平铺起始偏移(px 或 JSON [x,y];默认 gap/2,与旧居中视觉等价)string—
opacity水印层透明度(0–1,自动夹取)string0.15
repeat布尔,存在时平铺;缺省单枚居中boolean—
rotate旋转角度(度,默认 -30)string-30
staggered错位排布(双层背景,第二层偏移 offset + gap/2;仅平铺模式)boolean—
tamper-proof防篡改(默认 true):MutationObserver 监测图层被删/被改自动重挂并派发 oas-remove;"false" 关闭stringtrue
text文字水印内容(与 image 二选一)string—
width文字 tile 宽(未设置时按内容自适应:旋转外接框 + 内边距;图片水印缺省 240)string—
z-index水印层叠层级(默认 2);fullscreen 时写到宿主,覆盖默认最高层string—

事件 ​

事件说明
oas-remove防篡改监测到图层被移除/篡改时派发,detail: { type: "removed" | "modified" }

插槽 ​

名称说明
默认被水印覆盖的内容

CSS 变量 ​

CSS 变量默认值
--oas-watermark-fullscreen-z-index2147483647

水印为装饰层(aria-hidden + pointer-events: none),不参与可访问性树,不拦截交互。

基于 MIT OR Apache-2.0 双许可发布