css实现折叠展开动画

d79fb76e6b47a2c7e1f09a0e5fd77729.png

css实现折叠展开动画

2d7710bc8557ef5dfb2b81f31ffec636.gif

在 CSS 中实现折叠展开动画需要使用一些布局和过渡属性。

<div class="accordion">
  <div class="accordion-title">Hover me!</div>
  <div class="accordion-body">
    <div>
      <p>Lorem ipsum ...</p>
    </div>
  </div>
</div>

如果将鼠标悬停在元素上,出现一个下拉菜单。但是如果我们想让它看起来有一个很好的平滑过渡怎么办?

.accordion-body {
  height: 0;
  transition: 500ms height ease;
}


.accordion:hover .accordion-body {
  height: auto;
}

不幸的是,这不起作用:从height: 0过度到height: auto没有动画效果。

如何解决这个问题?

那么,第一个解决方案可能是将height属性设置为固定数字,而不是auto。

但这不是一个很好的方法:为了计算这个固定数字,我们必须求助于JavaScript,以便计算我们的.accordion-body实际高度。

但是我们希望只使用CSS来实现这个效果,既然height不行,我们为什么不直接使用max-height呢?

.accordion-body {
  max-height: 0;
  transition: 500ms max-height ease;
}


.accordion:hover .accordion-body {
  max-height: 200px;
}

由于我们设置了一个固定值max-height,浏览器现在能够正常执行过度动画了。

唯一的问题是,由于我们设置了一个固定值max-height,但是内容可能会溢出。

如果您确定您的内容永远不会达到特定高度,那么使用此方法就完全没问题!只需为元素指定一个适当的值max-height就可以了。

但请注意,max-height的值越高,过渡就越奇怪(可以尝试将max-height: 1000px看看情况如何变化!)。

我们还有其他更好方案吗?可以避免任何固定值height/max-height吗?

我们实际上可以使用一个巧妙的技巧,使用CSS网格布局。

.accordion-body {
  display: grid; 
  grid-template-rows: 0fr;
  transition: 250ms grid-template-rows ease;
}


.accordion:hover .accordion-body {
  grid-template-rows: 1fr;
}


.accordion-body > div {
  overflow: hidden;
}

我们真正要做的就是grid-template-rows将其从0fr过渡到1fr:这样,我们的网格项将从 0 过渡到其“自然”高度。就这么简单。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSS中,实现点击按钮折叠展开效果可以通过利用CSS的选择器和伪类,结合使用CSS动画和过渡效果来实现。 首先,我们需要一个具有点击功能的按钮,在HTML中可以用`<button>`标签或者自定义的`<div>`元素来实现。这个按钮可以用来触发展开折叠内容的动作。 然后,我们可以利用CSS的选择器选中要展开折叠的内容。可以是一个段落(`<p>`标签),一个列表(`<ul>`或`<ol>`标签),或者一个容器元素(`<div>`标签)。 接下来,我们可以使用CSS的伪类选择器,比如`:hover`,`:focus`或者`:target`来设置按钮被点击时要执行的动作。比如,当按钮被点击时,我们可以通过`display`属性将内容的显示模式设置为`block`或者`none`来实现展开折叠的效果。 我们还可以通过CSS动画和过渡效果来实现平滑的展开折叠效果。可以使用`transition`属性来设置内容的过渡效果(比如渐变,移动等),使用`animation`属性来设置动画效果(比如旋转,缩放等)。 最后,我们可以通过CSS的媒体查询来实现响应式设计。根据不同的屏幕大小或设备类型,我们可以设置不同的展开折叠效果,以适应不同的屏幕尺寸和设备。 综上所述,通过选择器、伪类、动画、过渡效果和媒体查询等CSS属性和功能的灵活组合,我们可以实现点击按钮折叠展开的效果,增强网页的交互性和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值