如何阻止bslib修改Shiny应用中DT表格的格式样式?
解决bslib下DT表格自定义样式失效的问题
bslib的默认CSS规则优先级高于DT的行内自定义样式,导致原本的样式被覆盖,以下是几种可行的解决方式:
方法1:给自定义样式添加!important强制覆盖
在formatStyle的样式值后追加!important,提升自定义样式的优先级:
library(shiny) library(dplyr) library(DT) library(bslib) ui <- bslib::page_sidebar( DT::DTOutput("tab1") ) server <- function(input, output) { output$tab1 <- DT::renderDT({ mtcars %>% head() %>% DT::datatable() %>% DT::formatStyle( columns = "mpg", target = "row", color = DT::styleEqual(c(21), "white !important"), backgroundColor = DT::styleEqual(c(21), "#4d4d4d !important"), ) }) } shinyApp(ui = ui, server = server)
方法2:禁用bslib对DT的样式注入
创建bslib主题时指定disable = c("DT"),阻止bslib加载针对DT的额外样式:
library(shiny) library(dplyr) library(DT) library(bslib) ui <- bslib::page_sidebar( theme = bs_theme(disable = c("DT")), DT::DTOutput("tab1") ) server <- function(input, output) { output$tab1 <- DT::renderDT({ mtcars %>% head() %>% DT::datatable() %>% DT::formatStyle( columns = "mpg", target = "row", color = DT::styleEqual(c(21), "white"), backgroundColor = DT::styleEqual(c(21), "#4d4d4d"), ) }) } shinyApp(ui = ui, server = server)
方法3:通过自定义CSS绑定类名
在UI中插入更具体的CSS规则,给目标行绑定自定义类名实现样式控制:
library(shiny) library(dplyr) library(DT) library(bslib) ui <- bslib::page_sidebar( tags$style(HTML(" #tab1 table.dataTable tbody tr.highlight-row { color: white !important; background-color: #4d4d4d !important; } ")), DT::DTOutput("tab1") ) server <- function(input, output) { output$tab1 <- DT::renderDT({ mtcars %>% head() %>% DT::datatable() %>% DT::formatStyle( columns = "mpg", target = "row", className = styleEqual(c(21), "highlight-row") ) }) } shinyApp(ui = ui, server = server)
内容的提问来源于stack exchange,提问作者rpmeira
相关产品推荐
相关产品推荐

