自定义shiny的selectInput中的下拉宽度

从这个问题中采用的下面的代码可以防止包装文本的下拉,并设置所有下拉列表的宽度。

有没有办法为每个selectInput自定义下拉列表的宽度?

 library(shiny) ui <- (fluidPage( sidebarLayout( sidebarPanel( selectInput("userInput","Select User", c(1,2,3), selected=1), selectInput("LongInput", "Long Strings", c("This is a long long string that is long.", "This is a long long string that is longer.")) ), # allows for long texts to not be wrapped, and sets width of drop-down tags$head( tags$style(HTML(' .selectize-input { white-space: nowrap; } .selectize-dropdown { width: 660px !important; }' ) ) ) ) )) server <- function(input, output, session) {} shinyApp(ui, server) 

如果我理解你的权利,你需要类似的东西

  library(shiny) ui <- (fluidPage( sidebarLayout( sidebarPanel( selectInput("userInput","Select User", c(1,2,3), selected=1), selectInput("LongInput", "Long Strings", c("This is a long long string that is long.", "This is a long long string that is longer.")) ), # allows for long texts to not be wrapped, and sets width of drop-down tags$head( tags$style(HTML(' .selectize-input { white-space: nowrap; } #LongInput + div>.selectize-dropdown{ width: 660px !important; } #userInput + div>.selectize-dropdown{ width: 300px !important; } ' ) ) ) ) )) server <- function(input, output, session) {} shinyApp(ui, server) 

它为LongInput设置了660px,为LongInput设置了300px

更新

你也可以做dunamic,例如你有输入名称和大小的df

 df1=data.frame(name=c("LongInput","userInput"),px=c(600,300)) 

所以试试吧

 library(shiny) ui <- (fluidPage( sidebarLayout( sidebarPanel( selectInput("userInput","Select User", c(1,2,3), selected=1), selectInput("LongInput", "Long Strings", c("This is a long long string that is long.", "This is a long long string that is longer.")) ), uiOutput("din_css") ) )) server <- function(input, output, session) { df1=data.frame(name=c("LongInput","userInput"),px=c(600,300)) output$din_css=renderUI({ tags$head( tags$style(HTML(paste0(' .selectize-input { white-space: nowrap; }', paste(apply(df1,1,function(i){ paste0("#",i[["name"]],"+ div>.selectize-dropdown{ width: ",i[["px"]],"px !important; }") }) ,collapse='/n') ) ) ) ) }) } shinyApp(ui, server)