返回技能列表

design-shiny-ui

pjt222
更新于 Yesterday
5 次查看
17
2
17
在 GitHub 上查看
设计design

关于

This skill helps developers create modern, accessible Shiny UIs using bslib and Bootstrap 5 theming. It provides best practices for responsive layouts with layout_columns(), card components, and WCAG compliance. Use it when you need professional-looking apps with consistent branding or improved accessibility.

快速安装

Claude Code

推荐
主要方式
npx skills add pjt222/agent-almanac -a claude-code
插件命令备选方式
/plugin add https://github.com/pjt222/agent-almanac
Git 克隆备选方式
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/design-shiny-ui

在 Claude Code 中复制并粘贴此命令以安装该技能

技能文档


name: design-shiny-ui description: > Moderne, zugängliche Shiny-Benutzeroberflächen mit bslib-Themes, responsivem Layout und Barrierefreiheits-Best-Practices gestalten. Behandelt Bootstrap- 5-Theming, layout_columns(), Cards und WCAG-Konformität. Verwenden, wenn eine Shiny-App professionell wirken soll, ein Marken-Theme konsistent angewendet oder die Zugänglichkeit für alle Nutzer verbessert werden soll. license: MIT locale: de source_locale: en source_commit: 6f65f316 translator: claude-opus-4-6 translation_date: 2026-03-16 allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: shiny complexity: intermediate language: R tags: shiny, ui, bslib, theming, accessibility, bootstrap

Shiny-UI gestalten

Moderne, zugängliche und visuell ansprechende Shiny-Benutzeroberflächen mit bslib und Bootstrap 5 erstellen.

Wann verwenden

  • Shiny-App professionell und markenkonform gestalten
  • Responsives Layout für verschiedene Bildschirmgrößen einrichten
  • Zugänglichkeit (WCAG 2.1 AA) sicherstellen
  • Konsistentes Design über mehrere Apps implementieren

Eingaben

  • Erforderlich: Shiny-App (scaffolded oder bestehend)
  • Optional: Markenfarben und Typografie (Hex-Codes, Schriftarten)
  • Optional: Design-System oder Style-Guide
  • Optional: Zugänglichkeits-Anforderungen

Vorgehensweise

Schritt 1: bslib installieren und Bootstrap 5 aktivieren

bslib für modernes Bootstrap-5-Theming einrichten.

install.packages("bslib")

# Grundlegendes bslib-Setup in app.R oder app_ui.R
library(shiny)
library(bslib)

ui <- page_sidebar(  # Modernes Layout mit bslib
  title = "Meine App",
  sidebar = sidebar(
    selectInput("dataset", "Datensatz:", choices = c("iris", "mtcars"))
  ),
  # Hauptinhalt
  card(
    card_header("Datenübersicht"),
    tableOutput("table")
  )
)

Erwartet: App verwendet Bootstrap 5. Modernes, responsives Grundlayout.

Bei Fehler: Wenn bslib und shiny Version inkompatibel sind, packageVersion("bslib") und packageVersion("shiny") prüfen — bslib >= 0.5.0 für volle Bootstrap-5-Unterstützung.

Schritt 2: Custom Theme erstellen

Markenspezifisches Bootstrap-5-Theme konfigurieren.

# Marken-Theme definieren
mein_theme <- bs_theme(
  version = 5,

  # Grundlegende Markenfarben
  bg = "#FFFFFF",           # Hintergrund
  fg = "#212529",           # Vordergrund (Text)
  primary = "#0066CC",      # Primärfarbe
  secondary = "#6C757D",    # Sekundärfarbe
  success = "#28A745",
  warning = "#FFC107",
  danger = "#DC3545",

  # Typografie
  base_font = font_google("Inter"),
  heading_font = font_google("Inter", wght = 600),
  code_font = font_google("JetBrains Mono"),

  # Benutzerdefinierte Sass-Variablen
  "border-radius" = "0.5rem",
  "box-shadow" = "0 2px 4px rgba(0,0,0,0.1)"
)

# Theme in App verwenden
ui <- page_sidebar(
  theme = mein_theme,
  title = "Meine App",
  # ...
)

Theme live im Browser anpassen:

# Interaktiver Theme-Editor (nur Entwicklung)
bs_themer()  # Fügt Theming-Widget zur App hinzu

Erwartet: App zeigt benutzerdefinierte Farben und Typografie. bs_themer() zeigt interaktive Theme-Kontrollen.

Bei Fehler: Wenn Google Fonts nicht laden (kein Internet), font_google() durch font_collection("system-ui", "sans-serif") ersetzen.

Schritt 3: Responsives Layout mit Cards und Columns

