跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

HTML怎么做明水印_html页面明水印覆盖实现方法【方法】

明水印必须是真实DOM元素而非background-image,否则会被遮挡、不随滚动、缩放变形、打印丢失且无法防搬运;应使用position:fixed+pointer-events:none的全屏div,配合transform旋转、vw字体、动态网格生成及@media print适配。 明水印为什么不能用
background-image
直接贴图 直接给
body
或容器设
background-image
加透明 PNG 水印,看似简单,但实际会出问题:水印被内容遮挡、无法随滚动固定、缩放后变形、打印时可能不显示。更关键的是——用户选中文字或截图时,水印根本不在 DOM 里,起不到“明示归属/防搬运”的作用。 真正有效的明水印必须是真实 DOM 元素,层叠在内容上方,且具备一定抗干扰能力。 用
position: fixed
+
pointer-events: none
实现基础覆盖 最轻量、兼容性最好的方案:创建一个全屏
div
,用绝对定位铺满视口,再通过 CSS 旋转、重复平铺文字,同时确保不影响用户交互。
z-index
必须足够高(如
9999
),但别盲目设
2147483647
——某些老版 iOS Safari 会失效
pointer-events: none
是关键,否则所有点击、输入都会被水印层拦截;子元素如需要响应事件,得单独加
pointer-events: auto
文字建议用
transform: rotate(-30deg)
而非
rotateZ
,兼容性更稳 字体大小用
vw
单位(如
8vw
),比
px
更适应不同屏幕
CONFIDENTIAL
动态生成多行水印避免留白断层 单个居中文字在宽屏下左右大片空白,窄屏又挤成一团。更稳妥的做法是用 JS 动态计算行列数,生成网格状水印节点。 立即学习 “ 前端免费学习笔记(深入) ”; 核心逻辑:获取视口宽高 → 算出单个水印块的尺寸(比如
200px × 100px
)→ 用嵌套循环生成
div
块并绝对定位。 使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件 如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Andr​​oid友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Andr​​oid应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更 下载 不要用
document.write
或 innerHTML 拼接大量字符串,性能差且易 XSS;改用
document.createElement
批量创建 每个水印
div
都要设
pointer-events: none
,父容器也需设,双重保险 监听
resize
事件重绘水印,但加节流(如 100ms),避免频繁触发 若页面有横向滚动,
left
应基于
document.documentElement.scrollWidth
计算,而非
window.innerWidth
打印时水印消失?加
@media print
强制启用 默认情况下,多数浏览器打印预览会忽略
fixed
和透明度较低的元素。不显式声明,水印在 PDF 导出或打印时就没了。 必须在 CSS 中补充:
@media print { #watermark { position: absolute !important; top: 0 !important; left: 0 !important; width: 100% !important; height: auto !important; opacity: 0.15 !important; transform: rotate(-30deg) !important; pointer-events: none !important; } }
注意:
!important
在这里不是偷懒,而是对抗浏览器打印样式表的默认重置规则。没有它,
fixed
在打印上下文中基本失效。 另外,如果页面用了 CSS-in-JS 或 Shadow DOM,水印节点必须挂载到
document.body
顶层,否则打印时可能被隔离丢弃。

相关文章