Вы можете написать функцию, которая генерирует код CSS:
CSS <- function(values, colors){
template <- "
.option[data-value=%s], .item[data-value=%s]{
background: %s !important;
color: white !important;
}"
paste0(
apply(cbind(values, colors), 1, function(vc){
sprintf(template, vc[1], vc[1], vc[2])
}),
collapse = "\n"
)
}
Например, CSS(c("a","b","c"), c("red", "green", "blue"))
генерирует
.option[data-value=a], .item[data-value=a]{
background: red !important;
color: white !important;
}
.option[data-value=b], .item[data-value=b]{
background: green !important;
color: white !important;
}
.option[data-value=c], .item[data-value=c]{
background: blue !important;
color: white !important;
}
Затем выполните css <- CSS(c("a","b","c"), c("red", "green", "blue"))
в начале ваше приложение и выполните tags$style(HTML(css))
.
Для многочисленных значений я бы использовал такой код:
library(randomcoloR)
CSS <- function(values){
template <- "
.option[data-value=%s], .item[data-value=%s]{
background: %s !important;
color: %s !important;
}"
colors <- distinctColorPalette(length(values))
paste0(
apply(cbind(values, colors), 1, function(vc){
rgb <- col2rgb(vc[2])
color <-
ifelse(rgb[1]*0.299 + rgb[2]*0.587 + rgb[3]*0.114 > 186, "black", "white")
sprintf(template, vc[1], vc[1], vc[2], color)
}),
collapse = "\n"
)
}
css <- CSS(letters[1:10])
.option[data-value=a], .item[data-value=a]{
background: #DE70C1 !important;
color: white !important;
}
.option[data-value=b], .item[data-value=b]{
background: #AE53E3 !important;
color: white !important;
}
.option[data-value=c], .item[data-value=c]{
background: #8AE450 !important;
color: white !important;
}
.option[data-value=d], .item[data-value=d]{
background: #DD8062 !important;
color: white !important;
}
.option[data-value=e], .item[data-value=e]{
background: #D5D063 !important;
color: black !important;
}
.option[data-value=f], .item[data-value=f]{
background: #D1B6CD !important;
color: black !important;
}
.option[data-value=g], .item[data-value=g]{
background: #8390D3 !important;
color: white !important;
}
.option[data-value=h], .item[data-value=h]{
background: #8BD6DC !important;
color: black !important;
}
.option[data-value=i], .item[data-value=i]{
background: #80DDA0 !important;
color: black !important;
}
.option[data-value=j], .item[data-value=j]{
background: #D2D4AE !important;
color: black !important;
}
Этот код автоматически устанавливает color
в white
, если цвет фона темный, и black
в противном случае.