【问题标题】:Modify CSS from Shiny reactive output [duplicate]从闪亮的反应输出修改 CSS [重复]
【发布时间】:2019-12-16 14:46:41
【问题描述】:

我在 Shiny 中有一个 navbarPage,我在其中初始化了一个使用 css 隐藏的选项卡(我们称之为 tab1)。为此,我使用以下行:

    tags$head(tags$style(HTML("#tabs li a[data-value = 'tab1'] {display: none;}"))),

效果完美。

现在,在服务器中,我想显示该选项卡以响应事件,但我不知道如何从 R 代码“更新/替换”该 css 属性(显示:无)。我看到用 runjs() 可以做到,但我并不是真正的 js/css 专家。

如何在服务器中修改该对象的 css 属性?

【问题讨论】:

  • 在 SO here 上有一个使用 shinyjs 的解决方案。这个问题是重复的还是你想避免使用 shinyjs 并找到一个原生的解决方案?
  • 我尝试过 js 解决方案,但它们都将元素渲染一秒钟,然后将其隐藏(我试图避免)。到目前为止,我发现的唯一可行的解​​决方案是使用 css,因为它可以防止元素从头开始渲染,而不是在服务器被触发之后。我要看看那些,谢谢很多人,但如果你想出 css 方法,那就太好了。
  • 没有人知道如何从服务器执行那个 css 命令?

标签: javascript css shiny


【解决方案1】:

更新

我想我成功了。 我的做法是:一开始就定义两个css样式。 display: none 用于初始 tab2 导航栏 tabsetpanel,display: inline-block !important 用于名为“showtab”的新类。然后我使用shinyjs向导航栏tabsetpanel的tab2添加一个类,它覆盖(!important)tab2的原始css样式。

shinyjs 原始函数的问题是: (1) 当使用hide/show 时,您可以在初始启动时看到不希望它出现的tab2。 (2) 当使用你的 css 样式 display: noneshinyjs::showshinyjqui::jqui_show 时,样式参数会更改为 style = inline,这会弄乱导航栏页面中单词“tab2”的位置。

css <- "
#navbar li a[data-value = tab2] {
display: none;
}
.showtab {
display: inline-block !important;
}
"

# 

library(shiny)
library(shinyjs)

ui <- tagList(

  useShinyjs(),
  inlineCSS(css),

  navbarPage(
    "test navbarPage",
    id = "navbar",
    tabPanel(
      title = "tab1",
      actionButton("show", "Show tab2")
    ),

    tabPanel(
      title = "tab2"
    )
  )
)

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

  observeEvent(input$show, {
    addClass(selector = "#navbar li a[data-value = tab2]",
                   class = 'showtab')
  })
}



shinyApp(ui = ui, server = server)

【讨论】:

  • 它给了我一个错误:警告:显示错误:未使用的参数(选择器 =“#tabs li a[data-value = 'tab1']”)。 Show 是来自 shiny 还是 shinyjs 的函数?
  • 请注意,我将 navbarPage 的 id 从“tabs”更改为“navbar”。这可能是您的选择器无法正常工作的原因。
  • 这条新行 "addClass(selector = "#navbar li a[data-value = tab2]",class= 'showtab')" 有效,但它被渲染成 0px x 0px div,如何我可以改变吗?
  • 您需要提供一些示例代码。在我的最小示例中,它似乎有效。
  • 对不起!!没有看到 css 'showtab' 类。测试了一下,现在可以正常使用了。非常感谢朋友!
猜你喜欢
  • 1970-01-01
  • 2013-12-22
  • 2021-01-03
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 2018-05-02
  • 2020-08-18
相关资源
最近更新 更多