【问题标题】:How to hide invisible Elements in CSS Animation?如何在 CSS 动画中隐藏不可见元素?
【发布时间】:2020-06-07 19:58:55
【问题描述】:

我编写了一张 Bootstrap 4 动画卡片:https://codepen.io/Steven2105/pen/ZEGLWma

卡片默认显示标题,卡片文字应该是不可见的。 将鼠标悬停在卡片上后,文本也应该向上移动并可见。

所以我的问题是,如何隐藏卡片文本,只显示标题并使其在悬停后可见。

如果你向下滚动this page,你应该也会看到这样的卡片,我希望它们和它们一样。

.card-body {
  margin-top: -58px;
  background-color: rgba(0, 82, 204, 0.7);
}

.card:hover .card-body {
  animation-duration: 0.6s;
  animation-name: slidein;
  animation-fill-mode:both;
  margin-top: 0;
}

@keyframes slidein {
  from {
    transform: translateY(0);
  }
  
  to {
    transform: translateY(-100%);
  }
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<div class="card" style="width: 18rem;">
  <img class="card-img-top" src="https://via.placeholder.com/150" alt="Card image cap">
  <div class="card-body">
    <h5 class="card-title">Card title</h5>
    <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
  </div>
</div>

【问题讨论】:

    标签: css twitter-bootstrap css-animations


    【解决方案1】:

    .card {
      position: relative;
      overflow: hidden;
    }
    
    .card-body {
      bottom: 0;
      width: 100%;
      position: absolute;
      background-color: rgba(0, 82, 204, 0.7);
    }
    
    .card-text {
      opacity: 0;
      max-height: 0;
      transition: all 0.5s ease-in;
    }
    
    .card:hover .card-text {
      display: block;
      max-height: 150px;
      opacity: 1;
      transition: all 1s ease-out; 
    }
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
    <div class="card" style="width: 18rem;">
      <img class="card-img-top" src="https://via.placeholder.com/150" alt="Card image cap">
      <div class="card-body">
        <h5 class="card-title">Card title</h5>
        <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
      </div>
    </div>

    【讨论】:

    • 我认为你的答案目前为止效果最好,但是如果你有多张卡片,它们会相互堆叠,所以你看不到它们。有可能解决这个问题吗?
    • 对不起,我的错。该卡具有绝对位置,更改为相对位置。请尝试一下。
    【解决方案2】:

    我看到了最后 2 个回复。我来找你提供这张 UX 卡的优秀版本。几个月前我在 codepen 上做了这个,并试图在卡片上添加一个很酷的效果。也许我的参与会对你有所帮助! 我的密码笔:https://codepen.io/ZellRDesign/pen/MPbRyr

    * { box-sizing: border-box; }
    
    @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700);
    
    body{
      font-family: "Open Sans";
      font-size:16px;
      background-color: #eee;
    }
    
    .link{
        display: block;
    }
    
    .card {
      position: absolute;
      top: 50%;
      left: 50%;
      transform :  translateX(-50%) translateY(-50%) translateZ(0);
      width: 370px;
      box-shadow: 0 0 20px rgba(black,0.1);
      overflow: hidden;
      transition: box-shadow 0.5s;
    }
    
    .card a{
        color:inherit;
        text-decoration: none;
    }
    
    .card:hover{
      box-shadow:0 0 50px rgba(black,0.3);
    }
    
    .card-date{
      position: absolute;
      top: 20px;
      right: 20px;
      width: 45px;
      height: 45px;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      background-color: rgb(68, 105, 176);
      border-radius: 50%;
      color:#fff;
      font-weight: 700;
      line-height: 13px;
      font-weight: 300;
    }
    
    .card-date-month{
        text-transform: uppercase;
        font-size:10px;
    }
    
    .card-date-day{
        font-size:14px;
    }
    
    .card-thumb{
      height: 245px;
      overflow: hidden;
      background-image: url("https://images.unsplash.com/photo-1512036849132-48508f294900?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=af817fb1a3fe6d229f4bfc0b8d60441a&auto=format&fit=crop&w=634&q=80");
      background-size: cover;
      transition: height 0.5s;
      
      img{
        display:block;
        opacity: 1;
        transform: scale(1);
        transition: opacity 0.5s, transform 0.5s;
      }
    }
    
    .card:hover .card-thumb{
        height: 130px;
    }
    
    .card-body{
      position: relative;
      height: 105px;
      background-color: #e6e6e6;
      padding:20px;
      transition: height 0.5s;
    }
    
    .card:hover .card-body{
        height: 220px;
    }
    
    .card-title{
      margin: 0;
      padding: 0 0 10px 0;
      color: #000;
      font-size: 22px;
      font-weight: bold;
      text-transform: uppercase;
    }
    
    .card-description{
      position: absolute;
      left: 20px;
      right: 20px;
      bottom: 20px;
      margin: 0;
      padding: 0;
      color: #666C74;
      line-height: 27px;
      opacity:0;
      transform: translateY(45px);
      transition: opacity 0.5s -0.2s, transform 0.5s -0.2s;
      transition-delay: 0s;
    }
    .card:hover .card-description{
        opacity:1;
        transform: translateY(0);
        transition-delay: 0.2s;  
    }
    <article class="card">
      <header class="card-thumb">
        <a href="#" class="link"></a>
      </header>
      <date class="card-date">
        <span class="card-date-day">11</span>
        <br/>
        <span class="card-date-month">Juin</span>
      </date>
      
      <div class="card-body">
        <h2 class="card-title"><a href="#">We're on a highway to hell!</a></h2>
        <p class="card-description">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit cumque non commodi, modi recusandae cupiditate ipsa ab soluta. Illum, dolore.</p>
      </div>
    </article>

    注意:此链接可以为您提供很棒的教程(法语):https://www.grafikart.fr/tutoriels/card-ui-629

    【讨论】:

    • 您的解决方案也很不错,但不适用于多卡并且是纯 CSS。不过还是谢谢你:)
    • 它适用于多卡,看这个:codepen.io/ZellRDesign/pen/MPbRyr,你只需要删除 .card css 上的 3 firsts 行
    • 好的。但请注意,文本现在会干扰标题。
    • 不适合我,你能解释一下这个错误吗?你用什么浏览器?
    • 我使用的是最新的 Chrome 浏览器。当您有一个相对较大的显示器时它可以工作,但是在正常尺寸和较小的显示器上它会干扰。
    【解决方案3】:

    您可以使用可见性属性

    示例 1:

    h2.a {
       visibility: visible;
    }
    
    h2.b {
       visibility: hidden;
    }
    

    示例 2:

    HTML

    <div class="container">
     <h1>Link Hover Here</h1>
    
      <h3>Lorem ipsum dolor sit amet consectetur adipisicing elit. Est, aut! Ea eos 
       voluptate numquam sapiente cum, enim facilis a cumque dolore, modi, autem possimus 
       voluptatem architecto ratione sequi dolores ipsa.</h3>
    </div>
    

    CSS

    h3{
        visibility: hidden;
    }
    
    h1:hover {
      color: #ff0000;
    }
    
    .container:hover h3{
      visibility: visible;
    }
    

    CSS 可见性属性: https://www.w3schools.com/cssref/pr_class_visibility.asp

    Codepen: https://codepen.io/manaskhandelwal1/pen/abOpNgR

    【讨论】:

      【解决方案4】:

      .card-body {
        margin-top: -58px;
        background-color: rgba(0, 82, 204, 0.7);
        position: absolute;
        background-color: rgba(0, 82, 204, 0.7);
        bottom: 0px;
        right: 0px;
        width: 100%;
      }
      
      .card:hover .card-body {
        animation-duration: 0.6s;
        animation-name: slidein;
        animation-fill-mode:both;
        margin-top: 0;
      }
      
      .card-text{
        display:none;
      }
      
      .card:hover .card-text{
        display:block;
      }
      
      .card:hover .card-body{
        position:relative !important;
      }
      
      @keyframes slidein {
        from {
          transform: translateY(0);
        }
        
        to {
          transform: translateY(-100%);
        }
      }
      <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
      <div class="card" style="width: 18rem;">
        <img class="card-img-top" src="https://via.placeholder.com/150" alt="Card image cap">
        <div class="card-body">
          <h5 class="card-title">Card title</h5>
          <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
        </div>
      </div>

      【讨论】:

      • 非常感谢,您也知道如何隐藏卡片下方的蓝色框吗?这样默认情况下只显示带有标题的图像。
      猜你喜欢
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 2016-09-06
      • 2021-04-04
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      相关资源
      最近更新 更多