堆叠多个css选择器中的盒子阴影

时间:2017-01-12 20:06:09

标签: css3

我在Eml中制作了一个小游戏,我正在使用css进行可视化。 我有一个带有单元格的网格,都得到了类cell。 但是,还有一个具有明显用途的类selected

现在,为了向用户显示这个,我有以下css:

.game .cell:hover {
    box-shadow: inset 0 0 5px rgba(200, 50, 50, 1);
}
.game .cell.selected {
    box-shadow: 0 0 5px rgba(50, 50, 200, 1);
}

因此,这会为您当前悬停的单元格添加阴影,如果选择单元格,则会添加不同的阴影。 但是,当您将鼠标悬停在当前选定的一个上时,它只显示“selected-shadow”,而不是两者。

一个简单的解决方法当然是添加:

.game .cell.selected:hover {
    box-shadow: 0 0 5px rgba(50, 50, 200, 1), inset 0 0 5px rgba(200, 50, 50, 1);
}

然后它适用于两者,所以这很好。 然而,它并不完美。 如果我决定更改悬停效果,那么我还必须更改所选的+悬停效果。

所以有重复的数据,我的问题是:可以在不重复数据的情况下实现相同的目标吗?

注意:我想知道一个纯粹的CSS解决方案,没有额外的库,如SASS或类似的,如果可能的话

1 个答案:

答案 0 :(得分:3)

你可以做一个小技巧并使用伪元素:



.cell {
  width: 100px;
  height: 100px;
  display: inline-block;
  border: solid 1px; 
  position: relative;
}

.cell:hover {
    box-shadow: inset 0 0 5px rgba(200, 50, 50, 1);
}
.cell.selected:after {
  content: "";
  position: absolute;
  top: 0px;
  right: 0;
  bottom: 0;
  left: 0;
    box-shadow: 0 0 5px rgba(50, 50, 200, 1);
}

<div class="cell"></div>
<div class="cell selected"></div>
&#13;
&#13;
&#13;