2026-10-25 09:53:44
在HTML中添加水印并优化其效果,可通过CSS方案和JavaScript方案实现,具体技巧如下:

通过CSS的background-image属性将水印图片设置为背景,适合简单场景,但灵活性较低。
body { background-image: url("watermark.png"); background-repeat: repeat; /* 平铺或no-repeat */ opacity: 0.1; /* 透明度 */ z-index: -1; /* 置于内容下方 */ position: relative; /* 使z-index生效 */}优点:实现简单,无需JavaScript。缺点:

通过动态创建DOM元素实现,灵活性高,可定制位置、内容和防篡改机制。
function addWatermark(text) { const watermark = document.createElement('div'); watermark.style.position = 'fixed'; watermark.style.top = '50%'; watermark.style.left = '50%'; watermark.style.transform = 'translate(-50%, -50%) rotate(-45deg)'; watermark.style.fontSize = '20px'; watermark.style.color = 'rgba(0, 0, 0, 0.1)'; watermark.style.zIndex = 9999; watermark.style.pointerEvents = 'none'; // 避免遮挡页面元素 watermark.innerText = text; document.body.appendChild(watermark);}addWatermark('版权所有');优点:
缺点:
CSS方案增强:
结合JavaScript动态生成CSS样式,增加修改难度(如通过JS插入<style>标签)。
避免过度依赖!important,因其效果有限且可能影响维护。
JavaScript方案增强:
MutationObserver监听DOM变化:检测水印被移除后自动重新添加。const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { if (mutation.removedNodes) { mutation.removedNodes.forEach(node => { if (node.innerText === '版权所有') { addWatermark('版权所有'); } }); } });});observer.observe(document.body, { childList: true, subtree: true });
代码混淆:通过工具(如UglifyJS)混淆JavaScript代码,增加破解难度。
根据版权需求和用户体验权衡,常见位置包括:
建议:

示例: