使用bslib时如何覆盖DT表格行选中状态的默认颜色
问题原因解析
两种方案失效的原因如下:
- 通过
bs_add_variables配置table_active_bg不生效:DT表格的选中行样式是DataTables库自带的独立CSS规则,使用专属的.selected类控制,和Bootstrap原生的表格active状态变量没有关联,修改该变量无法作用到DT的选中样式上。 - 注释掉的
tags$style方案逻辑本身正确,但存在两个问题:一是代码中这段样式被注释未启用,二是直接在UI中插入tags$style可能存在CSS加载顺序问题,DT的默认样式加载晚于自定义样式,即便加了!important也可能被覆盖。
解决方法
使用bslib提供的bs_add_rules()方法将自定义样式注入到主题配置中,可保证样式优先级足够覆盖DT的默认规则,修改后的完整代码如下:
library(shiny) library(DT) library(bslib) color_sel <- "#7cfc00" ui <- fluidPage( theme = bslib::bs_theme(version = 4, bootswatch = "flatly", primary = '#00488E', secondary = '#4AB9FA', success = "#4AB9FA", info = "#4AB9FA" ) %>% bs_add_variables( "body-bg" = "#EEEEEE", "font-family-base" = "monospace" ) %>% # 注入DT选中行自定义样式 bs_add_rules(paste0(" table.dataTable tbody tr.selected td, table.dataTable td.selected { background-color: ", color_sel," !important; } ")), fluidRow(dataTableOutput("tbl")) ) server <- function(input, output){ output$tbl <- renderDataTable({ datatable(mtcars) }) } app <- shinyApp(ui = ui, server= server) runApp(app)
内容的提问来源于stack exchange,提问作者Andi
相关产品推荐
相关产品推荐

