Я изучаю блестящие приложения и задаю некоторые основные вопросы по настройке макета, особенно стиля и шрифта. Я был бы благодарен за указатели или явные ответы, спасибо!
Рассмотрим основное приложение ввода-вывода: пользователь вводит данные в sidebarPanel, и он реагирует на результат в mainPanel.
-
Как я могу отформатировать таблицу вывода в mainPanel, чтобы больше походить на sidebarPanel? скажем, прямоугольник примерно того же размера с цветным фоном (может быть, другого цвета) и данными, появляющимися в ящике одинакового размера.
-
Как я могу контролировать тип шрифта, размер шрифта и размер шрифта внутри панелей?
Как вы можете видеть из кода (cf runGist подробно описывает пару строк ниже), мне удалось настроить размер поля numericInput в sidebarPanel, но я не смог управлять стилями шрифтов ( мой тег $style code неуместен?).
Что еще важнее для эстетических целей, я не мог понять, как отформатировать mainPanel, чтобы он выглядел как sidebarPanel. В основном я модифицировал примеры с блестящего веб-сайта, но, очевидно, я пропустил некоторые важные вещи.
Изменить 1: Следуя предложению Скотта Чемберлена, я скопировал файлы server.R и ui.R на github:
library("shiny")
runGist("gist.github.com/annoporci/7313856")
Изменить 2: Скотт предложил использовать Chrome/Firefox "Inspect Element" (щелкните правой кнопкой мыши по тексту страницы html, другие браузеры могут иметь одинаковую функцию). Ниже приведен скриншот:
Проверить элемент
Предложение Скотта использовать инструмент "Проверка элемента" оказалось очень плодотворным.
Вот что я узнал (если не ошибаюсь):
-
container-fluid
иrow-fluid
управляют общим контейнером. -
span12
управляетheaderPanel
-
span4
управляетsidebarPanel
-
span8
управляетmainPanel
-
shiny-bound-input
для входной стороны -
shiny-bound-output
иshiny-html-output
(оба они действительны) для выходной стороны
Основываясь на этих выводах, я поместил стили HTML в mainPanel, потому что он казался очевидным местом, но он, похоже, работает и внутри sidebarPanel. Было бы более интуитивно (для меня) разместить его непосредственно внутри страницыWithSidebar(), но это не сработало.
Вот отредактированный блеск:
runGist("https://gist.github.com/annoporci/7346772")
Вот стили HTML:
HTML('<style type="text/css">
.row-fluid { width: 50%; }
.well { background-color: #99CCFF; }
.shiny-html-output { font-size: 20px; line-height: 21px; }
</style>')
Я выбрал 50% для общей ширины контейнера, чтобы он был маленьким.
Я выбрал тот же цвет для sidebarPanel и mainPanel.
Я выбрал более крупный шрифт для вывода, который здесь не очень хорош, но имеет смысл в моем реальном приложении. И кроме того, я больше экспериментирую.
Я выбрал высоту строки 21px, а не 20px по умолчанию, чтобы настроить высоту окна вывода так же, как поле ввода. Опять же, эксперимент.
Я также изменил стиль отображения на сервере .R, а именно
output$myResults <- renderText({
r <- myFunction(input$myinput)
c("My Output:","<br><br>",r)
})
Это потому, что я хотел, чтобы результат отображался под словами "Мой вывод". В результате проб и ошибок я обнаружил, что я мог бы сжимать строки в векторе c()
с <br><br>
в качестве разделителя для принудительного разрыва строки. Я был бы шокирован, если бы это был рекомендуемый подход, поэтому, пожалуйста, звоните, если вы знаете правильный способ сделать это.
Последующие вопросы меньшей важности:
Я посмотрю, смогу ли я найти способ вывода моего результата в ящик белого цвета, аналогичный номеру ввода в sidebarPanel. Любые предложения приветствуются.
Возможно ли собрать все html-модификации в том же отдельном файле, который будет храниться вместе с сервером. R и ui.R?
Я выберу ответ Скотта, потому что он помог обнаружить достаточно, чтобы получить мои результаты только о том, как я этого хотел. Но, пожалуйста, отредактируйте, если вы видите ошибки или неточности в моем описании выше.