我正在尝试根据用户的selectInputs生成序列。现在的问题是序列的布局是垂直的。我的问题是如何水平或内联对齐。我试图将uiOutput设置为inline = TRUE,但它没有按预期工作。先前在闪亮的谷歌小组中使用代码(https://groups.google.com/forum/#!searchin/shiny-discuss/inline $ 20uioutput%7Csort:date / shiny-discuss / WD9jh_mHArM / _bYFR_MVBgAJ)提出了类似的问题,并且在我的案例中使用了稍微不同的用户界面作为添加/删除字母
library(shiny)
sequence <- letters[1:20]
ui <- fluidPage(
h2("Sequence Length:"),
fluidRow(column(width=10, numericInput("seqlen", label=NULL, value=10))),
h2("Sequence:"),
fluidRow(column(width=10, uiOutput("selects")))
)
server <- function(input, output){
output$selects <- renderUI({
len <- as.integer(input$seqlen)
lapply(1:len, function(i) {
selectInput(inputId = paste0("letter", i),
label = NULL,
choices = sequence,
width="15%")
})
})
}
runApp(list(ui=ui, server=server))
答案 0 :(得分:3)
我建议在CSS中使用display: inline-block
来内联div。由于您无法真正自定义外部selectInput
div,因此可以将其包装在新的div中,如
library(shiny)
sequence <- letters[1:20]
ui <- fluidPage(
h2("Sequence Length:"),
fluidRow(column(width=10, numericInput("seqlen", label=NULL, value=10))),
h2("Sequence:"),
fluidRow(column(width=10, uiOutput("selects")))
)
server <- function(input, output){
output$selects <- renderUI({
len <- as.integer(input$seqlen)
lapply(1:len, function(i) {
div(
selectInput(
inputId = paste0("letter", i),
label = NULL,
choices = sequence
),
style = "display: inline-block;"
)
})
})
}
runApp(list(ui=ui, server=server))
样式表可能比这里的内联CSS更好,特别是如果你想自定义其他属性,如margin,width等。
答案 1 :(得分:2)
这是一个可能的解决方案,我们只需将selectInput
元素包装在列中:
library(shiny)
sequence <- letters[1:20]
ui <- fluidPage(
h2("Sequence Length:"),
fluidRow(column(width=10, numericInput("seqlen", label=NULL, value=10))),
h2("Sequence:"),
fluidRow(column(width=10, uiOutput("selects")))
)
server <- function(input, output){
output$selects <- renderUI({
len <- as.integer(input$seqlen)
lapply(1:len, function(i) {
column(width=2,
selectInput(inputId = paste0("letter", i),
label = NULL,
choices = sequence))
})
})
}
runApp(list(ui=ui, server=server))
希望这有帮助!