前端如何实现高度的自动过渡

本文介绍了如何利用HTML、CSS和JavaScript在鼠标悬停时改变`<div>`元素的高度,通过控制`height`属性和`transition`效果,避免了页面闪烁,展示了浏览器渲染机制的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要是利用了浏览器的渲染机制。

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport"
      content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
      .content {
        background: blue;
        width: 200px;
        overflow: hidden;
        height: 0;
      }

    </style>
  </head>
  <body>
    <span class="btn">
      测试
    </span>

    <div class="content">
      <p>111111111111</p>
      <p>222222222222</p>
      <p>222222222222</p>
      <p>222222222222</p>
      <p>222222222222</p>
      <p>222222222222</p>
      <p>222222222222</p>
      <p>222222222222</p>
      <p>222222222222</p>
    </div>
    <script>
      const btn = document.querySelector('.btn');
      const content = document.querySelector('.content')
      btn.onmouseenter = function () {
        content.style.height = 'auto';
        const {height} = content.getBoundingClientRect();
        console.log(height);
        //有回流,但是没有绘制,所以不会闪一下,界面看不出变化,但是拿到了高度
        content.style.height = 0;
        //不加content.offsetHeight,默认是直接渲染height + 'px',不会出现从0->height的动画
        content.style.transition = 'height 0.5s';
        //读取几何属性会造成强制回流,从而触发渲染
        content.offsetHeight;
        content.style.height = height + 'px';
      }
      btn.onmouseleave = function () {
        content.style.height = 0;
      }
    </script>
  </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值