<!-- HTML结构 -->
<div class="watermark-container">
  <div class="watermark">我的水印</div>
</div>

<style>
  /* CSS样式 */
  .watermark-container {
    position: relative;
    width: 100%;
    height: 100%;
  }

  .watermark {
    position: absolute;
    top: 0;
    left: 0;
    opacity: 0.5;
    font-size: 20px;
    transform: rotate(-45deg);
    transform-origin: center center;
    pointer-events: none;
  }
</style>

<script>
  // JS代码
  const watermarkStr = '我的水印'; // 水印内容
  const container = document.querySelector('.watermark-container');
  const containerWidth = container.offsetWidth;
  const containerHeight = container.offsetHeight;
  const watermarkWidth = 200; // 水印宽度
  const watermarkHeight = 100; // 水印高度
  const gapX = 50; // 水印之间的横向间隔
  const gapY = 50; // 水印之间的纵向间隔
  const rows = Math.ceil(containerHeight / (watermarkHeight + gapY)); // 行数
  const columns = Math.ceil((containerWidth + watermarkWidth) / (watermarkWidth + gapX)); // 列数

  for (let i = 0; i < rows; i++) {
    for (let j = 0; j < columns; j++) {
      const div = document.createElement('div');
      div.classList.add('watermark');
      div.innerText = watermarkStr;
      div.style.left = j * (watermarkWidth + gapX) + 'px';
      div.style.top = i * (watermarkHeight + gapY) + 'px';
      container.appendChild(div);
    }
  }
</script>

以上代码中,首先通过 CSS 定义了水印容器的样式和水印的基本样式。然后通过 JS 计算出需要平铺的水印数量以及它们的位置,并逐个创建添加到容器中。其中,每个水印使用 position: absolute 进行绝对定位,并通过 top 和 left 属性进行定位。同时还可以设置一些其他样式,如水印内容、字体大小、旋转角度等。

需要注意的是,这里的代码仅提供了一个简单的实现方式,如果需要更加复杂的水印效果,可以根据需求进行修改。