【问题标题】:Simple curtain effect on hover using pure CSS使用纯 CSS 对悬停的简单窗帘效果
【发布时间】:2018-12-01 10:59:24
【问题描述】:

我正在尝试制作一个简单的窗帘效果。当我们越过卡片(在本例中为图像)时,在过渡的 1 秒内,从该图像的顶部到底部有一个半透明层。我以前已经做过,现在我不明白我错过了什么。代码很简单,应该可以工作,我需要一个简单的解决方案,任何 javascript 或高级技术都是必要的。

Codepen 链接:https://codepen.io/jorgemonte/pen/rKvmpo

代码如下:

HTML:

<a class="card" href="">
<img class="image" src="https://www.w3schools.com/w3images/fjords.jpg" alt="">
</a>

CSS:

.card{
  display:inline-block;
  position:relative;
  border:1px solid black;
}

.image:before{
    content:"";
    width:100%;
    height:100%;
    position:absolute;
    top:0;
    left:0;
    background-color:rgba(0, 0, 0, 0.3);
    opacity:0;
    visibility:hidden;
    transform-origin:top center;
    transform: scale3d(1, 0, 1);
    transition:1s;
}

.card:hover .image:before{
    opacity:1;
    transform: scale3d(1, 1, 1);
    visibility: visible;
}

【问题讨论】:

    标签: css effect


    【解决方案1】:

    CSS pseudo-elements ::before::after 只能存在于能够有子元素的元素上。请参阅 MDN 的此注释:

    注意:::before::after生成的伪元素是 包含在元素的格式框中,因此不适用于 替换元素,例如 &lt;img&gt;,或替换为 &lt;br&gt; 元素。

    将您的 ::before 移动到 .card div 可解决此问题:

    .card {
      display: inline-block;
      position: relative;
      border: 1px solid black;
    }
    
    .card::before {
      content: "";
      width: 100%;
      height: 100%;
      position: absolute;
      top: 0;
      left: 0;
      background-color: rgba(0, 0, 0, 0.3);
      opacity: 0;
      visibility: hidden;
      transform-origin: top center;
      transform: scale3d(1, 0, 1);
      transition: 1s;
    }
    
    .card:hover::before {
      opacity: 1;
      transform: scale3d(1, 1, 1);
      visibility: visible;
    }
    <a class="card" href="">
      <img class="image" src="https://www.w3schools.com/w3images/fjords.jpg" alt="">
    </a>

    【讨论】:

    • 点击了顶部的箭头,几乎忘记了复选标记哈哈。谢谢大佬。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2015-11-24
    • 2012-12-28
    相关资源
    最近更新 更多