【问题标题】:Shiny Dashboadpage lock dashboardHeader on top闪亮的仪表板页面锁定仪表板顶部的标题
【发布时间】:2018-01-24 04:33:45
【问题描述】:

我使用 R Shiny Dashboardpage 来构建我的交互式仪表板。我想锁定dashboardHeader和sidebarMenu,以便在滚动时,标题和侧边栏保持在同一位置。

对于 sidebarMenu,这可以在 CSS 中完成:

.skin-blue .main-sidebar {
  position: fixed; 
  overflow: visible;
}

但是,当您对 dashboardHeader 尝试相同的技巧时,它会失败。它将下拉菜单(通知图标)放在左侧,而不是右上角。

如何在不更改 Shiny 应用程序设计的情况下修复标题?

最小的工作示例:

app.R:

## app.R ##
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "Basic dashboard",
    dropdownMenu(type = "messages",
      messageItem(
        from = "Sales Dept",
        message = "Sales are steady this month."
      )
    )
  ),
  dashboardSidebar(
    sidebarMenu(
      menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
      menuItem("Widgets", tabName = "widgets", icon = icon("th"))
    )
  ),
  dashboardBody(
    ## Add some CSS shit to change colors, width, etc.
    tags$head(
      tags$link(rel = "stylesheet", type = "text/css", href = "custom.css")
    ),
    fluidRow(
      box(plotOutput("plot1", height = 2500))
    )
  )
)

server <- function(input, output) {
  histdata <- rnorm(500)

  output$plot1 <- renderPlot({
    data <- histdata[1:50]
    hist(data)
  })
}

shinyApp(ui, server)

www/custom.css:

/* logo */
.skin-blue .main-header .logo {
  position: fixed; 
  overflow: visible;
}

/* navbar (rest of the header) */
.skin-blue .main-header .navbar {
  position: fixed; 
  overflow: visible;
}        

/* main sidebar */
.skin-blue .main-sidebar {
  position: fixed; 
  overflow: visible;
}

【问题讨论】:

    标签: css r shiny


    【解决方案1】:

    AdminLte(shinydashboard 使用的框架)有一个固定的布局(参见here),您可以通过在您的 UI 中的某处放置这一行来在您的应用中激活它:

    tags$script(HTML("$('body').addClass('fixed');"))
    

    (以dashboardBody 为例)

    注意:这会将固定布局应用到标题和侧边栏。

    【讨论】:

    • 完美运行!非常感谢!
    • 如何将其与包装器的固定宽度相结合?我希望我的仪表板的最大宽度为 2000 像素。因此,在我的 CSS 中,我包含了 .wrapper {width: 2000px;left: auto;margin-right: auto;}。在高分辨率显示器上,这会导致左侧边栏位于包装器之外的绝对左侧。挣扎了几个小时来解决这个问题......有什么建议吗?
    • 不要认为这是可能的......有一个“盒装布局”(adminlte.io/themes/AdminLTE/pages/layout/boxed.html)但它不适用于“固定布局”,你必须选择。尽管如此,你可以在 body 上设置一个最大宽度(但侧边栏仍然在左侧):tags$style(HTML(".content {max-width: 1200px; margin: auto;}"))
    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 2015-04-22
    • 2018-02-24
    • 1970-01-01
    • 2023-03-13
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多