Как заставить параметры virtualSelectInput() выходить за пределы боковой панели bslib?

Открыв раскрывающийся список, я хотел бы, чтобы полное имя элемента было видно, т. е. выходило за пределы тела панели мониторинга. По умолчанию имена обрезаются по границе боковой панели.

Мне бы хотелось развить свои навыки работы с интерфейсом до такой степени, чтобы я мог решить эту проблему самостоятельно. Но в настоящее время я не могу решить эту проблему, несмотря на то, что видел подобные примеры, такие как этот.

Было бы очень признательно за решение с объяснением того, как решать такие проблемы.

library(shiny)
library(bslib)
library(shinyWidgets)

vec_long_items <- sapply(1:10, function(i) {
  paste(sample(letters, 100, replace = TRUE), collapse = "")
})

shinyApp(
  ui = page_sidebar(
    title = "Long items to select",
    sidebar = sidebar(
      virtualSelectInput(
        inputId = "in1", 
        label = "Input 1", 
        choices = vec_long_items, 
      ),
    ),
  ),
  server = function(input, output, session) {
    output$out_text <- renderTable(data.frame(items = vec_long_items))
  }
)

Не уверен, что вы пытаетесь здесь сделать. Можете ли вы дать больше контекста?

Ifeanyi Idiaye 03.09.2024 19:51

@Chris Пожалуйста, смотрите изменения выше.

its.me.adam 03.09.2024 20:47

Хорошо, это не моя идея «переполнения», вероятно, есть некоторые «относительные» настройки размера боковой панели, хотя это противоречит концепции, согласно которой боковые панели меньше тела.

Chris 03.09.2024 20:52

Итак, ваша цель — заставить это работать с помощью virtualSelectInput? Потому что с pickerInput все работает, как в вашем связанном вопросе, без проблем. Также я не понимаю, почему вы поставили label = "shinyWidgets::pickerInput" выше. Вам следует сформулировать свой вопрос более конкретно, опустить R shiny input и указать, какой ввод.

Jan 03.09.2024 21:03

@Jan Нет, любой вклад. С pickerInput тоже не работает. Причина в том, что я использую bslib. Метка исправлена.

its.me.adam 03.09.2024 21:39

Хорошо, я вижу. Используя ответ по ссылке, вам нужно перейти .sidebar в css, тогда это сработает для pickerInput, как описано для боковой панели bslib.

Jan 03.09.2024 21:49

@Jan Ян, я пробовал это, но безрезультатно. Что ты имеешь в виду?

its.me.adam 03.09.2024 22:05

1) css <- ".sidebar {overflow: visible !important;}", 2) tags$head(tags$style(HTML(css))) в page_sidebar() и 3) options = pickerOptions(dropdownAlignRight = TRUE) в pickerInput().

Jan 03.09.2024 22:14

@Jan Ах, у меня были теги $head внутри аргумента заголовка. Моя вина. Это действительно работает, но знаете ли вы, почему это не сработает для virtualSelectInput?

its.me.adam 03.09.2024 22:27

@ Крис, я не понимаю, что ты имеешь в виду. Но я относительно новичок в CSS.

its.me.adam 04.09.2024 18:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
10
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Элементы виртуального выбора отображаются в виде dropbox-container, и в зависимости от вашего текущего представления они могут находиться над или под раскрывающимся списком. Вы можете переопределить свойства csswidth и max-width этих двух селекторов:

.vscomp-dropbox-container.pop-comp-wrapper.position-top,
.vscomp-dropbox-container.pop-comp-wrapper.position-bottom 
  {
    width: fit-content !important; /* make boxes fit their content */
    max-width: unset !important;   /* overwrite default max-width for larger boxes */
  }

И тогда нам нужна еще одна корректировка: A virtual-select имеет свойство dropBoxWrapper, которое определяет родительский элемент для отображения Dropbox. По умолчанию для него установлено значение self, и мы устанавливаем для него значение body, т. е. устанавливаем

dropboxWrapper = "body"

в virtualSelectInput. Благодаря этому dropbox не ограничивается боковой панелью.

library(shiny)
library(bslib)
library(shinyWidgets)

vec_long_items <- sapply(1:10, function(i) {
  paste(sample(letters, 100, replace = TRUE), collapse = "")
})

css <- "
.vscomp-dropbox-container.pop-comp-wrapper.position-top,
.vscomp-dropbox-container.pop-comp-wrapper.position-bottom 
  {
    width: fit-content !important; 
    max-width: unset !important;
  }"

shinyApp(
  ui = page_sidebar(
    title = "Long items to select",
    tags$head(
      tags$style(HTML(css))
    ),
    sidebar = sidebar(
      virtualSelectInput(
        inputId = "in1", 
        label = "Input 1", 
        choices = vec_long_items,
        dropboxWrapper = "body"
      ),
    )
  ),
  server = function(input, output, session) {
    output$out_text <- renderTable(data.frame(items = vec_long_items))
  }
)

Как вы вообще начали это решать? Я думаю, вы нашли .vscomp-dropbox-container.pop-comp-wrapper через Inspect?

its.me.adam 04.09.2024 20:53

Да, вы правы, мне пришлось проверить это, чтобы получить селектор.

Jan 04.09.2024 21:04

Знаете, почему селектор такой длинный? Наконец, я не понимаю свойство dropBoxWrapper, на которое вы ссылаетесь. Что означают self и body в этом контексте?

its.me.adam 04.09.2024 21:22

Что касается селекторов, пожалуйста, проверьте DOM. Если вы, например. есть .vscomp-dropbox-container, как отличить тот, что над раскрывающимся списком, от того, что под раскрывающимся списком? Вам нужен дополнительный класс. Что касается dropBoxWrapper, подумайте о родителе Dropbox. self относится к самому вводу, тогда как body относится к телу документа.

Jan 04.09.2024 21:26

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