css中width:auto的transition过渡

遇到个问题,利用css的transition过渡做折叠时,height为auto导致过渡不生效!

这里我们用scrollHeight去获取并设置div的高度去解决问题,首先我们先来看一下scrollHeight属性

scrollHeight

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<style>
  #deom {
    overflow: hidden;
    height: auto;
    background: darkgoldenrod;
    transition: height 0.5s;
    padding: 3px;
    margin: 4px;
  }
</style>

<body>
  <button onclick="getScrollHeight()">过渡</button>
  <div id="deom">
    <ul>
      <li>ssssss</li>
      <li>ssssss</li>
      <li>ssssss</li>
      <li>ssssss</li>
      <li>ssssss</li>
      <li>ssssss</li>
    </ul>
  </div>
</body>
<script>
  function getScrollHeight() {
    let div = document.getElementById("deom");
    let height = div.scrollHeight;
    console.log(height, typeof (height));
  }
</script>

</html>

看下控制台的输出:

输出的是162,而且是数字类型,但是我们在控制台来看下div的整体高度;

高度只有156px,但是输出的scrollHeight为162,这里 可以看出scrollHeight = height + padding;

解决方案:

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<style>
  #deom {
    overflow: hidden;
    height: 0;
    background: darkgoldenrod;
    transition: height 0.5s;
    /* padding: 3px;
    margin: 4px; */
  }
</style>

<body>
  <button onclick="getScrollHeight()">过渡</button>
  <div id="deom">
    <ul>
      <li>ssssss</li>
      <li>ssssss</li>
      <li>ssssss</li>
      <li>ssssss</li>
      <li>ssssss</li>
      <li>ssssss</li>
    </ul>
  </div>
</body>
<script>
  function getScrollHeight() {
    let div = document.getElementById("deom");
    let height = div.scrollHeight.toString() + "px";
    if (div.style.height === height) {
      div.style.height = 0;
    } else {
      div.style.height = height;
    }
  }
</script>

</html>

其实就相当于我们用scrollHeight的高度代替了auto的自适应内容的高度,如果是在Vue项目中写,可以在mouted(挂在完成前)去获取scrollHeight并设置div高度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值