CSS不定高元素transition动画的解决方案

类别: 技术·CSS

时间:2019-07-27 23:41:35

字数:3297

版权所有,未经允许,请勿转载,谢谢合作~

### 前言

CSS中transition可以方便的实现我们的过渡动画效果,但并不是元素的所有属性都可以过渡,那有哪些元素支持动画呢,这里有个列表:

所有支持transition的属性

这么多属性估计记不住,可以理解成,过渡是只能由元素的值A逐渐变成值B,如果A与B不是一个确切的具体数字,也就无从得知“运动轨迹”,动画则无效。

比如我们不能让A图片过渡变成B图片,因为A图片与B图片一般不是简单的数字变换。

虽然height支持transition,但如果由height: 0;变成height: auto;还是无效的,因为css引擎无法得知auto是多少。

不过我们还是有一些简单的方案可以解决这个问题的。

###场景1 max-height与scaleY展开收起

我们有个二级导航,在点击某一级导航时,需展开其下的二级导航,但我们在纯css中无从得到二级导航的个数,但高度不定,一般transition不会生效。

场景1解决方案:使用max-height。 如果能确定最大高度,则直接设置该值;如果不能,确定一个合适的值(什么叫合适值呢?就是较大又不会过大,视业务而定,如果设一个过大的max-height,会因为运行轨迹问题显有卡顿严重),然后允许有滚动条(如果在移动端的全屏下,滚动条不像pc端这么怪异)

关键代码:

html

```html

  • blog
    • blog 1
    • blog 2
    • blog 3
  • movie
    • movie 1
    • movie 2
    • movie 3

```

css:

```css

.sub-nav-list {

max-height: 0;

overflow: auto;

transition: max-height 1s ease-out;

}

.show-sub-nav-list .sub-nav-list {

max-height: 150px;

}

```

场景1解决方案2:使用scaleY进行缩放,只适用于一个一级导航的情况,否则下面会出现空白。

关键代码:

```css

.sub-nav-list-2 {

transition: transform 0.4s ease-out;

transform: scaleY(0);

transform-origin: top;

}

.show-sub-nav-list .sub-nav-list-2 {

transform: scaleY(1);

}

```

参考demo: 不定高的导航展开动画demo

###场景2,移动端全屏不定高导航下拉动画

这应该是一种比较常见的场景,因为全屏,可以使用fixed或absolute,高度可以由0%变成100%,再结合场景1的导航列表,比较简单,唯一需要主要的是,该块设置top,需要设置一个一样高度bottom避免下面少了一块,因为这种场景height: 100%情况下增加top会使得其下移。

主要代码:

html

```html

fixed的头部

点击展开收起第二个导航
  • blog (点击展开下一级)
    • blog 1
    • blog 2
    • blog 3
  • movie
    • movie 1
    • movie 2

这是页面内容

```

CSS:

```css

.header {

position: fixed;

top: 0;

left: 0;

width: 100%;

height: 40px;

line-height: 40px;

text-align: center;

background-color: #00d586;

z-index: 5;

}

.nav-wrap {

position: fixed;

top: 0;

right: 0;

bottom: 0;

left: 0;

width: 100%;

height: 0;

top: 40px;

transition: height 0.4s ease-out;

background-color: #fff;

}

.nav-guide {

position: absolute;

top: 0;

width: 100%;

height: 40px;

line-height: 40px;

text-align: center;

border-bottom: 1px solid #ccc;

}

.nav-list-wrap {

position: absolute;

top: 40px;

bottom: 40px;

left: 0;

width: 100%;

overflow-y: auto;

}

.show-nav-list {

height: 100%;

}

```

demo(请使用移动端打开): 移动端全屏不定高导航下拉动画demo

###提问

##### 为什么我们的非绝对定位元素height不能由0%至100%呢?

规范中写到,如果包含块的高度没有显式指定(如父元素高度为默认值auto),并且该元素不是绝对定位,则计算值为auto,auto则transition不会生效。

全部留言

我要留言

内容:

网名:

邮箱:

个人网站:

发表

