You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

列表项Hover多边形遮罩与文本定位的前端实现问题及原型

两行列表项Hover多边形遮罩文本效果实现方案

问题背景

需要实现两行排列的6个列表项,要求鼠标hover时显示覆盖在内容上方的多边形遮罩,且遮罩内要放置对应文本。每个列表项的遮罩多边形定位不同,最初的问题是hover效果直接作用在content元素上,无法实现遮罩覆盖上层、遮挡内容并添加文本的需求。

解决方案

核心是给每个列表项新增独立的遮罩元素,通过鼠标事件控制遮罩显示,结合clip-path实现不同的多边形形状,同时在遮罩内嵌入文本:

  • 结构层:为每个列表项添加绝对定位的mask元素,层级高于content,承载遮罩背景和文本
  • 样式层:用clip-path为不同遮罩定义专属多边形路径,默认隐藏遮罩,hover时触发显示
  • 交互层:通过CSS hover或JS事件监听,控制遮罩的显示状态

代码示例

HTML结构

<div class="list-grid">
  <!-- 第一行3个项 -->
  <div class="list-item">
    <div class="item-content">卡片内容1</div>
    <div class="item-mask mask-shape-1">遮罩文本1</div>
  </div>
  <div class="list-item">
    <div class="item-content">卡片内容2</div>
    <div class="item-mask mask-shape-2">遮罩文本2</div>
  </div>
  <div class="list-item">
    <div class="item-content">卡片内容3</div>
    <div class="item-mask mask-shape-3">遮罩文本3</div>
  </div>
  <!-- 第二行3个项 -->
  <div class="list-item">
    <div class="item-content">卡片内容4</div>
    <div class="item-mask mask-shape-4">遮罩文本4</div>
  </div>
  <div class="list-item">
    <div class="item-content">卡片内容5</div>
    <div class="item-mask mask-shape-5">遮罩文本5</div>
  </div>
  <div class="list-item">
    <div class="item-content">卡片内容6</div>
    <div class="item-mask mask-shape-6">遮罩文本6</div>
  </div>
</div>

CSS样式

/* 两行三列布局 */
.list-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 15px;
  padding: 20px;
}

.list-item {
  position: relative;
  width: 220px;
  height: 180px;
  overflow: hidden;
}

.item-content {
  width: 100%;
  height: 100%;
  background-color: #f0f0f0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
}

/* 遮罩基础样式 */
.item-mask {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.8);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  transition: opacity 0.3s ease;
  font-size: 18px;
}

/* 为每个遮罩定义不同的多边形路径 */
.mask-shape-1 {
  clip-path: polygon(0 0, 100% 0, 100% 75%, 0 100%);
}

.mask-shape-2 {
  clip-path: polygon(0 25%, 100% 0, 100% 100%, 0 100%);
}

.mask-shape-3 {
  clip-path: polygon(0 0, 100% 25%, 100% 75%, 0 100%);
}

.mask-shape-4 {
  clip-path: polygon(0 0, 100% 0, 100% 100%, 0 75%);
}

.mask-shape-5 {
  clip-path: polygon(0 0, 100% 0, 75% 100%, 0 100%);
}

.mask-shape-6 {
  clip-path: polygon(25% 0, 100% 0, 100% 100%, 0 100%);
}

/* hover时显示遮罩 */
.list-item:hover .item-mask {
  opacity: 1;
}

可选JS交互(替代CSS hover)

如果需要更复杂的交互逻辑,可改用JS控制:

const listItems = document.querySelectorAll('.list-item');

listItems.forEach(item => {
  const mask = item.querySelector('.item-mask');
  item.addEventListener('mouseenter', () => {
    mask.style.opacity = '1';
  });
  item.addEventListener('mouseleave', () => {
    mask.style.opacity = '0';
  });
});

内容的提问来源于stack exchange,提问作者Yaerox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:22:02