【问题标题】:Placing an image on right end of navigation bar in navbarPage() layout in R Shiny在 R Shiny 的 navbarPage() 布局中将图像放在导航栏的右端
【发布时间】:2018-07-09 19:33:52
【问题描述】:

我希望复制与 RStudio 的 SuperZip Shiny 仪表板类似的布局:https://shiny.rstudio.com/gallery/superzip-example.html

该应用的代码可在此处获得:https://github.com/rstudio/shiny-examples/tree/master/063-superzip-example

基于该代码,我想在导航栏的右端添加一个图像(比如 Rstudio 徽标),在下图中用红色框突出显示。我假设我需要添加一些 HTML 和 CSS 代码,但我不确定如何继续。

我的问题和这个问题类似:How can I insert an image into the navbar on a shiny navbarPage()

但是,请注意,答案提供了将图像放在导航栏左端的指示。我要求把它放在导航栏的右端。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    链接的解决方案可能不适用于将徽标放在右侧。我建议使用一些JavaScript 代码到appendnavbar 的标志。

    解决方案

    1. 创建JS 文件(我将我的文件命名为code.js

    当应用程序完成加载后,它会将徽标附加到导航栏。 (图片右对齐)

    $( document ).ready(function() {
      $( ".navbar .container-fluid" ).append( '<img src="logo.png" align="right">' );
    });
    
    1. 将徽标(在我的情况下为 logo.png)和 JS 文件放在 www 文件夹中。

    2. tags$head中包含js文件

    您需要将tagListnavbarPage 一起使用,否则导航栏上会出现一个可点击的“幽灵”标签。

    ui <- tagList(
      tags$head(tags$script(type="text/javascript", src = "code.js")),
      navbarPage(title = "Right aligned logo",
                 tabPanel("tab1"),
                 tabPanel("tab2")
      )
    )
    

    【讨论】:

    • 如果我还在tagList 中包含tags$style(type="text/css", "body {padding-top: 70px;}") 以确保我的导航栏不与内容重叠,我会遇到这种方法的问题。知道如何解决吗?
    • navbar 与内容如何重叠?您可能应该使用可重现的示例发布关于 SO 的新问题。
    • 如果你使用position = "fixed-top",那么导航栏会覆盖内容。它在navbarPage 帮助文件中。我认为这与这个答案有关并且可以改进这个答案,因为很多人会使用这个选项。
    • @GyD 我可以为徽标添加超链接吗?
    • @JohnSmith 是的,你可以。除了.append( '&lt;img src="logo.png" align="right"&gt;' );,您可以在a(链接)标签中包含img,如下所示:.append( '&lt;a href="http://google.com"&gt;&lt;img src="logo.png" align="right"&gt;&lt;/a&gt;' );
    【解决方案2】:

    我在其他地方得到了一些帮助,我将其发布在这里:

    在ui.R代码中:

    navbarPage(
      title = div(
        div(
          id = "img-id",
          img(src = "path/to/img.png")
        ),
        "Superzip"
      ),
    
      # Insert rest of ui code
    

    styles.css 脚本中:

    #img-id{
      position: fixed;
      right: 10px;
      top: 5px;
    }
    

    【讨论】:

    • 这是一个很好的解决方案,除了它不会删除tabPanels 之后的幽灵标签,请参阅:imgur.com/a/mucZD
    • 我刚刚检查了我的工作计算机,现在我没有看到 ghost 标签(可能是我的错误...)。这个解决方案剩下的唯一问题是浏览器中显示的title 将是&lt;div ...&gt;,这有点难看,否则我可能更喜欢这个而不是使用 js。
    • 感谢您的回复。我确实更喜欢您的回答,因为我认为它更笼统。
    • 你可以更新标题:jsTitleChange &lt;- 'Shiny.addCustomMessageHandler("changetitle", function(x) {document.title=x});,然后session$sendCustomMessage("changetitle", "new title"),这样在浏览器上看起来就不会难看。
    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 2021-12-03
    • 2014-09-02
    • 2018-01-13
    • 1970-01-01
    • 2018-08-03
    • 2018-10-22
    相关资源
    最近更新 更多