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

如何实现Shiny中折叠Box时同步缩减宽度并分配空间?

实现Shiny Dashboard可折叠Box的宽度自适应效果

默认的collapsible = TRUE只会让Box折叠高度,要实现折叠时同时缩减宽度并让其他Box占据释放的空间,可以利用Shiny对Box折叠状态的监听,动态调整Box宽度:

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    column(width = 12,
           uiOutput("dynamic_boxes")
    )
  )
)

server <- function(input, output) {
  output$dynamic_boxes <- renderUI({
    # 获取box2的折叠状态,初始为未折叠(FALSE)
    box2_collapsed <- input$box2_collapsed %||% FALSE
    
    # 根据折叠状态设置两个box的宽度
    box1_width <- if(box2_collapsed) 12 else 9
    box2_width <- if(box2_collapsed) 0 else 3
    
    tagList(
      box(width = box1_width, "box 1"),
      box(width = box2_width, "box 2", collapsible = TRUE, id = "box2")
    )
  })
}

shinyApp(ui, server)

关键说明:

  • 给可折叠Box设置id = "box2",Shiny会自动生成input$box2_collapsed输入项,实时反馈Box的折叠状态(折叠时为TRUE,展开时为FALSE)
  • 通过renderUI动态渲染两个Box,根据折叠状态调整宽度:折叠时box2宽度设为0,box1占满整行12格;展开时恢复原有的9和3格宽度
  • %||%是Shiny内置函数,用于处理初始状态下input$box2_collapsed为NULL的情况,默认设为未折叠状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:58:26