伪元素后没有显示box-shadow

Pet*_*kou 3 html css css3

我正在尝试制作类似地铁的菜单,当用户将鼠标悬停在每个磁贴上时,我希望它显示一个盒子阴影.现在我开始工作了,但我读到最好在::after伪元素上使用它更加平滑,但它似乎不起作用.这是jsFiddle.

p.tile {
  text-align: center;
  padding: 5rem;
  background: #58588E;
  color: white;
  margin: 2rem;
  box-sizing: border-box;
}
p.tile::after {
  content: "";
  box-shadow: 3px 5px 20px -1px rgba(0, 0, 0, 0.8);
  opacity: 0;
  transition: opacity 0.3s ease-in-out;
}
p.tile:hover::after {
  opacity: 1;
}
Run Code Online (Sandbox Code Playgroud)
<a href="#" class="tile-link">
  <p class="tile">My Progress</p>
</a>
Run Code Online (Sandbox Code Playgroud)

Sti*_*ers 5

问题是::after伪元素实际上没有任何宽度或高度.您可以设置position:relative在容器上,并设置position:absolute+ left:0,right:0,top:0,bottom:0技巧,使其大小相同的容器.

p.tile {
  text-align: center;
  padding: 5rem;
  background: #58588E;
  color: white;
  margin: 2rem;
  box-sizing: border-box;
  /* new */
  position: relative;
}
p.tile::after {
  content: "";
  box-shadow: 3px 5px 20px -1px rgba(0, 0, 0, 0.8);
  opacity: 0;
  transition: opacity 0.3s ease-in-out;
  /* new */
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
}
p.tile:hover::after {
  opacity: 1;
}
Run Code Online (Sandbox Code Playgroud)
<a href="#" class="tile-link">
  <p class="tile">My Progress</p>
</a>
Run Code Online (Sandbox Code Playgroud)