使用 shinydashboard 进行选项卡自定义
Tab customization with shinydashboard
我已经努力了几个小时来尝试做一个本应非常简单的选项卡自定义。
在附加的 Shiny 应用程序中,我希望选定的选项卡在其左侧、顶部和右侧以蓝色突出显示,而不是像默认情况下那样只在顶部突出显示。为此,我添加了 2 个自定义块(tags$head(...)
在应用程序的开头)。
它只是部分成功,因为某些原因,一行的第一个子选项卡的左侧仅在悬停时突出显示(最顶部的选项卡,以及同一行上的其他选项卡没有此问题).我希望左侧的行为类似于选项卡的右侧,即如果选择了选项卡,则始终突出显示,而不是依赖于悬停。
我一直在寻找“检查元素”有什么问题,但没有带来任何线索。我不知道我应该寻找什么选项(是否有任何地方可以找到所有可能的选项卡格式选项,例如 border-left-width ?),或者什么对象触发了这种烦人的行为。我该怎么做才能纠正这个问题?
我在 R 3.6.0 上有这个问题(我无法更新到 R 4.x.x,因为这个 reprex 中没有使用的包有问题),shinydashboard_0.7.2,shiny_1.7.1, RStudio 1.4.1717.
附加的应用程序(布局很奇怪,原因不是这里的重点,我还删除了一些其他自定义块,这使应用程序更难看,但允许只关注我的选项卡问题):
library(shiny)
library(shinydashboard)
# Code for ui goes below --------------------------------------------------
ui <- dashboardPage(
dashboardHeader(title = "Reprex"),
dashboardSidebar(width = 350,
sidebarMenu(
id = "sidebarMenuID", menuItem("Results", tabName = "graphs", icon = icon("bar-chart"))
)),
dashboardBody(
# Tab Style: have top, left and right borders highlighted
tags$head(
tags$style(
'.nav-tabs-custom .nav-tabs li.active a, .nav-tabs-custom .nav-tabs li.active:hover a {
border-top-color: #3C8DBC;
border-left-color: #3C8DBC;
border-right-color: #3C8DBC;
border-left-width: 5px;
border-right-width: 5px;
}'
)
),
tags$head(
tags$style(
'#site_nav li.active a, #site_nav li.active:hover a {
border-top-color: #3C8DBC;
border-left-color: #3C8DBC;
border-right-color: #3C8DBC;
border-top-width: 5px;
border-left-width: 5px;
border-right-width: 5px;
}'
)
),
tabItems(tabItem(
tabName = "graphs",
tabsetPanel(id = "site_nav", #"site_tabs"
tabPanel("Tab 1",
fluidRow(
tabBox(
width = 12,
height = NULL,
tabPanel("Sub-tab 1",
fluidRow(
tabBox(
width = 12,
height = NULL,
tabPanel("Sub-sub tab 1",
fluidRow(
tabBox(
width = 12,
height = NULL,
tabPanel("Sub-sub-sub tab 1",
fluidRow(box(
title = "Some title",
width = 12
)),
fluidRow(box(
title = "Some title",
width = 12
))),
tabPanel("Sub-sub-sub tab 2",
fluidRow(box(
title = "Some title",
width = 12
)),
fluidRow(box(
title = "Some title",
width = 12
)))
)
)),
tabPanel("Sub-sub tab 2",
fluidRow(
tabBox(
width = 12,
height = NULL,
tabPanel("Sub-sub-sub tab 1",
fluidRow(box(
title = "Some title",
width = 12
)),
fluidRow(box(
title = "Some title",
width = 12
))),
tabPanel("Sub-sub-sub tab 2",
fluidRow(box(
title = "Some title",
width = 12
)),
fluidRow(box(
title = "Some title",
width = 12
)))
)
))
)
)),
tabPanel("Sub-tab 2",
fluidRow(
box(
width = 12,
title = "Some title",
align = "centre",
background = "blue"
)
))
)
)))
))
)
)
####End of ui
# Server Code goes below --------------------------------------------------
server <- function(input, output, session) {
}
shinyApp(ui = ui, server = server)
你快到了。我认为有一个由 shiny 或 Bootstrap 定义的默认 class 将左边框设置为透明。将 css class .nav-tabs-custom .nav-tabs li:first-of-type.active a
添加到您的样式定义中。
我已经复制了下面的 tags$head
语句。我使用 shorthand 属性压缩了一些样式定义。我希望你不介意。 :-)(除非您想进一步自定义外观,否则您可以将这两个语句结合起来。)
希望有用!
tags$head(
tags$style(
"
.nav-tabs-custom .nav-tabs li.active a,
.nav-tabs-custom .nav-tabs li:first-of-type.active a,
.nav-tabs-custom .nav-tabs li.active:hover a {
border-color: #3C8DBC;
border-bottom-color: none;
border-width: 0 5px;
}
",
"
#site_nav li.active a,
#site_nav li.active:hover a {
border-color: #3C8DBC;
border-bottom-color: none;
border-width: 0 5px;
}
"
)
),
我已经努力了几个小时来尝试做一个本应非常简单的选项卡自定义。
在附加的 Shiny 应用程序中,我希望选定的选项卡在其左侧、顶部和右侧以蓝色突出显示,而不是像默认情况下那样只在顶部突出显示。为此,我添加了 2 个自定义块(tags$head(...)
在应用程序的开头)。
它只是部分成功,因为某些原因,一行的第一个子选项卡的左侧仅在悬停时突出显示(最顶部的选项卡,以及同一行上的其他选项卡没有此问题).我希望左侧的行为类似于选项卡的右侧,即如果选择了选项卡,则始终突出显示,而不是依赖于悬停。
我一直在寻找“检查元素”有什么问题,但没有带来任何线索。我不知道我应该寻找什么选项(是否有任何地方可以找到所有可能的选项卡格式选项,例如 border-left-width ?),或者什么对象触发了这种烦人的行为。我该怎么做才能纠正这个问题?
我在 R 3.6.0 上有这个问题(我无法更新到 R 4.x.x,因为这个 reprex 中没有使用的包有问题),shinydashboard_0.7.2,shiny_1.7.1, RStudio 1.4.1717.
附加的应用程序(布局很奇怪,原因不是这里的重点,我还删除了一些其他自定义块,这使应用程序更难看,但允许只关注我的选项卡问题):
library(shiny)
library(shinydashboard)
# Code for ui goes below --------------------------------------------------
ui <- dashboardPage(
dashboardHeader(title = "Reprex"),
dashboardSidebar(width = 350,
sidebarMenu(
id = "sidebarMenuID", menuItem("Results", tabName = "graphs", icon = icon("bar-chart"))
)),
dashboardBody(
# Tab Style: have top, left and right borders highlighted
tags$head(
tags$style(
'.nav-tabs-custom .nav-tabs li.active a, .nav-tabs-custom .nav-tabs li.active:hover a {
border-top-color: #3C8DBC;
border-left-color: #3C8DBC;
border-right-color: #3C8DBC;
border-left-width: 5px;
border-right-width: 5px;
}'
)
),
tags$head(
tags$style(
'#site_nav li.active a, #site_nav li.active:hover a {
border-top-color: #3C8DBC;
border-left-color: #3C8DBC;
border-right-color: #3C8DBC;
border-top-width: 5px;
border-left-width: 5px;
border-right-width: 5px;
}'
)
),
tabItems(tabItem(
tabName = "graphs",
tabsetPanel(id = "site_nav", #"site_tabs"
tabPanel("Tab 1",
fluidRow(
tabBox(
width = 12,
height = NULL,
tabPanel("Sub-tab 1",
fluidRow(
tabBox(
width = 12,
height = NULL,
tabPanel("Sub-sub tab 1",
fluidRow(
tabBox(
width = 12,
height = NULL,
tabPanel("Sub-sub-sub tab 1",
fluidRow(box(
title = "Some title",
width = 12
)),
fluidRow(box(
title = "Some title",
width = 12
))),
tabPanel("Sub-sub-sub tab 2",
fluidRow(box(
title = "Some title",
width = 12
)),
fluidRow(box(
title = "Some title",
width = 12
)))
)
)),
tabPanel("Sub-sub tab 2",
fluidRow(
tabBox(
width = 12,
height = NULL,
tabPanel("Sub-sub-sub tab 1",
fluidRow(box(
title = "Some title",
width = 12
)),
fluidRow(box(
title = "Some title",
width = 12
))),
tabPanel("Sub-sub-sub tab 2",
fluidRow(box(
title = "Some title",
width = 12
)),
fluidRow(box(
title = "Some title",
width = 12
)))
)
))
)
)),
tabPanel("Sub-tab 2",
fluidRow(
box(
width = 12,
title = "Some title",
align = "centre",
background = "blue"
)
))
)
)))
))
)
)
####End of ui
# Server Code goes below --------------------------------------------------
server <- function(input, output, session) {
}
shinyApp(ui = ui, server = server)
你快到了。我认为有一个由 shiny 或 Bootstrap 定义的默认 class 将左边框设置为透明。将 css class .nav-tabs-custom .nav-tabs li:first-of-type.active a
添加到您的样式定义中。
我已经复制了下面的 tags$head
语句。我使用 shorthand 属性压缩了一些样式定义。我希望你不介意。 :-)(除非您想进一步自定义外观,否则您可以将这两个语句结合起来。)
希望有用!
tags$head(
tags$style(
"
.nav-tabs-custom .nav-tabs li.active a,
.nav-tabs-custom .nav-tabs li:first-of-type.active a,
.nav-tabs-custom .nav-tabs li.active:hover a {
border-color: #3C8DBC;
border-bottom-color: none;
border-width: 0 5px;
}
",
"
#site_nav li.active a,
#site_nav li.active:hover a {
border-color: #3C8DBC;
border-bottom-color: none;
border-width: 0 5px;
}
"
)
),