suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Verwenden Sie bslib, um das CSS von DT::datatable in Shiny-Anwendungen anzupassen

Ich versuche, benutzerdefinierte CSS-Stile auf ein DT::datatable in einer glänzenden App anzuwenden. Wenn der Benutzer eine Zeile in der Tabelle auswählt, möchte ich, dass die ausgewählte Zeile gelben, schwarzen Text anstelle des standardmäßigen blauen, weißen Texts enthält. Ich kann das nicht erfolgreich machen, wenn ich auch das bslib-Paket verwende.

(Eine ähnliche Frage wurde hier gestellt, ich kann sie aber nicht beantworten, wie ich weiter unten beschreibe).

Ohne bslib kann ich das CSS so erfolgreich anwenden:

library(shiny)

ui <- fluidPage(
  tags$head(
    tags$style(
      HTML("table.dataTable tbody tr.selected td {
             color: black !important;
             box-shadow: inset 0 0 0 9999px yellow !important;}"
      )
    )
  ),
  DT::dataTableOutput("test_table")
)

server <- function(input, output, session) {

  output$test_table <- DT::renderDataTable({
    DT::datatable(iris, selection = 'single')
  })
}

shinyApp(ui, server = server)

CSS für den Erfolg

Ich habe jedoch festgestellt, dass ich mit dem bslib-Theme das CSS nicht mit derselben Methode anwenden konnte.

Ich habe diese beiden Ressourcen gesehen, die auf die Verwendung der bslib::bs_add_rules-Funktion zur Lösung dieses Problems hinweisen:

Auf dieser Grundlage habe ich die folgenden Varianten ausprobiert, aber es scheint, dass sie nicht funktionieren:

library(shiny)

ui <- bslib::page_fluid(
  theme = bslib::bs_add_rules(
      bslib::bs_theme(),
      sass::as_sass("table.dataTable tbody tr.selected td {
             color: black !important;
             box-shadow: inset 0 0 0 9999px yellow !important;}"
      )),
  DT::dataTableOutput("test_table")
)

server <- function(input, output, session) {

  output$test_table <- DT::renderDataTable({
      DT::datatable(iris, selection = 'single')
  })
}

shinyApp(ui, server = server)

Fehlerhaftes CSS

P粉081360775P粉081360775240 Tage vor413

Antworte allen(1)Ich werde antworten

  • P粉722409996

    P粉7224099962024-03-30 10:11:35

    问题出在对象标签上。如果您检查 HTML 代码,您会发现当您使用 sass::as_sass 时,它应该是 .table.dataTable tbody tr.active td ,而不是 table。 dataTable tbody tr.selected td

    library(shiny)
    
    ui <- bslib::page_fluid(
      theme = bslib::bs_add_rules(
        bslib::bs_theme(),
        sass::as_sass("table.dataTable tbody tr.active td {
                 color: black !important;
                 box-shadow: inset 0 0 0 9999px yellow !important;}"
        )),
      DT::dataTableOutput("test_table")
    )
    
    server <- function(input, output, session) {
      
      output$test_table <- DT::renderDataTable({
        DT::datatable(iris, selection = 'single')
      })
    }
    
    shinyApp(ui, server = server)

    Antwort
    0
  • StornierenAntwort