Flexibles, responsives Layout mit bslib-Komponenten erstellen.

ui <- page_sidebar(
  theme = mein_theme,
  title = "Dashboard",

  sidebar = sidebar(
    width = 300,  # Sidebar-Breite in Pixeln
    bg = "#f8f9fa",
    selectInput("dataset", "Datensatz:", choices = c("iris", "mtcars")),
    sliderInput("rows", "Zeilen:", min = 5, max = 50, value = 10),
    hr(),
    actionButton("refresh", "Aktualisieren", class = "btn-primary w-100")
  ),

  # Responsives 2-Spalten-Layout
  layout_columns(
    col_widths = c(8, 4),  # 8/12 + 4/12 Bootstrap-Spalten

    card(
      full_screen = TRUE,  # Vollbild-Erweiterungsbutton
      card_header(
        "Hauptdiagramm",
        class = "bg-primary text-white"
      ),
      plotOutput("main_plot", height = "400px")
    ),

    layout_columns(
      col_widths = c(12, 12),  # Gestapelte Cards auf rechter Seite

      value_box(
        title = "Datenpunkte",
        value = textOutput("n_points"),
        showcase = bsicons::bs_icon("bar-chart"),
        theme = "primary"
      ),

      card(
        card_header("Zusammenfassung"),
        tableOutput("summary_table")
      )
    )
  )
)

Erwartet: Responsives 2-Spalten-Layout auf Desktop. Gestapelt auf Mobile.

Bei Fehler: Wenn Spalten nicht korrekt brechen, col_widths überprüfen — Summe muss 12 oder weniger ergeben (Bootstrap-12-Spalten-Grid).

Schritt 4: Interaktionselemente gestalten

Moderne UI-Komponenten mit Bootstrap-5-Styling hinzufügen.

# Navigation mit Tabs
page_navbar(
  theme = mein_theme,
  title = "Meine App",
  nav_panel(
    "Übersicht",
    icon = bsicons::bs_icon("house"),
    # Inhalt der Übersichtsseite
  ),
  nav_panel(
    "Analyse",
    icon = bsicons::bs_icon("graph-up"),
    # Analyseinhalt
  ),
  nav_spacer(),
  nav_item(
    tags$a(href = "https://docs.example.com", "Dokumentation",
           target = "_blank")
  )
)

# Gestylte Buttons
fluidRow(
  actionButton("primary_btn", "Primär", class = "btn-primary"),
  actionButton("outline_btn", "Umriss", class = "btn-outline-secondary ms-2"),
  downloadButton("download", "Herunterladen", class = "btn-success ms-2")
)

# Tooltips und Popovers
tags$button(
  class = "btn btn-info",
  `data-bs-toggle` = "tooltip",
  `data-bs-placement` = "top",
  title = "Hilfreiche Erklärung",
  bsicons::bs_icon("question-circle")
)

Erwartet: Moderne UI-Elemente mit korrektem Bootstrap-5-Styling.

Bei Fehler: Wenn Tooltips nicht erscheinen, Bootstrap-5-JavaScript muss aktiviert sein. bs_dependency_defer() oder manuelle JS-Initialisierung verwenden.

Schritt 5: Zugänglichkeit sicherstellen

WCAG 2.1 AA-Konformität für alle Nutzer implementieren.

# Semantisches HTML mit ARIA-Labels
ui <- page_sidebar(
  theme = mein_theme,

  # Skip-Navigation-Link
  tags$a(
    href = "#main-content",
    class = "visually-hidden-focusable",
    "Zum Hauptinhalt springen"
  ),

  sidebar = sidebar(
    # Label für Seitenleiste
    tags$div(
      role = "region",
      `aria-label` = "Filteroptionen",
      selectInput("dataset", "Datensatz auswählen:", choices = c("iris", "mtcars"))
    )
  ),

  tags$main(
    id = "main-content",
    role = "main",
    `aria-label` = "Hauptinhalt",

    # Beschreibende Alt-Texte für Plots
    plotOutput(
      "main_plot",
      alt = "Streudiagramm der ausgewählten Datensatz-Variablen"
    ),

    # Tabellen mit Überschriften
    tags$div(
      role = "region",
      `aria-label` = "Datentabelle",
      tableOutput("data_table")
    )
  )
)

Farbkontrast prüfen:

# Kontrastverhältnisse verifizieren (WCAG AA: min 4.5:1 für normalen Text)
# Externes Tool: https://webaim.org/resources/contrastchecker/

# Farbenblindheitssichere Paletten
colorblind_palette <- c(
  "#E69F00", "#56B4E9", "#009E73",
  "#F0E442", "#0072B2", "#D55E00", "#CC79A7"
)

