我试着用bslib设计我shiny 的应用程序页面,想让侧边栏类似于Bootstrap examples中的样子,但不知道如何使用bslibshiny中实现类似的效果.

Question: 如何创建这样的 bootstrap 侧边栏,有没有像sidebar()这样的直接函数.在实现 bootstrap 工具条后,如何在主面板中点击打开不同的页面.

R脚本示例:

library(bslib)
library(shiny)
library(ggplot2)
  
ui <- page_sidebar(
  title = "Example dashboard",
  sidebar = sidebar(
    varSelectInput("var", "Select variable", mtcars)
  ),
  card(
    full_screen = TRUE,
    card_header("My plot"),
    plotOutput("p")
  )
)
  
server <- function(input, output) {
  output$p <- renderPlot({
    ggplot(mtcars) + geom_histogram(aes(!!input$var))
  })
}

shinyApp(ui, server)

除了这些变量 Select 输入之外,还可以有一种方法将它们替换为可导航页面,如Bootstrap示例所示.

推荐答案

你需要使用Bootstrap's navigation components(也就是navs).

在文档的帮助下,您可以看到所需的标记,并且该功能开箱即用,无需额外的JavaScript:

library(shiny)
library(ggplot2)
library(bslib)

ui <- page_sidebar(
  title = "Example dashboard",
  sidebar = sidebar(
    div(
      class = "nav flex-column nav-pills",
      id = "mynav-tab",
      role = "tablist",
      `aria-orientation` = "vertical",
      lapply(LETTERS[1:3], 
             \(x) tags$a(class = paste0("nav-link", ifelse(x == "A", " active", "")),
                         id = paste0(x, "-tab"),
                         `data-toggle` = "pill",
                         href = paste0("#", x, "-tab-content"),
                         role = "tab",
                         `aria-controls` = paste0(x, "-tab-content"),
                         `aria-selected` = x == "A",
                         x)
      )
    )
  ),
  div(
    class = "tab-content",
    id = "mynav-tab-content",
    lapply(LETTERS[1:3],
           \(x) div(class = paste0("tab-pane fade", ifelse(x == "A", " show active", "")),
                    id = paste0(x, "-tab-content"),
                    role = "tabpanel",
                    `aria-labelledby` = paste0(x, "-tab"),
                    card(full_Screen = T,
                         card_header(x))
           )
    )
  )
)

server <- function(input, output) {
}

shinyApp(ui, server)

Gif showing a navbar design and a click to the elements in it change the content in the main panel

Html相关问答推荐

删除第一个列表项上的左边框

图像不在HTML文件中显示

如何使用html的<;输入>;处理/绑定Angular 信号?

为什么根捕获上的`min-height`溢出,而`height`没有?

旧文本淡出,但新文本不会淡入,而是突然出现

如何在css中在span中绘制圆弧?

CSS 伪类 Select 器未按预期工作

从触发元素移动到有间隙的内容时 CSS 工具提示关闭

并排放置两个 div,同时 div2 环绕 div1

在 flexbox 中使用 spacer 是否有效

对齐列表项内的文本,使其不在元素装饰下

子元素放在文本样式之后,样式会 destruct

如何使容器的大小适合其 position:absolute; 子元素的大小

不完整的悬停

绝对类在另一个绝对类之上

CSS 网格跨度行到所有行

每次按下按钮时减小字体大小的 jquery 函数

flex-box 中的图像在 Chrome 和 Firefox 中看起来不同 - 如何使它们在 Firefox 中看起来像?

HTML 标记未在页面上展开

如何向上移动图像并溢出图像的一部分而另一部分不溢出