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

如何为3x9网格的不同grid-item复用CSS hover样式,无需单独定义27个选择器

最优实现方案

1. 抽离通用CSS样式,减少重复代码

你当前27个类的重复属性占了90%的代码量,完全可以抽成一个公共类,仅保留定位属性在带序号的类中:

/* 通用样式全部放在公共类里 */
.grid-item {
  align-items: center;
  background-color: rgba(0, 0, 0, 0.7);
  border: 3px solid rgba(255, 254, 5, 0.4);
  border-radius: 10px;
  color: rgba(255, 254, 5, 0.4);
  column-gap: 10px;
  display: grid;
  height: auto;
  width: auto;
  padding: 5px;
  /* 加过渡让hover动效更平滑 */
  transition: all 0.25s ease;
}

/* 所有网格项的hover效果只需要写这一次 */
.grid-item:hover {
  /* 这里写你要的动效,比如向上偏移+边框高亮,可自定义 */
  transform: translateY(-6px);
  border-color: rgba(255, 254, 5, 0.9);
  color: rgba(255, 254, 5, 0.9);
}

/* 带序号的类仅保留定位属性,代码量大幅减少 */
.grid-item1 {
  grid-column-start: 1;
  grid-row-start: 1;
}
.grid-item2 {
  grid-column-start: 2;
  grid-row-start: 1;
}
.grid-item3 {
  grid-column-start: 3;
  grid-row-start: 1;
}
/* 剩下24个序号类同理,仅写grid-column-start和grid-row-start即可 */

2. 调整HTML结构,无需额外套层

不需要给每个网格项额外包裹div,只需要给原有网格项的class属性同时加上公共类和对应序号类即可:

<div class="grid-container">
  <div class="grid-item grid-item1">
    <div class="grid-name">
      <p class="skill">A</p>
    </div>
    <div class="grid-image">
      <img src="/static/icons/A.png">
    </div>
    <div class="grid-rank">
      <p class="small">Current rank: 200000000</p>
    </div>
    <div class="grid-level">
      <p class="small">Current level:100</p>
    </div>
    <div class="grid-xp">
      <p class="small">Current XP: 200000000</p>
    </div>
  </div>
  <div class="grid-item grid-item2">
    <!-- 内部内容保持不变 -->
  </div>
  <!-- 剩余25个网格项同理修改class属性即可 -->
</div>

之前套层方案失效的原因

CSS Grid布局只会对容器的直接子元素应用网格定位规则,你给原有网格项套了.grid-item-style外层div后,网格容器的直接子元素变成了.grid-item-style,而你没有给这个类设置任何网格定位属性,原有带序号的.grid-itemX不再是网格容器的直接子元素,定位规则完全失效,所以效果不符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:57:01