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

bslib嵌套card组件全屏设置能否仅展示内部卡片?

解决bslib嵌套Card仅内部卡片全屏的问题

可以实现仅让内部卡片进入全屏状态,问题根源是点击内部卡片全屏按钮时,事件会向上冒泡到外层卡片,导致外层被误触发全屏逻辑。通过添加自定义JavaScript阻止事件冒泡即可解决。

修改后的代码

library(shiny)
library(bslib)

ui = page(
  card(
    full_screen = FALSE,
    card_header("Main card"),
    card(
      id = "inner-card",  # 为内部卡片设置唯一ID
      full_screen = TRUE,
      card_header("Plot card"),
      plotOutput("plot"),
      # 阻止全屏按钮的事件冒泡
      tags$script(HTML("
        document.querySelector('#inner-card .btn-full-screen').addEventListener('click', function(e) {
          e.stopPropagation();
        });
      "))
    )
  )
)

server = function(input, output) {
  output$plot = renderPlot(hist(rnorm(100)))
}

shinyApp(ui, server)

代码说明

  • 给内部卡片添加唯一IDinner-card,方便JavaScript精准定位元素
  • 通过document.querySelector选中内部卡片的全屏按钮(bslib默认给全屏按钮加了.btn-full-screen类)
  • 给按钮添加点击事件监听,调用e.stopPropagation()阻止事件向上传递,这样外层卡片不会响应这次点击,只有内部卡片进入全屏状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:32:24