Erwartet: App navigierbar mit Tastatur. Screen Reader-Nutzer können Inhalt verstehen. Farben haben ausreichenden Kontrast.

Bei Fehler: Wenn ARIA-Labels nicht erkannt werden, HTML-Ausgabe mit view_ui <- function(ui) htmltools::html_print(ui) untersuchen.

Schritt 6: Theme über Apps hinweg wiederverwenden

Theme in R-Paket oder shared Skript packen.

# R/theme.R (in golem-Paket oder gemeinsames Skript)
#' Unternehmensspezifisches bslib-Theme
#' @export
get_company_theme <- function() {
  bs_theme(
    version = 5,
    primary = "#0066CC",
    base_font = font_google("Inter"),
    heading_font = font_google("Inter", wght = 600)
  )
}

# In jeder App verwenden
ui <- page_sidebar(
  theme = get_company_theme(),
  # ...
)

# CSS-Überschreibungen für app-spezifische Anpassungen
ui <- page_sidebar(
  theme = bs_theme_update(
    get_company_theme(),
    # App-spezifische Überschreibungen
    "sidebar-bg" = "#f0f4f8"
  )
)

Erwartet: Konsistentes Design über alle Unternehmens-Apps. Theme in einzelner Datei wartbar.

Bei Fehler: Wenn Theme-Überschreibungen nicht wirken, CSS-Spezifität prüfen — bslib-Sass-Variablen haben Vorrang vor Bootstrap-Defaults.

Validierung

  • App verwendet Bootstrap 5 via bslib
  • Custom Theme mit Markenfarben und Typografie konfiguriert
  • Responsives Layout bricht korrekt auf mobilen Bildschirmen
  • Navigation mit Tastatur vollständig möglich
  • Farb-Kontrastverhältnisse erfüllen WCAG 2.1 AA (4.5:1)
  • ARIA-Labels für nicht-textuelle Elemente vorhanden
  • Theme in wiederverwendbarer Funktion oder Paket

Haeufige Stolperfallen

  • Bootstrap-Version-Mischung: Nicht Bootstrap 4 und 5 mischen. bslib-Themes erfordern konsistente Bootstrap-Version.
  • Inline-CSS vs Sass-Variablen: Inline-CSS kann bslib-Theming überschreiben. Sass-Variablen über bs_theme() bevorzugen.
  • Google Fonts in Offline-Umgebungen: font_google() benötigt Internet. Für Offline-Einsatz lokale Schriften in www/fonts/ verwenden.
  • Kontrast-Checker für Markenfarben: Markenfarben erfüllen nicht immer WCAG-Kontrastverhältnisse. Immer mit Tool prüfen.
  • Cards und full_screen: full_screen = TRUE erfordert Inhalt mit definierten Höhen, sonst unbegrenzte Ausdehnung.
  • value_box in Modulen: value_box() IDs über ns() korrekt namespace.

Verwandte Skills

  • scaffold-shiny-app — App vor UI-Design scaffolden
  • build-shiny-module — Modulstruktur für wiederverwendbare UI-Komponenten
  • optimize-shiny-performance — Performance nach UI-Fertigstellung optimieren

GitHub 仓库

pjt222/agent-almanac
路径: i18n/de/skills/design-shiny-ui
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

相关推荐技能

executing-plans

设计

该Skill用于当开发者提供完整实施计划时,以受控批次方式执行代码实现。它会先审阅计划并提出疑问,然后分批次执行任务(默认每批3个任务),并在批次间暂停等待审查。关键特性包括分批次执行、内置检查点和架构师审查机制,确保复杂系统实现的可控性。

查看技能

requesting-code-review

设计

该Skill可在完成任务、实现主要功能或合并代码前自动调度代码审查子代理,确保实现符合需求和计划。它支持通过指定git SHA范围进行精准的代码变更审查,帮助开发者在关键节点及时发现潜在问题。核心原则是"早审查、勤审查",适用于开发流程的各个关键阶段。

查看技能

connect-mcp-server

设计

这个Skill指导开发者如何将MCP服务器连接到Claude Code,支持HTTP、stdio和SSE三种传输协议。它涵盖了从安装配置到认证安全的完整流程,适用于集成GitHub、Notion、数据库等外部服务。当开发者需要添加集成、配置外部工具或提及MCP相关功能时,这个Skill能提供实用的操作指南。

查看技能

web-cli-teleport

设计

该Skill帮助开发者根据任务特性选择Claude Code的Web或CLI界面,并指导如何在两种环境间无缝迁移会话。它能分析任务复杂度、迭代需求等要素,推荐最优工作界面和工作流。关键特性包括会话状态管理、环境切换指导和上下文优化建议。

查看技能