导读:本期聚焦于小伙伴创作的《HTML如何制作水印?文字和图片水印添加与设置方法详解》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《HTML如何制作水印?文字和图片水印添加与设置方法详解》有用,将其分享出去将是对创作者最好的鼓励。

在网页开发中,添加水印是保护内容版权、标识内容归属的常见需求,水印分为文字水印和图片水印两种类型,都可以通过HTML和CSS配合实现,下面分别介绍两种水印的实现方法。

HTML如何制作水印?文字和图片水印添加与设置方法详解

文字水印实现方法

文字水印的核心思路是创建一个全屏覆盖的水印层,通过CSS设置文字样式、旋转角度和透明度,让水印显示在页面内容上方但不影响内容交互。

基础文字水印实现

首先需要在HTML中添加一个用于承载水印的容器元素,然后通过CSS设置水印的样式,具体代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文字水印示例</title>
    <style>
        /* 页面内容样式 */
        .content {
            padding: 20px;
            line-height: 1.6;
        }
        /* 水印容器样式 */
        .watermark {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            pointer-events: none; /* 让水印不拦截鼠标事件 */
            z-index: 9999;
            overflow: hidden;
        }
        /* 单个水印文字样式 */
        .watermark-item {
            position: absolute;
            font-size: 24px;
            color: rgba(0, 0, 0, 0.1); /* 半透明黑色 */
            transform: rotate(-45deg); /* 旋转45度 */
            white-space: nowrap;
            user-select: none; /* 禁止选中水印文字 */
        }
    </style>
</head>
<body>
    <div class="content">
        <h1>页面内容标题</h1>
        <p>这是页面的正文内容,水印会显示在内容上方,不会影响内容的正常点击和选择。</p>
        <p>更多内容可以放在这里,水印会覆盖整个页面可视区域。</p>
    </div>
    <div class="watermark" id="watermark"></div>

    <script>
        // 生成文字水印的函数
        function createTextWatermark(text) {
            const watermarkContainer = document.getElementById('watermark');
            const containerWidth = window.innerWidth;
            const containerHeight = window.innerHeight;
            const itemWidth = 200; // 单个水印的宽度
            const itemHeight = 100; // 单个水印的高度
            // 计算需要生成的水印数量
            const cols = Math.ceil(containerWidth / itemWidth) + 1;
            const rows = Math.ceil(containerHeight / itemHeight) + 1;
            // 循环生成水印元素
            for (let i = 0; i < rows; i++) {
                for (let j = 0; j < cols; j++) {
                    const watermarkItem = document.createElement('div');
                    watermarkItem.className = 'watermark-item';
                    watermarkItem.textContent = text;
                    // 设置水印位置
                    watermarkItem.style.left = j * itemWidth + 'px';
                    watermarkItem.style.top = i * itemHeight + 'px';
                    watermarkContainer.appendChild(watermarkItem);
                }
            }
        }
        // 调用函数生成水印,传入水印文字
        createTextWatermark('内部资料 禁止外传');
        // 窗口大小变化时重新生成水印
        window.addEventListener('resize', function() {
            document.getElementById('watermark').innerHTML = '';
            createTextWatermark('内部资料 禁止外传');
        });
    </script>
</body>
</html>

文字水印参数调整说明

可以通过修改CSS和JS中的参数调整水印效果:

  • 修改.watermark-itemfont-size可以调整水印文字大小
  • 修改color的透明度值可以调整水印的清晰程度,值越小越透明
  • 修改transform的旋转角度可以改变水印的倾斜方向
  • 修改JS中的itemWidthitemHeight可以调整水印的排列密度

图片水印实现方法

图片水印的实现思路和文字水印类似,只是把水印内容从文字换成图片,同样需要创建全屏覆盖的水印层,通过CSS控制图片的样式和排列。

基础图片水印实现

首先需要准备一张透明背景的水印图片,然后通过JS动态生成多个图片水印元素,代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>图片水印示例</title>
    <style>
        .content {
            padding: 20px;
            line-height: 1.6;
        }
        .img-watermark {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            pointer-events: none;
            z-index: 9999;
            overflow: hidden;
        }
        .img-watermark-item {
            position: absolute;
            width: 120px; /* 水印图片宽度 */
            height: 120px; /* 水印图片高度 */
            opacity: 0.2; /* 图片透明度 */
            user-select: none;
        }
    </style>
