前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Height transition

Height transition

作者头像
公众号@魔术师卡颂
发布2020-08-27 17:10:53
1.1K0
发布2020-08-27 17:10:53
举报
文章被收录于专栏:魔术师卡颂魔术师卡颂

鼠标hover时使一个未知高度元素的高度从0过渡到auto

本实现的思路是:

  • 通过js提前将元素的scrollHeight保存在CSS变量--max-height中。
  • 元素hovermax-height直接使用--max-height保存的值。

html

代码语言:javascript
复制
<div class="trigger">
  恭喜发财
  <div class="el">红包拿来</div>
</div>

css

代码语言:javascript
复制
.el {
  transition: max-height 0.5s;
  overflow: hidden;
  max-height: 0;
}

.trigger:hover > .el {
  max-height: var(--max-height);
}

js

代码语言:javascript
复制
let el = document.querySelector('.el');
let height = el.scrollHeight;
el.style.setProperty('--max-height', height + 'px');

代码详解

-transition:max-height:0.5s使用默认的ease时间函数在0.5秒内过渡max-height的值。

-overflow:hidden防止超出max-height范围内的子元素内容溢出容器。

-max-height:0指定元素初始的最大高度为0

-.target:hover> .el指定当hover父级元素时,使其子节点.elmax-height为CSS变量--max-height的值。

-el.scrollHeight指元素包含滚动部分的高度,它将根据元素的内容动态变化。

-el.style.setProperty(...)设置--max-height CSS变量的值为元素的scrollHeight

以下两点需要注意:

  • 由于改变高度的CSS动画会触发页面重排(reflow),所以当需要改变高度的元素内包含大量元素时,会造成动画效果滞后。
  • CSS变量已经得到大部分主流浏览器的支持,但是IE除外。兼容性如下:
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 魔术师卡颂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • html
  • css
  • js
  • 代码详解
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档