0%

antd下拉菜单横向布局

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

项目原来的样子:

image.png

改成横向布局的样子:

image.png

下面通过一个简化的例子演示一下:

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>

默认效果是这样的,两级菜单,第一级分组,第二级菜单项。

image.png

增加如下样式,首先让第一级横向排列,用到了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;
}

最终效果如下:

image.png

-------------本文结束感谢您的阅读-------------