Как я могу выровнять логотип в заголовке навигационной панели блестящего приложения R, созданного с помощью bslib?

Я пытаюсь добавить логотип своей компании в блестящее приложение R, созданное с использованием {bslib}. Я пробовал разные способы добавления этого изображения в аргумент «заголовок» страницы «page_navbar». Пока изображение добавляется, оно выглядит шатко и меняет положение других элементов на ленте заголовка. Пример изображения и логотипа прилагается.

Вот демонстрационный код, иллюстрирующий проблему:

library(shiny)
library(bslib)
ui <- page_navbar(
  title = div("My app",
              img(src = "WCTMainLogoWhite_edited.png", height = "57.5px", width = "auto", 
                  style = "position: absolute;
                           top: 1px;
                           right: 2%;")),
  theme = bs_theme(version = 5, bootswatch = "zephyr")|> ##setting the primary color of "zephyr" bootswatch theme manually
    bslib::bs_add_rules(
      rules = "
                    .navbar.navbar-default {
                        background-color: $primary !important;
                    }
                    "
    ),
  nav_panel(title = "Trends",
            layout_columns(
              card(
                full_screen = TRUE,
                card_header(
                  "Card 1")
                )),
              layout_columns(
                card(
                  full_screen = TRUE,
                  card_header("Card 2")),
                card(
                  full_screen = TRUE,
                  card_header("Card 3")),
                col_widths = c(12, 12) 
              )
            ),
  nav_panel(title = "Instructions on use", p("Content to be added"))
)

server <- function(input, output, session) {}

shinyApp(ui, server)

Есть ли лучший способ добавить изображение, которое будет совпадать с другими элементами в заголовке?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
115
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Лучший способ выровнять элементы по центру — использовать flex. Добавьте display: flex и align-items: center в родительский элемент div. Вот и все

Если вы хотите исправить существующий код, добавьте эти свойства в свой логотип.

  1. position: absolute;.
  2. top: 0 и bottom: 0;.
  3. margin: auto 0;.

Мой личный фаворит — использование flex, если есть сомнения, спрашивайте дальше. Ваше здоровье.

Спасибо за помощь, Знакомьтесь. Исправление кода путем изменения предложенных вами элементов стиля все равно оставило много места под логотипом на ленте заголовка и изменило положение элементов навигационной панели. Итак, я последовал ответу Яна на этот вопрос.

Ramya Roopa 05.07.2024 14:35
Ответ принят как подходящий

Я бы использовал подход, описанный в этом ответе: изображение просто добавляется к navbar. Это выглядит так и реализовано ниже.

Однако если один из них находится ниже точки останова lg, это не приведет к удовлетворительному результату, поскольку тогда navbar схлопывается и положение изображения меняется. Поэтому я реализовал css @media (max-width:992px) ниже, который устанавливает положение изображения на fixed, а также устанавливает right: 10% так, чтобы у вас все еще был доступ к navbar-toggle button.

Вы также можете сделать это наоборот и поменять положение изображения и кнопки переключения, если хотите, чтобы изображение располагалось справа.

library(shiny)
library(bslib)

ui <- page_navbar(
  title = "My app",
  theme = bs_theme(version = 5, bootswatch = "zephyr")|> ##setting the primary color of "zephyr" bootswatch theme manually
    bslib::bs_add_rules(
      rules = "
                    .navbar.navbar-default {
                        background-color: $primary !important;
                    }
                    "
    ),
  nav_panel(title = "Trends",
            tags$head(
              tags$script(
                HTML('$(document).ready(function() {
                       $(".navbar .container-fluid")
                         .append("<img id = \'myImage\' src=\'WCTMainLogoWhite_edited.png\' align=\'right\' height = \'57.5px\'>"  );
                      });')),
              tags$style(
                HTML('@media (max-width:992px) { #myImage { position: fixed; right: 10%; top: 0.5%; }}')
                # or: 
                # HTML('@media (max-width:992px) { #myImage { position: fixed; right: 1%; top: 0.5%; }
                #                                 div.navbar-header > button {margin-right: 175px}}')
              )),
            layout_columns(
              card(
                full_screen = TRUE,
                card_header(
                  "Card 1")
              )),
            layout_columns(
              card(
                full_screen = TRUE,
                card_header("Card 2")),
              card(
                full_screen = TRUE,
                card_header("Card 3")),
              col_widths = c(12, 12) 
            )
  ),
  nav_panel(title = "Instructions on use", p("Content to be added"))
)

server <- function(input, output, session) {}

shinyApp(ui, server)

Здесь это не имеет отношения, но что касается setting the primary color of "zephyr" bootswatch theme manually, обратите внимание, что я недавно обновил свой ответ здесь и предоставил, на мой взгляд, лучшее решение, чем старое. Я не реализовал здесь, чтобы оставаться ближе к предоставленному вами коду.

Другие вопросы по теме