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

如何在bslib::page_sidebar()的navbar中插入textInput搜索框?

如何在Shiny导航栏中插入搜索框?

你希望将搜索框放置到导航栏的红框标注位置(如下示意图):

目标位置示意图

当前你的代码如下:

library(shiny)   
library(bslib)

page_sidebar(
  tags$head(
    tags$link(rel = "stylesheet", type = "text/css", href = "style.css")
  ),
  title = "Weather",textInput("search","Search"),
  sidebar = sidebar("sidebar",
                    card(" ",actionButton("card_click", card_body("Cities",align = "center"))),
                    card(" ",actionButton("card_click-1", card_body("Maps",align = "center"))),
                    card(" ",actionButton("card_click-2", card_body("About Me",align = "center"))),
                    ),
  
  layout_columns(
    
    card("card1",
         card_body(card("card2",height = "200px"),card("card3",height = "200px"))
         
         ), col_widths = c(8,4),
    layout_columns(card("card4")))
  
)

当前搜索框的显示位置不符合预期,目标位置如下红框标注:

当前效果与目标位置红框标注

实现方法

方案一:自定义page_sidebar的标题区域

通过将标题和搜索框组合进title参数,配合CSS调整布局,把搜索框嵌入导航栏区域:

library(shiny)   
library(bslib)

page_sidebar(
  tags$head(
    tags$style(HTML("
      .navbar-group {
        display: flex;
        align-items: center;
        gap: 2rem;
      }
      .search-input {
        margin-bottom: 0;
        width: 200px;
      }
    "))
  ),
  title = tagList(
    div(class = "navbar-group",
        h1("Weather", style = "margin: 0;"),
        textInput("search","Search", class = "search-input")
    )
  ),
  sidebar = sidebar("sidebar",
                    card(" ",actionButton("card_click", card_body("Cities",align = "center"))),
                    card(" ",actionButton("card_click-1", card_body("Maps",align = "center"))),
                    card(" ",actionButton("card_click-2", card_body("About Me",align = "center"))),
                    ),
  
  layout_columns(
    card("card1",
         card_body(card("card2",height = "200px"),card("card3",height = "200px"))
    ), 
    col_widths = c(8,4),
    layout_columns(card("card4"))
  )
  
)

方案二:改用bs_navbar构建导航栏

如果需要更贴合Bootstrap原生导航栏的样式,可以直接用bs_navbar组件,将搜索框嵌入导航栏右侧:

library(shiny)
library(bslib)

bs_navbar(
  title = "Weather",
  align = "end",
  textInput("search", "Search", width = "200px"),
  sidebar = sidebar("sidebar",
                    card(" ",actionButton("card_click", card_body("Cities",align = "center"))),
                    card(" ",actionButton("card_click-1", card_body("Maps",align = "center"))),
                    card(" ",actionButton("card_click-2", card_body("About Me",align = "center"))),
                    ),
  page_fillable(
    layout_columns(
      card("card1",
           card_body(card("card2",height = "200px"),card("card3",height = "200px"))
      ), 
      col_widths = c(8,4),
      layout_columns(card("card4"))
    )
  )
)

两种方案都能将搜索框放置到你需要的导航栏位置,可根据页面整体布局偏好选择。

内容的提问来源于stack exchange,提问作者Sakina Zaveri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:41:06