css之实现下拉框自上而下展开动画效果&&自下而上收起动画效果

转载地址:https://my.oschina.net/u/4369742/blog/3484647

HTML代码:

<div
        className={CX('font-size-selector-sub-list', {
          show: shouldSubListShow === true,
          hidden: shouldSubListShow === false,
        })}
      >
        {
          subListItems.map((item, index) => {
            return (
              <div
                role="button"
                tabIndex={0}
                key={item}
                className="font-size-selector-sub-items"
                onClick={() => { handleClickSubItem(index) }}
              >
                <div className="font-size-selector-span">{item}</div>
              </div>
            )
          })
        }
      </div>

CSS代码:

@keyframes slide-down{
    0%{transform:scale(1,0);}
    100%{transform:scale(1,1);}
  }

  @-webkit-keyframes slide-down{
    0%{-webkit-transform:scale(1,0);}
    100%{-webkit-transform:scale(1,1);}
  }

  .font-size-selector-sub-list {
    position: absolute;
    top: 21px;
    left: 0;
    width: 100%;
    box-sizing: border-box;
    z-index: 1;
    box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);
    background-color: #ffffff;
    border-radius: 2px;
    cursor: pointer;

    .font-size-selector-sub-items {
      padding: 0 6px;
      height: 19px;
      box-sizing: border-box;
      background-color: #ffffff;
      background-repeat: no-repeat;
      display: flex;
      justify-content: space-between;
      align-items: center;

      &:hover {
        background-color: #d3edfb;
      }
    }
  }

  .show {
    max-height: 114px;
    transition: max-height .3s ease-in;
    transform-origin: 50% 0;
    animation: slide-down 0.3s ease-in;
    -webkit-animation: slide-down 0.3s ease-in;
  }

  .hidden {
    max-height: 0px;
    overflow: auto;
    transition: max-height .3s ease-out;
  }

注意点:

1,自上而下展开效果:transition与animation结合使用。如上:.show

2,自下而上收起效果:transition单独使用。如上:.hidden

首先想到的是在收起和展开两个终点位置改变 max-height,然后均加上transition,但是这样做只能实现下拉框父元素收起和展开,内部子元素高度变不了,所以想到加上overflow:auto/hidden,但是这样又只能对收起起作用,展开无作用,原因是,展开时子元素内容高度小于等于父元素展开时设置的max-height,所以针对展开,需要使用transform:scale();属性,这样可以在展开时,让子元素内容慢慢缩放至父元素的高度。需要注意的是,缩放时要设置 transform-origin: 50% 0;分别表示x,y开始缩放位置。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
实现带有过渡效果下拉框,你可以使用JavaScript和CSS来完成。下面是一种常见的实现方法: HTML结构: ```html <div class="dropdown"> <button class="dropdown-toggle" onclick="toggleDropdown()">下拉框</button> <ul class="dropdown-menu"> <li>选项1</li> <li>选项2</li> <li>选项3</li> </ul> </div> ``` CSS样式: ```css .dropdown { position: relative; display: inline-block; } .dropdown-toggle { background-color: #f1f1f1; border: none; color: black; padding: 10px; cursor: pointer; } .dropdown-menu { position: absolute; top: -100%; left: 0; background-color: #f1f1f1; list-style: none; padding: 0; margin: 0; opacity: 0; transition: opacity 0.3s ease-in-out, top 0.3s ease-in-out; } .dropdown-menu.visible { opacity: 1; top: 100%; } ``` JavaScript代码: ```javascript function toggleDropdown() { var dropdownMenu = document.querySelector('.dropdown-menu'); dropdownMenu.classList.toggle('visible'); } ``` 上面的代码实现了一个带有过渡效果下拉框。当点击下拉框按钮时,通过JavaScript的`toggleDropdown`函数切换下拉菜单的显示和隐藏状态,并使用`classList.toggle`来添加或移除`.visible`类。 在CSS中,`.dropdown`类定义了下拉框的容器样式,`.dropdown-toggle`类定义了下拉框按钮的样式,`.dropdown-menu`类定义了下拉菜单的样式。通过设置初始状态为`top: -100%`和`opacity: 0`,再通过`.visible`类来改变菜单的位置和透明度,从而实现过渡效果。 通过这种方式,你可以实现一个带有过渡效果下拉框。你可以根据需要进一步自定义样式和过渡动画。记得在HTML中给对应的元素设置相应的类名,并使用上述代码来控制它。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值