RShiny中侧边栏和主面板的固定位置

时间:2019-05-31 09:07:56

标签: r shiny

我想在我的RShiny应用程序中有一个固定宽度的侧边栏,该边栏在调整窗口大小时保持不变。

我设法获得了固定宽度的侧边栏,但是侧边栏和主面板之间仍然有白色间距。似乎应该对此有一个简单的解决方案,但是我的搜索到目前为止是徒劳的。

这是一个基于“旧忠实间歇泉数据”模板的最小示例。我添加了使侧面板保持固定宽度的标签。

#lang racket

(define ht (make-weak-hasheq))
(define next 0)

(define (get-id x)
  (define id (hash-ref ht x #f))
  (or id
      (begin0
        next
        (hash-set! ht x next)
        (set! next (+ next 1)))))

(get-id 'a)
(get-id 'b)
(get-id 'a)

正常输出看起来不错。

Default

拖动窗口时,侧栏会变得很宽,从主面板上占用了宝贵的屏幕空间。

SpacingSidebar

固定侧栏面板的宽度时,在扩展窗口时它会保持形状,但主面板无法利用整个区域。期望的反应是侧栏面板保持尺寸不变,而主面板可以利用所有可用空间。

StretchedSidebar

有人对如何解决这个问题有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

这样可以吗?:

library(shiny)

ui <- fluidPage(
  tags$head(
    tags$style(type="text/css", "select { max-width: 240px; }"),
    tags$style(type="text/css", ".span4 { max-width: 290px; }"),
    tags$style(type="text/css", ".well { max-width: 280px; }")
  ),

  titlePanel("Old Faithful Geyser Data"),
  div(
    style = "display:flex; align-items:flex-start",
    wellPanel( # sidebar
      sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30),
      textInput("text", "Enter text:")
    ),
    div( # main panel
      style = "flex-grow:1; resize:horizontal; overflow: hidden",
      plotOutput("distPlot")
    )
  )
)

server <- function(input, output) {
  output$distPlot <- renderPlot({
    x    <- faithful[, 2] 
    bins <- seq(min(x), max(x), length.out = input$bins + 1)
    hist(x, breaks = bins, col = 'darkgray', border = 'white')
  })
}

shinyApp(ui = ui, server = server)