使用 CSS 设置样式时如何引用变量的值?
How to refer to the value of variable when styling using CSS?
上下文
我正在 Shiny 中开发一个可重用的模块,并希望让用户可以更改此模块中 id
的值,因此:我不知道模块有。
我还想使用一些自定义 CSS 来设置这些元素的样式,并希望将 CSS 代码放在单独的文件中(在 www/
文件夹中)。
问题
我预计提到的 id
(命名空间)会出现问题 - 我不确定如何在另一种语言(CSS) 在不同文件中工作时。
我知道可以使用 internal 样式表来引用该值:
library(shiny)
library(glue)
modUI <- function(id) {
ns <- NS(id)
tagList(
tags$head(tags$style(glue("#{id}-color {{background-color: green;}}"))),
actionButton(ns("color"), "I'm green")
)
}
modServer <- function(id) {
moduleServer(
id,
function(input, output, session) {
}
)
}
ui <- fluidPage(
modUI("example")
)
server <- function(input, output, session) {
modServer("example")
}
shinyApp(ui, server)
但是否可以对 外部 样式表做同样的事情?
我想补充一点,我是使用非 R 工具(CSS、Saas)和 R 工具(bslib、fresh)进行样式设计的初学者,所以也许我只是遗漏了一些东西非常基本。我还想补充一点 - 即使我已经提到 CSS - 如果适合在可重用模块中使用,我可以使用不同的东西。
您可以使用 css class 而不是按 id 设置元素样式,这意味着用户输入的 id 无关紧要。
my_module_ui <- function(id) {
ns <- NS(id)
tagList(
tags$head(tags$style(".my_module_button {background-color: green;}")),
actionButton(ns("color"), "I'm green", class = "my_module_button")
)
}
这可以很容易地移植到外部样式表中,其他用户可以覆盖 class 样式。
.my_module_button {
background-color: green;
}
一般来说,在 css 世界中更常见的是使用 classes 而不是 ids 到 select 样式目标,即使样式仅应用于一个单个元素。
只需确保您的 class 名称足够具体以避免 class 名称冲突。我建议您使用模块名称作为与模块对应的 css classes 的前缀。您的模块的样式表将如下所示
.my_module_button {
background-color: green;
}
.my_module_text {
color: teal;
}
.my_module_container {
margin: 0 auto;
}
还有复合 select 的高级技术,但根据我的经验,每个模块有一些命名空间 css classes 通常可以完成工作。
上下文
我正在 Shiny 中开发一个可重用的模块,并希望让用户可以更改此模块中 id
的值,因此:我不知道模块有。
我还想使用一些自定义 CSS 来设置这些元素的样式,并希望将 CSS 代码放在单独的文件中(在 www/
文件夹中)。
问题
我预计提到的 id
(命名空间)会出现问题 - 我不确定如何在另一种语言(CSS) 在不同文件中工作时。
我知道可以使用 internal 样式表来引用该值:
library(shiny)
library(glue)
modUI <- function(id) {
ns <- NS(id)
tagList(
tags$head(tags$style(glue("#{id}-color {{background-color: green;}}"))),
actionButton(ns("color"), "I'm green")
)
}
modServer <- function(id) {
moduleServer(
id,
function(input, output, session) {
}
)
}
ui <- fluidPage(
modUI("example")
)
server <- function(input, output, session) {
modServer("example")
}
shinyApp(ui, server)
但是否可以对 外部 样式表做同样的事情?
我想补充一点,我是使用非 R 工具(CSS、Saas)和 R 工具(bslib、fresh)进行样式设计的初学者,所以也许我只是遗漏了一些东西非常基本。我还想补充一点 - 即使我已经提到 CSS - 如果适合在可重用模块中使用,我可以使用不同的东西。
您可以使用 css class 而不是按 id 设置元素样式,这意味着用户输入的 id 无关紧要。
my_module_ui <- function(id) {
ns <- NS(id)
tagList(
tags$head(tags$style(".my_module_button {background-color: green;}")),
actionButton(ns("color"), "I'm green", class = "my_module_button")
)
}
这可以很容易地移植到外部样式表中,其他用户可以覆盖 class 样式。
.my_module_button {
background-color: green;
}
一般来说,在 css 世界中更常见的是使用 classes 而不是 ids 到 select 样式目标,即使样式仅应用于一个单个元素。
只需确保您的 class 名称足够具体以避免 class 名称冲突。我建议您使用模块名称作为与模块对应的 css classes 的前缀。您的模块的样式表将如下所示
.my_module_button {
background-color: green;
}
.my_module_text {
color: teal;
}
.my_module_container {
margin: 0 auto;
}
还有复合 select 的高级技术,但根据我的经验,每个模块有一些命名空间 css classes 通常可以完成工作。