【问题标题】:How to make transparent border show box shadow underneath and not the div's background colour?如何使透明边框在下面显示框阴影而不是 div 的背景颜色?
【发布时间】:2020-12-25 05:52:44
【问题描述】:

我有一个div,我正在尝试为它添加一个带有盒子阴影的透明边框,以便透明边框在下面显示box-shadow,而不是div的背景颜色。

这是我为展示我的问题而创建的 JSFiddle:https://jsfiddle.net/143k7myj/

body {
  background-color: #f8f8f8;
}

div {
  width: 489px;
  height: 169px;
  background-color: #46aae3;
  box-shadow: 0px 4px 15px rgba(0, 0, 0, 0.15);
  border-radius: 3px;
  border: 10px solid transparent;
  /* background-clip: content-box; */
}

div:hover {
  border-color: white;
}
<div></div>

如您所见,当我将鼠标悬停在div 上时,边框显示为白色。如果我不将鼠标悬停在它上面,它会显示“透明”边框。但是,它在下面显示的是 div 的背景颜色,而不是我想要实现的 divbox-shadow

我的一个尝试是使用background-clip: content-box,然而,透明边框显示了实体的纯色背景色。

如何实现透明边框,使divbox-shadow 显示在透明边框下方,而不是div 的背景颜色。谢谢。

【问题讨论】:

    标签: css


    【解决方案1】:

    可以用伪元素:before实现

    body {
      background-color: #eee;
    }
    
    div {
      width: 489px;
      height: 169px;
      background-color: #46aae3;
      box-shadow: 0px 4px 15px rgba(0, 0, 0, 0.10);
      border-radius: 3px;
      position: relative;
      /* background-clip: content-box; */margin-top: 30px;margin-left: 30px;
    }
    div:before {
        content: "";
        border: 10px solid #fff;
        position: absolute;
        left: -10px;
        top: -10px;
        right: -10px;
        bottom: -10px;
        opacity: 0;
    border-radius: 3px;
    }
    
    div:hover:before {
      opacity: 1;
    }
    <div></div>

    【讨论】:

    • 好的,但我不希望边框周围出现盒子阴影。
    • 那么你想要box-shadow在哪里?你想要达到的目标
    • 我只想要 div 周围的 box-shadow。如果我没有将鼠标悬停在 div 上,我想要一个透明边框,但它会在其下方显示框阴影。当我将鼠标悬停在它上面时,它会显示带有白色的边框。
    • 是的,好的。但我也想要边界上的边界半径。
    • 添加了边框半径
    【解决方案2】:

    编辑:

    您可以使用一些变通方法通过伪元素来实现它:

    body {
      background-color: #ddd;
      margin: 0;
      padding: 10px;
    }
    
    div {
      /* change the border width here */
      --border-width: 10px;
      
      width: 489px;
      height: 169px;
      background-color: #46aae3;
      box-shadow: 0px 4px 15px rgba(0, 0, 0, 0.15);
      border-radius: 3px;
      margin: var(--border-width);
      position: relative;
    }
    
    div::before {
      content: '';
      display: block;
      width: calc(100% + var(--border-width) * 2);
      height: calc(100% + var(--border-width) * 2);
      margin: calc(var(--border-width) * -1);
      position: absolute;
      border-radius: inherit;
    }
    
    div:hover {
      box-shadow: 0px 4px 15px transparent;
    }
    
    div:hover::before {
      background-color: white;
      z-index: -1;
    }
    <div></div>

    【讨论】:

    • 好的,但我不想要边框周围的盒子阴影。另外,我希望 div 的边框半径保持不变,而不是像您的示例中那样在悬停时保持直角。
    • 我想要轮廓效果,但边框上有border-radius。
    • 更新后的答案和阿曼的差不多,你可以接受他的答案。
    • 复制粘贴的坏习惯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 2015-05-11
    • 1970-01-01
    • 2020-07-10
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多