html div 子元素 过多 卡顿,CSS不定高元素transition动画的解决方案相关推荐

  1. html div 子元素 过多 卡顿,CSS浏览器兼容

    如何解决浏览器兼容问题 各浏览器CSS hack兼容表: IE6IE7IE8FirefoxOperaSafari !importantYYYYY _Y *YY *+Y \9YYY \0Y nth-of ...

  2. 使用vue和高德地图,仿58地图找房pc端,且解决marker过多卡顿

    使用vue和高德地图,仿58地图找房pc端,且解决marker过多卡顿 1.在index.html引入高德地图链接 https://webapi.amap.com/maps?v=1.4.15& ...

  3. x5内核在android 4.4卡顿,css,javascript_安卓手机X5内核浏览器下动画超级卡的解决办法?,css,javascript,html5 - phpStudy...

    安卓手机X5内核浏览器下动画超级卡的解决办法? 碰到一个问题,我写了一个H5页面,里面有的动画在ios手机上运行十分流畅,一点都不卡,唯独在部分安卓手机下打开十分卡,卡顿到怀疑人生,我进行了一些优化, ...

  4. c#winform控件过多卡顿问题解决方案

    近期在项目中遇到了登录以及切换界面时,界面不停闪烁的问题,经过查阅发现以下方法可以成功解决该问题. 将下面代码添加到窗体代码中即可: protected override CreateParams C ...

  5. 百度地图-图标过多卡顿解决方案

    点聚合 <script type="text/javascript" src="//api.map.baidu.com/api?v=3.0&ak=xxxx& ...

  6. Qt解决UI界面一次性加载数据过多卡顿的问题

    关于Qt如何解决UI界面一次性加载太多数据而卡顿的问题 思路分析: ​ 以QTableWidget电子词典为例,每次模糊查询单词时都会产生几十种,几千甚至上万种不同的结果: ​ 例如我们输入a,对a进 ...

  7. 伪元素写竖线_[CSS] 用伪元素:after实现分割线和气泡

    学习前端网页开发并将其应用于工作中已经两个月了,发现前端包括的内容真的是无比丰富,知识量巨大--漫漫长路远,尚需艰苦努力.作为一只前端开发的菜鸟,写不了特别深刻的关于前端技术性文章,只是想将工作中遇到 ...

  8. android打开cad卡顿,两万高配置电脑使用CAD非常卡顿怎么办

    本帖最后由 18332919183 于 2020-4-21 17:55 编辑 两万块钱买的笔记本,使用CAD任何版本都卡顿,百度方法调设置关闭动态输入关闭区域框选指示等等各种方法,都试了还是不行,任然 ...

  9. 从零开始的踩坑生活(3):有关cherry mx8.0 机械键盘和Ubuntu系统的不兼容(输入延迟卡顿cpu占用高)

    2021/03/05更新: 好像挺多人有一样的问题欸. 放一个链接,如果急得话可以下载,不急的话私信发邮箱,我看到就会回复. 项目场景: 最近被这个Ubuntu折腾的够呛.这里放上来一个很鬼畜的问题 ...

最新文章

  1. Spring Boot 动态数据源(多数据源自己主动切换)
  2. MongoDB的NUMA CPU架构问题
  3. Qt 2D绘图之二:抗锯齿渲染和坐标系统
  4. 用java模仿钉钉_java接入钉钉机器人(附源码)
  5. PM你真的很忙吗?如何进行时间管理
  6. GridView的操作大全
  7. SAP云平台里的日志系统概述
  8. labview自动生成html,使用LabVIEW实现网页数据提取及交互.pptx
  9. Kotlin学习笔记23 协程part3 lambda表达式深入 挂起函数 全局协程
  10. AjaxControlToolkit工具控件之Accordion错误解决方法
  11. 2009无线通信五大趋势 3G范围将覆盖全球
  12. 高并发 多线程批量ping工具 nbping简介和使用
  13. Maxwell安装与配置
  14. 雨滴桌面显示html,如何用雨滴桌面设置美观的桌面天气插件
  15. 电脑图片不显示,电脑不显示图片怎么办
  16. 黑客攻击入侵服务器的6种常见方式
  17. 代写品牌故事-品牌故事的结构
  18. eval函数python原理_Python 中 eval 函数的神奇用法
  19. Latex——本地编辑器TeXstudio
  20. YY客网络广播 内测进行中!

热门文章

  1. 腾讯面试:一条SQL语句执行得很慢的原因有哪些?
  2. OpenStack网络的下一步原来这么走 | 技术头条
  3. 云重磅 | 没有硬件,苹果发布多款“云服务”;阿里云发布基于公共云的虚拟GPU服务;中国移动首发5G套餐...
  4. 表格长度_知道你的成绩单是怎么打印的吗?超长Excel表格1页打印,拯救A4纸
  5. python在办公上的应用_python自动化办公:玩转word之样式秘笈
  6. 分布式任务调度平台一站式讲解
  7. docker nginx:1.21.4
  8. make[1]: *** [objs/Makefile:445: objs/src/core/ngx_murmurhash.o] Error
  9. MVC与MVVM的区别
  10. util中注入service