You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于UiShadCn与ReactJS的下拉菜单滚动及最大高度设置问题

解决UI ShadCN下拉菜单内容超出屏幕的滚动问题

要实现下拉菜单的最大高度限制和内容滚动,只需对现有代码做两处关键调整:

  1. 将通知列表部分包裹在独立容器中,单独设置滚动样式,避免顶部标题和分隔线随内容滚动
  2. 为该容器添加最大高度与垂直滚动属性

修改后的完整代码如下:

<DropdownMenu>
  <DropdownMenuTrigger className="relative h-[43px] flex items-center justify-center scale-110">
    <Bell className="mr-2 h-4 w-4" />
    <span
      className="absolute top-0 right-0 mt-1 mr-1 text-[12px] bg-red-500 text-white w-4 h-4 rounded-full flex items-center justify-center"
    >
      {notificationsData ? notificationsData.length : 0}
    </span>
  </DropdownMenuTrigger>
  <DropdownMenuContent className="w-56">
    <DropdownMenuLabel>Notificações</DropdownMenuLabel>
    <DropdownMenuSeparator />

    {/* 新增滚动容器,限制最大高度并开启垂直滚动 */}
    <div className="max-h-[400px] overflow-y-auto pr-2">
      {notificationsData && notificationsData.length > 0 ? (
        notificationsData.map((item, index) => (
          <DropdownMenuGroup key={index}>
            <DropdownMenuSub>
              <DropdownMenuSubTrigger className="flex items-center">
                {item.medicineDaysSupplied <= 5 ? (
                  <XCircle className='mr-2 h-4 w-4 text-red-600' />
                ) : (
                  <AlertTriangle className='mr-2 h-4 w-4 text-yellow-500' />
                )}
                <div>
                  {item.medicineNameAlert}
                  <h5 className='text-[12px]'>{item.guestNameAlert}</h5>
                </div>
              </DropdownMenuSubTrigger>
              <DropdownMenuPortal>
                <DropdownMenuSubContent>
                  <DropdownMenuItem>
                    <PersonStanding className="mr-2 h-4 w-4" />
                    <span>Ir para o hóspede</span>
                  </DropdownMenuItem>
                </DropdownMenuSubContent>
              </DropdownMenuPortal>
              <DropdownMenuSeparator />
            </DropdownMenuSub>
          </DropdownMenuGroup>
        ))
      ) : (
        <DropdownMenuItem disabled>
          <span>Não há nada por aqui</span>
        </DropdownMenuItem>
      )}
    </div>
  </DropdownMenuContent>
</DropdownMenu>

细节说明

  • max-h-[400px]:可根据界面布局需求调整最大高度值
  • overflow-y-auto:内容高度超过限制时自动显示垂直滚动条
  • pr-2:给容器右侧添加内边距,避免滚动条与内容紧贴,提升视觉体验

如果希望整个下拉菜单(包括标题)都能滚动,也可以直接给DropdownMenuContent添加样式:

<DropdownMenuContent className="w-56 max-h-[450px] overflow-y-auto">
  {/* 原有内容 */}
</DropdownMenuContent>

但这种方式会让标题随内容滚动,通常推荐第一种保留固定标题的方案。

内容的提问来源于stack exchange,提问作者joaovitorkc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:15:30