动画高度属性::HTML+CSS+JavaScript
Animating height property :: HTML + CSS + JavaScript
我最近在尝试一些东西时注意到了这个"问题"。
假设我想创建一个下拉菜单或手风琴。
这是我的HTML:
<div class="wrapper" onclick="toggle()">
I want to be animated!
<div class="content">
Was I revealed in a timely fashion?
</div>
</div>
样式表:
.wrapper {
background: red;
color: white;
height: auto;
padding: 12px;
transition: 2s height;
}
.content {
display: none;
}
.content.visible {
display: block;
}
JavaScript:
function toggle () {
var content = document.getElementsByClassName('content')[0];
var test = content.classList.contains('visible');
test ? content.classList.remove('visible') :
content.classList.add('visible');
}
当我们切换内容的状态时,我试图实现一个漂亮、平滑的动画。显然,这是行不通的。有人可以向我解释为什么它不起作用以及如何修复它吗?非常感谢。
链接到JSFiddle。
首先,一些CSS属性不能转换,display
就是其中之一,另外只有离散值可以转换,所以height: auto
也不能。
在您的情况下,问题在于height: auto
,尽管有一些技巧可以做到这一点,但如果您只是显示和隐藏内容,为什么不添加并使用jQuery的切换呢?
$(".content").toggle("slow");
jsFiddle
--EDIT(不带jQuery)--
因为auto
给我们带来了问题,我们可以使用javascript将auto
替换为像素值,然后正常使用css转换,如果您的内容没有滚动,我们可以很容易地从scrollHeight
属性中获取该值:
function toggle () {
var content = document.getElementsByClassName('content')[0];
var test = content.classList.contains('visible');
console.log(test);
if (test) {
content.classList.remove('visible')
content.style.height = "0px";
} else {
content.classList.add('visible');
content.style.height = content.scrollHeight + "px";
}
}
Css
.wrapper {
background: red;
color: white;
height: auto;
padding: 12px;
transition: 2s height;
}
.content {
height: 0px;
display: block;
transition: 2s height;
overflow: hidden;
} /* totally removed .content.visible */
jsFiddle
相关文章:
- 窗口大小html css
- 如何通过HTML+CSS中的另一个元素Selector更改元素的属性值
- 有没有一种方法可以仅使用HTML/CSS来隐藏基于特定值的数据单元格
- HTML/CSS-用于拖放的全页面覆盖
- 在向下滚动JS/HTML/CSS wordpress网站时替换徽标图像
- 限制对HTML/CSS/IMG或根索引文件夹的访问
- (html/css/javascript)试图使导航栏中的“当前页面”链接变成不同的颜色
- 将Rails后端添加到JS/HTML/CSS应用程序时,正确的文件位置是什么
- 将回车键映射到HTML/CSS/JS中的按钮
- 如何使用HTML/CSS/JavaScript开发桌面应用程序
- 如何在HTML CSS JavaScript中根据纵横比调整高度或宽度
- 如何在android中使用HTML/CSS赋予文本渐变颜色
- HTML/CSS/JS切换不同的谷歌日历是同一个框架
- HTML/CSS/JS 构建工具
- HTML/CSS 如何关闭菜单,然后使用 class=“active”
- 如何在HTML / CSS中填充垂直和滚动中间窗格(Chrome可以工作,但不能Firefox)
- 可以使用 HTML/CSS 创建静态照明效果叠加
- 如何在HTML/CSS/JS中为表/列表应用行虚拟化
- JS HTML CSS Accordion
- 这段代码有什么问题(responsible html-css-js)