【问题标题】:Transform Issue With Bootstrap Card引导卡的转换问题
【发布时间】:2020-08-09 02:12:21
【问题描述】:

我有这样一张引导卡:

.task__content {
  transition: transform 0.2s linear 0s;

  transform: scaleY(0);
  transform-origin: top center;
}

.task:hover .task__content {
  transform: scaleY(1);
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet"/>
<div class="task card" data-is-complete="incomplete">
  <div class="task__toolbar card-header d-flex align-items-center py-2">
    <!--task checklist-->
    <form class="task__form mr-3">
      <div class="task__form-block form-check"><input class="task__checkbox" type="checkbox" /></div>
    </form>
    <!--task title-->
    <div class="task__title">
      <p>Test Title</p>
    </div>
    <!--task btn bar-->
    <div class="task__btn-bar d-flex ml-auto">
      <!--expand button (optional - appears only if there is a task description)--><button class="task__descr-expand btn btn--iconed btn-sm" type="button"><span class="btn__icon--lg material-icons">expand</span></button>
      <!--edit task btn--><button class="task__edit btn btn--iconed btn-sm" type="button"><span class="btn__icon material-icons">edit</span></button>
      <!--delete task btn--><button class="task__del btn btn--iconed btn-sm" type="button"><span class="btn__icon material-icons">close</span></button></div>
  </div>
  <div class="task__content card-body d-flex align-items-center">
    <!--task description-->
    <div class="task__descr">
      <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et</p>
    </div>
  </div>
</div>

我想通过transform: scaleY(0) 隐藏.task__content 部分并在.task 悬停时显示它,但由于某些原因,边框之间仍然存在一个奇怪的垂直空白空间。我在这里做错了什么? 如果.task__content 通过变换比例隐藏,为什么会留下空白空间?

A live codepen example is here

【问题讨论】:

    标签: html css twitter-bootstrap bootstrap-4 css-transforms


    【解决方案1】:

    根据您对边框部分的解释,它来自 .card{ border: 1px solid rgba(0,0,0,.125);} 类,您可以覆盖它 .card{ border: none !important}... 而对于高度,这是因为内联样式 d-flex 将其删除,您可以使用 @987654325 对其进行操作@ 和悬停时height:100%

    【讨论】:

    • 我想知道为什么我的转换属性不能按预期工作,而不仅仅是隐藏边框。此外,如果使用 height 属性,将会出现我不想要的动画问题 =((
    • 你想要做什么类似于引导程序中的折叠,只是悬停而不是点击,你可以检查 Ex。由 bootstrap Doc collapse bootstrap 给出,这可能会让您对您正在尝试做的事情有更好的了解
    【解决方案2】:

    好的,问题是transform: scaleY(0) 不会影响(与任何其他变换比例一样)元素的父大小,并且不会影响页面上的 html 元素流。这就是为什么即使我通过缩放隐藏元素,也会有额外的空白空间。

    所以要实现我想要创建的效果,我需要应用这样的代码:

     @keyframes transformScale {
      0% {
        transform: scaleY(0);
    
        opacity: 0;
        visibility: hidden;
      }
      100% {
        transform: scaleY(1);
    
        opacity: 1;
        visibility: visible;
      }
    }
    
    .task {
      border: none;
    }
    
    .task__content {
      display: none;
    
      transform: scaleY(0);
      transform-origin: top center;
    
      border: 1px solid rgba(0, 0, 0, 0.125);
    
      opacity: 0;
      visibility: hidden;
    }
    
    .task:hover .task__content {
      display: flex;
    
      animation: transformScale 0.2s linear 0.2s forwards 1;
    }
    

    更改display 可以减少隐藏.task__content 时的空白区域,使用transformkeyframesanimation 我仍然可以在悬停时应用平滑的显示效果。

    【讨论】:

      【解决方案3】:

      .task__content {
        transition: transform 0.2s linear 0s;
      
        transform: scaleY(0);
        transform-origin: top center;
      }
      
      .task:hover .task__content {
        transform: scaleY(1);
      }
      .card-body{
        padding: 0 1.25rem !important;
      }
      <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet"/>
      <div class="task card" data-is-complete="incomplete">
        <div class="task__toolbar card-header d-flex align-items-center py-2">
          <!--task checklist-->
          <form class="task__form mr-3">
            <div class="task__form-block form-check"><input class="task__checkbox" type="checkbox" /></div>
          </form>
          <!--task title-->
          <div class="task__title">
            <p>Test Title</p>
          </div>
          <!--task btn bar-->
          <div class="task__btn-bar d-flex ml-auto">
            <!--expand button (optional - appears only if there is a task description)--><button class="task__descr-expand btn btn--iconed btn-sm" type="button"><span class="btn__icon--lg material-icons">expand</span></button>
            <!--edit task btn--><button class="task__edit btn btn--iconed btn-sm" type="button"><span class="btn__icon material-icons">edit</span></button>
            <!--delete task btn--><button class="task__del btn btn--iconed btn-sm" type="button"><span class="btn__icon material-icons">close</span></button></div>
        </div>
        <div class="task__content card-body d-flex align-items-center">
          <!--task description-->
          <div class="task__descr">
            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et</p>
          </div>
        </div>
      </div>

      bootstrap cardcard-body边补边

      .card-body{ padding: 1.25rem; }
      

      仅左右变化

      .card-body{ padding: 0 1.25rem; }
      

      【讨论】:

      • @Natalia Davydova 请检查sn-p。
      猜你喜欢
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 2016-05-13
      相关资源
      最近更新 更多