在不使用JavaScript的情况下,通过CSS将宽度从固定大小过渡到"auto"。

17 浏览
0 Comments

在不使用JavaScript的情况下,通过CSS将宽度从固定大小过渡到"auto"。

我遇到了一个问题,即使没有使用脚本,只使用CSS来实现元素的动画过渡。该元素最初设置为固定宽度,并应根据其中的内容在鼠标悬停时展开为自适应宽度。当鼠标移出时,它应该恢复为固定宽度。\n假设我有一个菜单:\n


    
  • 项目
  • 具有较长文本的项目
  • \n最初,它将显示为一个折叠的50像素宽的垂直条,只有图标。当鼠标悬停时,它会显示出图标标签。\n这是一个简化的示例,展示了我想要实现的效果。第一个菜单是需要过渡的菜单,第二个菜单只是用来展示这个内容量所需要的自适应宽度。\n

    问题

    \n这只是在这里起到重要作用的整个CSS的一部分:\n

    menu {
        width: 50px;
    }
    menu:hover {
        width: auto; /* 将其设置为其他固定宽度可以正常工作 */
    }
    

    \n问题是,当您将width设置为auto时,会发生以下两种情况之一:\n

      \n

    • 浏览器从固定宽度0开始动画(Chrome)- 如果我们随后添加min-width,它将执行下一个操作
    • \n

    • 浏览器不执行任何动画,只是应用新的样式
    • \n

    0
    0 Comments

    问题的原因是在CSS中无法直接通过过渡效果将宽度从固定大小过渡到"auto"。解决方法是使用max-width属性以及一些额外的CSS样式来模拟宽度的过渡效果。

    解决方法的具体步骤如下:

    1. 将菜单容器的宽度设置为一个固定的max-width值,通过设置float:left或position:absolute来使菜单容器在收缩状态下达到最小宽度。

    2. 当鼠标悬停在菜单容器上时,将max-width属性设置为一个大于菜单实际宽度的值,从而展开菜单。

    3. 如果有多语言的情况,可以通过为body元素添加不同语言的类名来设置不同的max-width值。

    这种解决方法的好处是可以避免直接过渡宽度,而是通过修改max-width属性来实现过渡效果。max-width属性可以设置一个固定的值,只有当达到这个限制时才会生效,否则保持不可见状态。

    虽然这种解决方法不是完美的,但在目前的CSS中是最好的解决办法之一。如果需要更精确的控制过渡效果,可以使用JavaScript来动态设置宽度,或者等待CSS中对calc()或attr()的更好支持。

    总之,通过使用max-width属性和其他一些CSS样式,可以在不使用JavaScript的情况下实现宽度从固定大小过渡到"auto"的效果。这种解决方法虽然不是完美的,但已经被很多人使用,并且可以满足大部分的需求。

    0