纯Css制作子菜单向下展开和向上收回样式 |transform、盒模型


*因为本站没有还没实现插图上传功能,所以接下来需要想象力……


背景说明:

我司某站点前端重构, 当前处于新老页面并行阶段。 新页面使用的是vue + element-ui。配合样式改版。 原jquery框架的导航栏要跟随改版。其中遇到hover父级菜单时,悬浮展示子菜单。有展开,收起动效。因为现在css 非常强大,所以使用纯css 开发。

设计思路:

1.最初想到的是使用 transition:height .3s 这种方法。使子菜单动态展开收缩。 但是由于每个子菜单height 不固定。动态height 下,该方法失效。

2.后来想到transform: scaleY(0); =》transform: scaleY(1);这个方案。但是效果不是很好。元素是从子菜单的中线开始收缩扩展的。 没有从父级菜单推出来的感觉。

3.现在开始思考如何使中线从顶部开始向下推。这里用到了盒模型。即,为子菜单设定一个父元素。该元素高度为0,超出模型部分不裁剪(默认是这样的。)子元素是从父元素的中部开始展开的,切子元素不会超过父元素顶部,只会从右侧和下部溢出。效果实现


代码参考:

.el-menu-sub {
        margin-top: 5px;
        padding: 5px 0;
        width: 104px;
        height: 0px;
        background-color: none;
        border-radius: 2px;
        z-index: 100;
        border: none;
        transition-duration: .3s;
        transform: scaleY(0);        
    }

        .el-menu-sub ul {
            border-radius: 2px;
            background-color: #fff;
            -webkit-box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
            box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
        }

    .el-menu-item:hover .el-menu-sub {
        transform: scaleY(1);
        transition-duration: .3s;
    }
©小网格工作室 2013-2025