项目中的下拉菜单项越来越多,最近又加了分组,长长的一条非常难看,能不能把它改成横向布局呢。项目是用的antd,研究了下antd的下拉菜单是用ul,li实现的,通过css的flex布局和grid布局很容易实现横向布局,当然也可以只用grid布局实现,grid对于一维二维都可以胜任,更加强大。
项目原来的样子:

改成横向布局的样子:

下面通过一个简化的例子演示一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <div style="display:block;min-width:98px;position: absolute;"> <ul class="menu"> <li class="group"> <div>菜单1</div> <ul class="group-list"> <li class="item">item1</li> <li class="item">item2</li> <li class="item">item3</li> <li class="item">item4</li> <li class="item">item5</li> <li class="item">item6</li> <li class="item">item6</li> <li class="item">item8</li> <li class="item">item9</li> <li class="item">item10</li> <li class="item">item11</li> <li class="item">item12</li> </ul> </li> <li class="group"> <div>菜单2</div> <ul class="group-list"> <li class="item">item1</li> <li class="item">item2</li> </ul> </li> <li class="group"> <div>菜单3</div> <ul class="group-list"> <li class="item">item1</li> <li class="item">item2</li> </ul> </li> <li class="group"> <div>菜单4</div> <ul class="group-list"> <li class="item">item1</li> <li class="item">item2</li> </ul> </li> </ul> </div>
|
默认效果是这样的,两级菜单,第一级分组,第二级菜单项。

增加如下样式,首先让第一级横向排列,用到了flex布局,方向是row,不换行。然后第二级为了实现最多8行,用到了grid布局,行数固定为8,先按列排,多于8行时列自动扩展。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| ul,li { list-style: none; padding: 0; margin: 0; } .menu { display: flex; flex-direction: row; flex-wrap: nowrap; } .group { flex: auto; } .group-list { display: grid; grid-template-columns: repeat(auto-fill, auto); grid-template-rows: repeat(8,auto); grid-auto-flow: column; } .item { margin: 0 8px; }
|
最终效果如下:
