组件-菜单


菜单组件是一个用于展示导航菜单的组件。它可以水平或垂直显示,支持多级子菜单。

水平-菜单

  • Preview
  • Code
菜单1
菜单2
菜单3







<div hx-ext="bny-menu">
    <div class="item">
        <div class="trigger">
            <span>菜单1</span>
        </div>
    </div>
    <div class="item">
        <div class="trigger">
            <span>菜单2</span>
        </div>
    </div>
    <div class="item">
        <div class="trigger">
            <span>菜单3</span>
            <i class="bny-icon icon-right"></i>
        </div>
        <div class="sub-menu">
            <div class="item">
                <div class="trigger">
                    <span>子菜单1</span>
                </div>
            </div>
            <div class="item">
                <div class="trigger">
                    <span>子菜单2</span>
                    <i class="bny-icon icon-right"></i>
                </div>
                <div class="sub-menu">
                    <div class="item">
                        <div class="trigger">
                            <span>子子菜单1</span>
                        </div>
                    </div>
                    <div class="item">
                        <div class="trigger">
                            <span>子子菜单2</span>
                        </div>
                    </div>
                </div>
            </div>
            <div class="item">
                <div class="trigger">
                    <span>子菜单3</span>
                </div>
            </div>
        </div>
    </div>
</div>
                

菜单-htmx

  • Preview
  • Code
  • Json




<div hx-ext="bny-menu" hx-get="/test/data/menu.json" hx-trigger="load"
    hx-headers='{"Accept": "application/json"}'>
</div>
                
{
    "data": [
        {
            "id": 1,
            "name": "菜单1",
            "attr": {
                "other": "other",
                "data-name": "菜单1-1"
            }
        },
        {
            "id": 2,
            "name": "菜单2"
        },
        {
            "id": 3,
            "name": "菜单3",
            "child": [
                {
                    "id": 4,
                    "name": "菜单3-1"
                },
                {
                    "id": 5,
                    "name": "菜单3-2"
                }
            ]
        }
    ]
}
                

垂直-菜单

  • Preview
  • Code
菜单1
菜单2
菜单3
<div style="width: 220px;">
    <div hx-ext="bny-menu" mode="vertical">
        <div class="item">
            <div class="trigger">
                <span>菜单1</span>
            </div>
        </div>
        <div class="item">
            <div class="trigger">
                <span>菜单2</span>
            </div>
        </div>
        <div class="item">
            <div class="trigger">
                <span>菜单3</span>
                <i class="bny-icon icon-right"></i>
            </div>
            <div class="sub-menu">
                <div class="item">
                    <div class="trigger">
                        <span>子菜单1</span>
                    </div>
                </div>
                <div class="item">
                    <div class="trigger">
                        <span>子菜单2</span>
                        <i class="bny-icon icon-right"></i>
                    </div>
                    <div class="sub-menu">
                        <div class="item">
                            <div class="trigger">
                                <span>子子菜单1</span>
                            </div>
                        </div>
                        <div class="item">
                            <div class="trigger">
                                <span>子子菜单2</span>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="item">
                    <div class="trigger">
                        <span>子菜单3</span>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
                

菜单颜色

  • Preview
  • Code
菜单1
菜单2
菜单3

菜单1
菜单2
菜单3

菜单1
菜单2
菜单3

菜单1
菜单2
菜单3

菜单1
菜单2
菜单3
<div hx-ext="bny-menu" color="white">...</div>
<div hx-ext="bny-menu" color="green">...</div>
<div hx-ext="bny-menu" color="red">...</div>
<div hx-ext="bny-menu" color="yellow">...</div>
<div hx-ext="bny-menu" color="blue">...</div>
                

键盘导航

  • Preview
  • Code
Tab 聚焦到菜单项后:
  • 水平菜单:←/→ 切换顶级,↓ 进入子菜单,Enter 切换/激活
  • 垂直菜单:↑/↓ 切换同级,→ 进入子菜单,← 回到父级
  • Enter / Space:模拟点击
  • Escape:折叠当前展开的子菜单并回到父级
// 键盘交互无需额外属性,菜单项自动获得 tabindex=0
<div hx-ext="bny-menu">
    <div class="item">
        <div class="trigger">菜单项(Tab 聚焦后用方向键导航)</div>
    </div>
</div>
            

API

标签属性

属性 默认值 必须 描述 版本
hx-ext bny-menu 标签扩展名
model 菜单模型:'vertical'