基于SuperZip示例,在R Shiny navbarPage导航栏右侧添加图片
在SuperZip Shiny仪表板导航栏右侧添加图片的实现方法
我刚好折腾过这个SuperZip示例,要在导航栏右侧加图片其实没那么复杂,咱们一步步来搞定:
1. 先搞懂Shiny导航栏的底层逻辑
原SuperZip的导航栏是用navbarPage构建的,基于Bootstrap框架。要把元素放到右侧,核心是利用Bootstrap的ml-auto类(margin-left:auto),这个类能把元素自动推到导航栏的最右侧。
2. 修改navbarPage核心代码
找到原代码里的navbarPage部分,在所有tabPanel之后,添加一个自定义的导航项容器,把图片嵌进去:
navbarPage("SuperZip", tabPanel("Interactive map"), tabPanel("Zipcode table"), tabPanel("About"), # 新增右侧图片元素 tags$ul(class = "navbar-nav ml-auto", tags$li(class = "nav-item", tags$img( src = "https://cdn.rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png", height = "30px", style = "margin: 8px 15px; vertical-align: middle;" ) ) ) )
3. 本地图片的处理方式
如果你想用本地图片,先在Shiny app的根目录下新建一个www文件夹(Shiny会自动读取这个文件夹里的静态资源),把图片放进去,然后把src改成图片文件名就行,比如:
src = "rstudio-logo.png"
4. 样式微调(可选)
如果图片和导航栏的对齐效果不太理想,可以加一点自定义CSS来调整。在UI的最顶部添加这段代码:
tags$head( tags$style(HTML(" .navbar-nav .nav-item img { margin-right: 10px; /* 要是导航栏高度调整了,这里可以修改margin-top/margin-bottom来适配 */ margin-top: 5px; } ")) )
关键区别说明
之前你提到的重复问题是在导航栏左侧加图片,那是直接在navbarPage的title参数里嵌套图片;而右侧的核心是用ml-auto类把元素推到右侧,这是两者最本质的不同。
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

