如何在R Shiny中设置单个selectInput菜单的样式?

时间:2017-05-24 13:00:35

标签: css r select shiny styles

您可以将css样式应用于单个selectInput菜单吗?

我在其他文章中找到了处理样式selectInput菜单的代码,但结果影响了应用程序中的所有内容。我想操纵单个菜单。 我也在考虑根据服务器中发生的条件向个别元素添加样式,但那是另一个单独的问题。

测试应用代码:

library(shiny)
library(shinydashboard)
library(shinyjs)
ui  <- 
  fluidPage(
  hr("how do we get the change the style elements of a single select input?) 
tags$style(type='text/css',  .selectize-input  { font-size: 8px; line-height: 8px;} 
             .selectize-dropdown { font-size: 8px; line-height: 8px; }"),

    selectInput("choice", "choices", c("A", "B", "C")),

    selectInput("choice2", "choices", c("D", "E", "F"))
     )

server < - function(input, output, session) {   }
})
shinyApp(ui = ui, server = server)

这种方法直接来自Dean Attali的答案:examp,并且类似的问题被问为最终评论,但没有答案,所以我决定就此问题发表一个问题,因为我有同样的问题。

对于像textInput字段这样的其他元素,我通常这样做的方式是:

tags$style(type='text/css', "#NAMEELEMENT {background-color: green; height: 40px; border-color: #bfbfbf; width: 520px; position: relative;left: 3%}"), 

您可以通过#及其inputId将标记$ style附加到元素。

干杯。

3 个答案:

答案 0 :(得分:7)

将您的selectInput包装在div中:

tags$div(id='my_div',
         class='my_class',
         selectInput("choice",
                     "choices",
                      c("A", "B", "C"))),

然后你可以设置它的样式而不影响其他selectInput元素:

#my_div .selectize-dropdown-content > .option {
   background-color: grey;
}

.my_class .selectize-dropdown-content > .option {
   background-color: grey;
}

与CSS一样,使用id命名并捕获单个元素,使用class设置多个元素的样式。

答案 1 :(得分:3)

我自己找到了答案。确定,谷歌和Stackoverflow等大量时间的组合与我发现由Dean Atali创建的一些信息我相信,但这似乎做到了:

  tags$head(tags$style(HTML('.selectize-input {white-space: nowrap}
    #choice+ div>.selectize-dropdown{width: 660px !important}
    #choices+ div>.selectize-dropdown{width: 300px !important}')))

答案 2 :(得分:1)

感谢您,非常有用!

我用一个可行的例子总结了您的答案:

library(shiny)

ui <- fluidPage(
  tags$head(tags$style(HTML('
    .selectize-input {white-space: nowrap}
    #input1+ div>.selectize-dropdown{width: 660px !important; font-style: italic; font-weight: bold; color: green;}
    #input1+ div>.selectize-input{width: 660px !important; font-style: italic; font-weight: bold; color: green; margin-bottom: -10px;}
    #input2+ div>.selectize-dropdown{width: 300px !important; color: red;}
    #input2+ div>.selectize-input{width: 300px !important; color: red; margin-bottom: 0px;}
                            '))),

  selectizeInput("input1", "label1", c("A", "B", "C")),
  selectizeInput("input2", "label2", c("D", "E", "F"))
)

server <- function(input, output, session){}
shinyApp(ui = ui, server = server)