</head>
<body>
    <div class="content">
        <h1>页面内容标题</h1>
        <p>这是带有图片水印的页面内容,水印图片会重复铺满整个页面。</p>
        <p>图片水印相比文字水印,辨识度更高,适合品牌标识类的场景。</p>
    </div>
    <div class="img-watermark" id="imgWatermark"></div>

    <script>
        // 生成图片水印的函数,参数为水印图片的路径
        function createImageWatermark(imgSrc) {
            const watermarkContainer = document.getElementById('imgWatermark');
            const containerWidth = window.innerWidth;
            const containerHeight = window.innerHeight;
            const itemWidth = 150; // 单个水印图片的占位宽度
            const itemHeight = 150; // 单个水印图片的占位高度
            const cols = Math.ceil(containerWidth / itemWidth) + 1;
            const rows = Math.ceil(containerHeight / itemHeight) + 1;
            for (let i = 0; i < rows; i++) {
                for (let j = 0; j < cols; j++) {
                    const img = document.createElement('img');
                    img.className = 'img-watermark-item';
                    img.src = imgSrc;
                    img.style.left = j * itemWidth + 'px';
                    img.style.top = i * itemHeight + 'px';
                    // 随机旋转角度,让水印更自然
                    const rotateAngle = Math.random() * 60 - 30; // -30到30度随机
                    img.style.transform = `rotate(${rotateAngle}deg)`;
                    watermarkContainer.appendChild(img);
                }
            }
        }
        // 调用函数生成图片水印,这里使用示例图片路径,实际使用时替换为自己的图片路径
        createImageWatermark('https://ipipp.com/watermark.png');
        // 窗口大小变化时重新生成水印
        window.addEventListener('resize', function() {
            document.getElementById('imgWatermark').innerHTML = '';
            createImageWatermark('https://ipipp.com/watermark.png');
        });
    </script>
</body>
</html>

图片水印注意事项

  • 水印图片建议使用透明背景的PNG格式,避免遮挡页面内容
  • 可以通过修改.img-watermark-itemopacity属性调整水印的透明度
  • 如果水印图片加载失败,可以添加备用文字水印作为 fallback

水印防护优化

基础的水印可能会被用户通过开发者工具删除,为了提升水印的防护性,可以添加以下优化:

监听DOM变化自动恢复水印

通过MutationObserver监听水印容器的DOM变化,当水印被删除时自动重新生成,代码如下:

// 监听水印容器变化,防止水印被删除
function observeWatermark() {
    const watermarkContainer = document.getElementById('watermark');
    const observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            // 如果水印容器被修改,重新生成水印
            if (mutation.removedNodes.length > 0 || mutation.type === 'childList') {
                // 先清空容器再重新生成
                watermarkContainer.innerHTML = '';
                createTextWatermark('内部资料 禁止外传');
            }
        });
    });
    // 监听子节点变化和属性变化
    observer.observe(watermarkContainer, { childList: true, subtree: true });
}
// 初始化水印后调用监听函数
createTextWatermark('内部资料 禁止外传');
observeWatermark();

禁止右键和开发者工具(可选)

可以结合JS禁止页面右键和F12打开开发者工具,不过这种方式只能提升普通用户的删除门槛,无法完全阻止专业人员操作,代码如下:

// 禁止右键菜单
document.addEventListener('contextmenu', function(e) {
    e.preventDefault();
    return false;
});
// 禁止F12打开开发者工具
document.addEventListener('keydown', function(e) {
    if (e.key === 'F12' || (e.ctrlKey && e.shiftKey && (e.key === 'I' || e.key === 'i' || e.key === 'C' || e.key === 'c'))) {
        e.preventDefault();
        return false;
    }
});

两种水印的适用场景

水印类型适用场景优缺点
文字水印内部文档、临时预览页面、需要自定义文字内容的场景优点:实现简单,无需额外图片资源,文字内容可动态修改;缺点:美观度较低,辨识度一般
图片水印品牌官网、付费内容页面、需要展示品牌标识的场景优点:美观度高,辨识度强,可展示logo等复杂内容;缺点:需要准备图片资源,加载依赖网络

以上就是HTML制作文字和图片水印的完整方法,开发者可以根据实际需求选择合适的方案,同时结合防护优化提升水印的可靠性。

HTML水印CSS文字水印图片水印修改时间:2026-06-16 04:52:07

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。