::before伪元素是最稳妥的文本水印方案,纯css实现、不污染dom、兼容ie9+且滚动跟随;需显式设置content、position:fixed、≥48px字体、color+opacity模拟半透、pointer-events:none,并用transform居中旋转。

用 ::before 伪元素是最直接的文本水印方案
纯 CSS 实现、不污染 DOM、兼容 IE9+,且滚动时自动跟随——这是目前最稳妥的文本水印路径。关键不是“加一个 div”,而是让 body 或容器自己“生成”水印层。
常见错误现象:水印文字不显示、只在顶部一小块出现、滚动后消失、高分屏上模糊成色块。
-
content必须显式声明,比如content: "内部资料";,空值或未设则整个伪元素不渲染 - 必须用
position: fixed;,不是absolute;否则局部滚动容器(如overflow: auto的 div)会把水印截断 -
font-size建议 ≥ 48px,太小在 2x 屏上实际渲染为 1px 线条,直接糊掉 - 别设
background-color,用color+opacity: 0.08模拟半透,比叠加背景色更可控、易维护 - 加上
pointer-events: none;,否则可能拦截点击、选中等交互
transform: rotate() 的旋转原点容易偏移
直接写 rotate(-30deg) 会让文字绕左上角旋转,结果水印飞出视口。必须配合位移校准,否则每次改字体大小都要手动调位置。
正确做法是先平移到中心,再旋转,最后反向平移——CSS 里用 transform: translate(-50%, -50%) rotate(-30deg); 配合 top: 50%; left: 50% 才真正居中倾斜。
- 如果水印要覆盖整个页面,作用对象应是
body::before,而非某个子容器 - 避免用
vw/vh做font-size,某些安卓 WebView 对它解析不稳定,推荐固定 px + 媒体查询兜底 - 中文字体务必指定
font-family,比如"Microsoft YaHei", sans-serif,否则 Linux 或 macOS 上可能 fallback 到无抗锯齿的默认字体,边缘发虚
动态内容(如用户名、时间)不能靠 ::before
CSS 伪元素的 content 不支持 JS 变量拼接,content: "欢迎 " attr(data-user) "!"; 这种写法仅对 HTML 属性有效,且无法实时更新。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
一旦需要带用户登录态、时间戳、IP 片段等动态文本,就必须切到 JS + canvas 方案。
- canvas 宽高至少设为
2 * window.innerWidth×2 * window.innerHeight,否则平铺时水印在右下角断裂 - 绘制前必须调用
ctx.translate(centerX, centerY)和ctx.rotate(),直接rotate()会绕画布左上角转 - 用
ctx.fillText(),别用ctx.strokeText()—— 后者描边在高 DPI 下发虚,打印时几乎不可读 - 生成的
data URL很长,禁止硬编码进 CSS 文件,应在 JS 中动态赋给body.style.backgroundImage
background-clip: text 不是水印方案
这个属性常被误当成“文字镂空水印”,但它实际作用是让文字区域显示其父容器的背景——也就是说,它会让文字本身变透明,露出底下的图或色。这和“在内容上叠加一层弱化文字”的水印目标完全相反。
典型翻车场景:h1 加了 background-clip: text + -webkit-text-fill-color: transparent,结果标题彻底消失,连屏幕阅读器都读不到。
- 深色主题下若没同步调整父级背景,水印直接不可见
- 它依赖父容器有明确背景(图片/渐变/色块),而真实页面内容往往是多层、动态、无统一背景的
- 真要实现“文字穿透效果”,那是遮罩层(mask)或 SVG 滤镜的事,不属于水印范畴
实际水印最难的部分不是画出来,而是让它在各种缩放、滚动、主题切换、打印预览下都稳定可见——伪元素方案省事但死板,canvas 方案灵活却得自己扛渲染逻辑和内存回收。多数项目卡在“要不要支持打印水印”和“是否允许用户截图后手动删掉”这两个现实边界上。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










