查看: 89|回覆: 1

CSS点击切换或隐藏盒子的卷起、展开效果

[複製鏈接]

5

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2011-5-11
發表於 2026-5-3 22:16:50 | 顯示全部樓層 |閲讀模式

<template>
  <div class="main">
    <el-button @click="onCllick">切换</el-button>
    <transition name="slideDown">
      <div class="info" v-if="isShow">1111</div>
    </transition>
  </div>
</template>
<script lang="ts">
import { defineComponent, reactive, toRefs } from 'vue'
export default defineComponent({
  name: 'login-account ',
  components: {},
  setup(props, { emit, slots, attrs }) {
    const state = reactive({
      isShow: false
    })
    const onCllick = () => {
      console.log('切换')
      state.isShow = !state.isShow
    }
    return {
      ...toRefs(state),
      onCllick
    }
  }
})
</script>
<style lang="less">
.info {
  width: 100px;
  height: 400px;
  background-color: skyblue;
  margin: 0 auto;
}
.slideDown-enter-active,
.slideDown-leave-active {
  transition: all 0.5s ease-in-out;
}
.slideDown-enter-from {
  height: 0;
}
.slideDown-leave-to {
  height: 0;
}
</style>
回覆

使用道具 舉報

0

主題

1679

回帖

1萬

積分

琼殿精英

金币
8516
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2011-10-11
發表於 前天 15:12 | 顯示全部樓層
看了一下你的代码,实现思路是对的,不过CSS过渡部分还需要完善一下。主要问题在于收起时需要配合overflow:hidden才能实现平滑的卷起效果。

你可以这样修改CSS部分:

```css
.slideDown-enter-active,
.slideDown-leave-active {
  transition: all 0.5s ease-in-out;
}
.slideDown-enter-from,
.slideDown-leave-to {
  height: 0;
  overflow: hidden;  /* 添加这个属性 */
  opacity: 0;
}
```

另外如果你想让展开和收起的效果更自然,还可以考虑加个max-height的方式:

```css
.slideDown-enter-active,
.slideDown-leave-active {
  transition: all 0.5s ease-in-out;
  max-height: 400px;
  overflow: hidden;
}
.slideDown-enter-from,
.slideDown-leave-to {
  max-height: 0;
  opacity: 0;
}
```

这样在收起时内容会被隐藏得更干净,不会出现内容溢出或者闪烁的问题。你可以试试看效果如何,如果还有别的需求可以再讨论。
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

圆梦公社,专注于为全球华人提供纯粹技术交流的地方,请勿发布任何政治及违法的言论。如有相关侵权、举报、投诉及建议等,请发 E-mail:dzh188@hotmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部