You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用bslib预设shiny主题时,如何优化禁用SelectizeInput的可读性?

问题:bslib预设主题下禁用SelectizeInput可读性差的解决方法

我正在开发Shiny应用,使用bslib包的bs_theme(preset = "shiny")预设主题,但禁用SelectizeInput后输入框变得难以辨认,相关代码如下:

library(shiny)
library(bslib)

ui <- page_fluid(
  shinyjs::useShinyjs(),
  theme = bs_theme(preset = "shiny"),
  selectizeInput("id1", "selection unreadable", choices = 1:3, multiple = T)  
)
server <- function(input, output, session) {
  observeEvent(input$id1, ignoreInit =T, {
    shinyjs::disable('id1')
  })
  
}
shinyApp(ui, server)

禁用后效果:
禁用后难以辨认的SelectizeInput

我希望继续使用该预设主题,但让禁用的输入框保持默认主题那样的高可读性,默认主题示例代码如下:

ui <- fluidPage(
  shinyjs::useShinyjs(),
  selectInput("id1", "selection readable", choices = 1:3, multiple = T)
)
server <- function(input, output, session) {
  observeEvent(input$id1, ignoreInit =T, {
    shinyjs::disable('id1')
  })
}
shinyApp(ui, server)

默认主题禁用后效果:
默认主题下禁用后可读的输入框


解决方案

通过自定义CSS覆盖bslib预设主题中禁用状态下SelectizeInput的样式,即可在保留shiny预设主题的同时提升禁用输入框的可读性,具体实现代码如下:

library(shiny)
library(bslib)

ui <- page_fluid(
  shinyjs::useShinyjs(),
  # 自定义CSS样式
  tags$style(HTML("
    /* 禁用状态的SelectizeInput容器样式 */
    .selectize-input.disabled {
      background-color: #e9ecef !important;
      color: #495057 !important;
      border-color: #ced4da !important;
      opacity: 1 !important;
    }
    /* 禁用状态下已选选项的文字颜色 */
    .selectize-input.disabled .item {
      color: #495057 !important;
    }
  ")),
  theme = bs_theme(preset = "shiny"),
  selectizeInput("id1", "selection now readable", choices = 1:3, multiple = T)  
)
server <- function(input, output, session) {
  observeEvent(input$id1, ignoreInit =T, {
    shinyjs::disable('id1')
  })
  
}
shinyApp(ui, server)

样式说明

  • 将背景色设为默认主题禁用状态的浅灰色#e9ecef,避免过暗
  • 文字颜色调整为#495057,保证清晰可读
  • 边框颜色修正为#ced4da,和默认主题保持一致
  • 强制opacity:1,解决预设主题中禁用输入框过度透明的问题

内容的提问来源于stack exchange,提问作者Ben Nutzer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:07:13