Plattformübergreifende und mobile Benutzeroberflächen · Neue Ressource

Ionic Framework-Designsystem.

Eine native Ionic-Oberfläche für Leseeinstellungen mit überprüften Farbrollen, Geometrie der iOS- und Material-Bereichsregler, echtem Segment- und Schalterverhalten sowie einem Artikel, der auf Auswahl von Schriftart, Größe und Papier reagiert.

OpenDesign-Leitfaden9 Kapitel25 ReferenzeinträgeOriginaler Anwendungsleitfaden
01

Ionic Framework-Designsystem-Oberflächenvorschau

Schriftart wechseln, Textgröße über die Tastatur ändern, Papieroberfläche auf warm umstellen und lokalen Einstellungs-Schnappschuss speichern.

Ionic Vue/Core 9.0.6, Vue 3, expliziter iOS-Modus. Lokal gebündelte native Webkomponenten. · Implementierungsreferenz
02

Ionic Framework-Designsystem-Designreferenz

Ionic Vue/Core 9.0.6 verifiziert. Die Core-Farben stammen aus der installierten core.css. Das Beispiel wählt ausdrücklich den iOS-Modus. Lesetypografie, Papierfarben und umgebende Abstände sind eigene Anwendungsentscheidungen und keine Ionic-Standards.

Standardmäßige semantische Farbfunktionen im Light-Modus

Quelle
Name / RegelWert / KonfigurationVerwendung
--ion-color-primary#0054e9 Native Primär-Steuerelemente.
--ion-color-primary-rgb0, 84, 233RGB-Kanäle für Berechnungen mit Transparenz.
--ion-color-primary-contrast#fffText- und Symbolkontrast auf der Primärfarbe.
--ion-color-primary-shade#004acd Abgedunkelte Primärfarbenvariante.
--ion-color-primary-tint#1a65eb Aufgehellte Primärfarbenvariante.
--ion-color-secondary#0163aa Sekundäre Rolle.
--ion-color-tertiary#6030ff Tertiäre Funktion.
--ion-color-success#2dd55b Erfolgsrolle.
--ion-color-warning#ffc409 Warnrolle.
--ion-color-danger#c5000f Gefahrenrolle.

Native Geometrie des Schiebereglers nach Modus

Quelle
Name / RegelWert / KonfigurationVerwendung
iOS --bar-height4pxKompilierter iOS-Standardwert für den Schieberegler.
iOS --knob-size26pxKompilierte iOS-Größe des Schiebereglers.
MD --bar-height2pxKompilierter Standardwert des Material-Design-Modus.
MD --knob-size18pxKompilierte Größe des Material-Design-Schiebereglers.
Application min / max / step16 / 26 / 1Ganzzahlige Schriftgröße für den Lesetext; tatsächliche Props des Schiebereglers.
snaps / ticks / pintrue / true / trueSichtbare Schritte und formatierte Rückmeldung zur Schriftgröße.

Eigene Maßstäbe für Lesetext und Layout

Quelle
Name / RegelWert / KonfigurationVerwendung
Reading fontGeorgia, serif OR system-ui, sans-serifÜber das native Segment gesteuert; Schriften, die bereits auf dem Gerät verfügbar sind.
Reading size16–26px; default 18pxWird direkt auf den Artikel angewendet.
Reading line-height1.65Eigene angenehme Zeilenlänge für Fließtext.
Article heading1.9em / 1.15; 1.6em below 360pxSkaliert mit der vom Leser gewählten Textgröße.
Control/body fontsystem-ui, sans-serifExplizite Schriftartwahl der Anwendung.
Spacing10 / 12 / 14 / 16 / 20 / 22 / 24 / 28 / 32pxKonkrete Werte des eigenen Stylesheets, keine behauptete Ionic-Skala.
Layout300px settings + flexible article; stack at 760pxBeide Spalten verwenden min-width:0.
Paper roles#fff9eb warm; #ffffff white; #24362e inkEigene Inhaltsfarben, getrennt von den nativen Funktionen der Steuerelemente.
Card radius16pxEigene Geometrie des umgebenden Bedienfelds.
03

Vollständiger Leitfaden zum Ionic Framework-Designsystem

Ein praktischer Leitfaden zur Auswahl, Anwendung und Überprüfung dieses Systems für ein echtes Interface.

DESIGN-ionic.md

Umfassende Anleitung, Einstieg in die Implementierung und Links zu den Quellen.

Leitfaden herunterladen

Ionic Framework-Designsystem: Renderingmodus bewusst wählen

Renderingmodus bewusst wählen

Ionic stellt Webkomponenten über Framework-Integrationen bereit. Dieses Beispiel verwendet Ionic Vue 9.0.6 und setzt in der IonicVue-Konfiguration mode auf ios. Dadurch erhalten Segment, Umschalter, Schieberegler und Schaltflächen eine einheitliche Plattformdarstellung – unabhängig davon, mit welchem Desktopbrowser die Seite betrachtet wird. Der Modus ist eine Darstellungsentscheidung für Komponenten; er verwandelt die Seite nicht in eine native mobile Anwendung.

Aus diesem OpenDesign-Leitfaden

Das Beispiel verwendet bewusst ein gewöhnliches main-Element statt einer Vollbildstruktur aus IonApp/IonContent. So kann ein Komponentenbeispiel innerhalb einer eingebetteten Ressourcenseite an seinen Inhalt angepasst werden. Eine tatsächlich geroutete Ionic-Anwendung sollte der Seiten- und Routerstruktur des Frameworks folgen, einschließlich IonPage, sofern für Übergänge erforderlich.

Unterstützende Spezifikation lesen

Ionic Framework-Designsystem: Eine Ionic-Farbe ist eine Familie zusammengehöriger Variablen

Eine Ionic-Farbe ist eine Familie zusammengehöriger Variablen

Das installierte Core-Stylesheet definiert primary als #0054e9 und enthält separate Werte für RGB-Kanäle, Kontrast, Abdunklung und Aufhellung. Komponenten können diese zusammengehörigen Werte für verschiedene Zustände verwenden. Wird nur der Basis-Hexwert ersetzt, können andere Zustände inkonsistent bleiben; für eine eigene Markenfarbe sollte die vollständige Farbwertfamilie definiert werden.

Dieses Beispiel behält für native Steuerelemente die Standard-Primärfarbe bei. Die warme Papieroberfläche ist eine separate Anwendungsoberfläche mit dem Farbwert #fff9eb, und der Artikeltext bleibt #24362e. Beim Wechsel der Seite zu Weiß ändert sich nur die Leseoberfläche. Die Steuerungsfarbpalette wird dadurch nicht stillschweigend verändert und es wird auch nicht behauptet, die vollständige dunkle Ionic-Palette zu implementieren.

Unterstützende Spezifikation lesen

Ionic Framework-Designsystem: Die Schriftwahl für Lesende sichtbar machen

Die Schriftwahl für Lesende sichtbar machen

Das Segment schaltet den Artikel zwischen Georgia und system-ui um. Die Steuerelemente selbst bleiben bei system-ui, damit die Einstellung den vorgesehenen Lesetext betrifft und nicht unerwartet Beschriftungen und Abmessungen der Steuerelemente verändert. Es wird keine externe Schriftart angefordert; das Beispiel nutzt die entsprechenden lokalen Schriftstapel.

Die Textgröße ist eine Ganzzahl zwischen sechzehn und sechsundzwanzig Pixeln. Die Überschrift des Artikels ist proportional zu dieser Größe, und der Zeilenabstand bleibt bei 1.65. Bei Breiten unter 360px sinkt das Größenverhältnis der Überschrift auf 1.6em, damit die größte Schriftgröße auch in einer schmalen eingebetteten Spalte lesbar bleibt. Dies sind eigene Anwendungswerte, klar getrennt von den Ionic-Standardwerten der Komponenten.

Unterstützende Spezifikation lesen

Ionic Framework-Designsystem: Ein Segment hat eine kontrollierte Auswahl und native Semantik

Ein Segment hat eine kontrollierte Auswahl und native Semantik

IonSegment erhält den aktuellen Wert von face und zwei untergeordnete IonSegmentButton-Elemente. Sein Ereignis ionChange aktualisiert das Modell anhand von event.detail.value. Jede Schaltfläche hat einen eigenen stabilen Wert, serif oder sans, und die sichtbare Beschriftung erläutert die Auswahl. Ein Absatz kennzeichnet das gesamte Steuerelement über aria-labelledby.

Der tatsächliche Barrierefreiheitsbaum zeigt eine tablist mit ausgewählten Tabs und keine Gruppe gewöhnlicher Schaltflächen. Der lokale Interaktionstest wählt deshalb den nativen Tab Sans aus und überprüft, ob sich die Leseschrift ändert. Zwei Schaltflächen lediglich so zu gestalten, dass sie wie ein Segment aussehen, würde nicht dasselbe Auswahlverhalten gewährleisten.

Unterstützende Spezifikation lesen

Ionic Framework-Designsystem: Bereichsereignisse und Einschränkungen als einheitlichen Vertrag verwenden

Bereichsereignisse und Einschränkungen als einheitlichen Vertrag verwenden

IonRange legt min, max und step explizit fest. Der Standardbereich von null bis hundert würde keine sinnvolle Schriftgröße abbilden. Einrastpunkte und Teilstriche zeigen die verfügbaren Abstufungen an, und der Pin-Formatierer fügt dem während der Interaktion angezeigten Wert px hinzu. Die dauerhafte Größenangabe unter dem Steuerelement bleibt auch nach dem Loslassen lesbar.

Der Handler verwendet ionChange und wandelt den Wert in eine Zahl um. Für einen einzelnen Regler ist das passend; ein Bereich mit zwei Reglern würde einen anderen Wertetyp zurückgeben und eine separate Verarbeitung erfordern. Der kompilierte iOS-Bereich verwendet einen 26 Pixel großen Reglerknopf und einen vier Pixel breiten Balken, während der Material-Modus 18 beziehungsweise zwei Pixel verwendet. Diese Unterschiede werden dokumentiert, statt sie zu einem erfundenen, universellen Ionic-Token zusammenzufassen.

  1. Fokussieren Sie den Schieberegler „Textgröße“ und drücken Sie achtmal die rechte Pfeiltaste, um 26px zu erreichen.
  2. Wählen Sie Sans aus und deaktivieren Sie „Warmes Papier“.
  3. Speichern Sie die Einstellungen und prüfen Sie die genaue Momentaufnahme von Schriftart, Größe und Papierfarbe.

Unterstützende Spezifikation lesen

Ionic Framework-Designsystem: Eine boolesche Papierauswahl sollte die Oberfläche sofort aktualisieren

Eine boolesche Papierauswahl sollte die Oberfläche sofort aktualisieren

IonToggle erhält den Wert checked aus dem Modell warm. Das Ereignis liefert detail.checked, das direkt diesem booleschen Zustand zugewiesen wird. Die sichtbare Bezeichnung „Warmes Papier“ gehört zum nativen Schalter, und die Erklärung daneben informiert darüber, dass sich dadurch die Oberfläche des Artikels ändert.

Die Klasse warm ändert den Hintergrund des Artikels, ohne dessen Rahmen zu entfernen oder den Text zu verändern. So bleibt der Vergleich aussagekräftig. Außerdem wird dadurch vermieden, eine Papiertönung mit einer plattformweiten Hell-/Dunkel-Einstellung gleichzusetzen, für die deutlich mehr Ionic-Variablen für Oberflächen und Text koordiniert werden müssten.

Unterstützende Spezifikation lesen

Ionic Framework-Designsystem: Angewendete Einstellungen von einem gespeicherten Stand trennen

Übernommene Einstellungen von einem gespeicherten Schnappschuss trennen

Jede Einstellung wird sofort auf den Artikel angewendet. „Einstellungen speichern“ hält eine lesbare Momentaufnahme im lokalen reaktiven Zustand fest und wird deaktiviert, solange diese Momentaufnahme aktuell ist. Ein Watcher für alle drei Modelle setzt die Meldung nach jeder Änderung zurück, damit eine veraltete Bestätigung nicht eine neue Kombination beschreibt.

„Standardeinstellungen wiederherstellen“ setzt Serif, 18 Pixel und warmes Papier und löscht anschließend die Speichermeldung. Der Status weist ausdrücklich darauf hin, dass die Einstellungen nur für diese Vorschau gelten. Hinter der Aktion stehen weder eine Speicherung in localStorage noch eine Kontoeinstellung oder ein natives Einstellungs-Plug-in; nach einem Neuladen gelten wieder die Standardeinstellungen.

Unterstützende Spezifikation lesen

Ionic Framework-Designsystem: Native Steuerelemente mit Shadow DOM bewahren und das Layout gestalten

Native Steuerelemente mit Shadow DOM bewahren und das Layout gestalten

Der Bereich hat die sichtbare Bezeichnung „Textgröße“, der Schalter enthält seine eigene Textbezeichnung und das Segment ist mit „Schriftart“ beschriftet. Die ursprüngliche Illustration ist mit aria-hidden ausgeblendet. Die Speicherbestätigung verwendet role=status, während der Artikel ein gewöhnliches semantisches HTML-Element bleibt, sodass Überschrift und Absätze der üblichen Dokumentnavigation folgen.

Ionic-Komponenten kapseln ihr internes Markup im Shadow DOM. Das Beispiel verwendet öffentliche Eigenschaften, Ereignisse und dokumentierte benutzerdefinierte CSS-Eigenschaften, statt private interne Klassen abzufragen. Die umgebende Seite nutzt eine inhaltsabhängige Höhe und eine minimale Breite von null. Ein Test bei 280px deckt Probleme mit eingebetteten Breiten auf, die in einem eigenständigen Smartphone-Screenshot möglicherweise nicht sichtbar sind.

  • Beziehungen zwischen Beschriftungen und nativen Komponenten beibehalten.
  • Öffentliche Eigenschaften und Ereignisse verwenden, statt interne Shadow-DOM-Elemente zu verändern.
  • Tastaturbedienung, Größenänderungen und den aktuellen Artikel gemeinsam überprüfen.

Unterstützende Spezifikation lesen

Ionic Framework-Designsystem: Vue-Integration installieren und das Core-CSS einbinden

Vue-Integration installieren und Core CSS einbinden

Der vollständige Einstiegspunkt registriert IonicVue und importiert @ionic/vue/css/core.css vor dem ursprünglichen Stylesheet. Das installierte Vue-Paket löst außerdem vue-router auf. Daher enthält der reproduzierbare Abhängigkeitsbefehl vue-router, obwohl dieses eingebettete Beispiel keine Navigation einrichtet. Ohne diese Peer-Abhängigkeit konnte das lokale Bundle nicht aufgelöst werden.

Die beiden vollständigen Beispiele enthalten App.vue und style.css. Ein standardmäßiges Vite-Vue-Projekt kompiliert die SFC und ihre nativen Komponentenimporte. Die eigenständige Ressourcenvorschau bündelt das resultierende JavaScript und CSS lokal einschließlich der Komponentenimplementierungen, sodass Änderungen an den Steuerelementen keine externe CDN-Anfrage erfordern.

Unterstützende Spezifikation lesen

Ionic Framework-Designsystem: Komponentenbeispiele

Vollständige SFC für Leseeinstellungen

Native IonSegment-, IonRange-, IonToggle- und IonButton-Komponenten steuern einen eigens verfassten kurzen Essay.

vue
<script setup>
import {ref,computed,watch} from 'vue';
import {IonSegment,IonSegmentButton,IonLabel,IonRange,IonToggle,IonButton,IonChip} from '@ionic/vue';
const face=ref('serif'),size=ref(18),warm=ref(true),saved=ref('');
const family=computed(()=>face.value==='serif'?'Georgia, serif':'system-ui, sans-serif');
watch([face,size,warm],()=>saved.value='');
function save(){saved.value=`Saved locally: ${face.value}, ${size.value}px, ${warm.value?'warm':'white'} paper.`}
function reset(){face.value='serif';size.value=18;warm.value=true;saved.value=''}
</script>
<template>
<main class="reader-shell">
<header><p class="eyebrow">A QUIETER READING SPACE</p><h1>Make room for the words.</h1><p>Adjust this short essay to your reading preferences. The sample changes as you move the controls.</p></header>
<div class="reader-layout"><section class="preferences" aria-labelledby="preferences-title"><h2 id="preferences-title">Reading settings</h2><p class="label" id="face-label">Typeface</p>
<IonSegment :value="face" @ionChange="face=$event.detail.value" aria-labelledby="face-label"><IonSegmentButton value="serif"><IonLabel>Serif</IonLabel></IonSegmentButton><IonSegmentButton value="sans"><IonLabel>Sans</IonLabel></IonSegmentButton></IonSegment>
<IonRange :value="size" @ionChange="size=Number($event.detail.value)" :min="16" :max="26" :step="1" :snaps="true" :ticks="true" :pin="true" label="Text size" label-placement="stacked" :pin-formatter="v=>`${v}px`"/><p class="scale"><span>16px</span><strong>{{size}}px</strong><span>26px</span></p>
<div class="paper-toggle"><IonToggle :checked="warm" @ionChange="warm=$event.detail.checked" justify="space-between">Warm paper</IonToggle><p>Soft ivory or a white page. The controls keep their own contrast.</p></div>
<IonButton expand="block" @click="save" :disabled="!!saved">Save preferences</IonButton><IonButton expand="block" fill="clear" @click="reset">Restore defaults</IonButton><p class="save-result" role="status">{{saved||'Preferences apply to this preview only.'}}</p></section>
<article class="reading-paper" :class="{warm}" :style="{fontFamily:family,fontSize:size+'px'}"><div class="paper-art" aria-hidden="true"><span></span><i></i><b></b></div><p class="article-kicker">FIELD NOTES · 03</p><h2>The useful pause</h2><p>There is a small garden between the library and the river. Its benches face away from the busiest path, toward a row of young trees.</p><p>On an ordinary afternoon, the place asks very little. You can read a paragraph twice, let a conversation settle, or watch the shadow of a leaf move across the page.</p><p>Good reading spaces leave that choice with the reader. A comfortable line, a familiar letterform, and a little breathing room can make a page easier to return to.</p><footer><IonChip outline>Original sample essay</IonChip><span>{{size}}px · {{face==='serif'?'Georgia':'System sans'}} · 1.65 line height</span></footer></article></div>
</main>
</template>

Code-Referenz

  • Der Bereich übernimmt Änderungen über ionChange; e.detail.value wird in eine Zahl umgewandelt.
  • Jede Änderung einer Einstellung löscht die gespeicherte Momentaufnahme.
  • Das Speichern erfolgt im lokalen reaktiven Zustand, nicht im Gerätespeicher und nicht über eine Serveranfrage.

Vollständiges originales Layout-Stylesheet

Einbettung mit inhaltsabhängiger Höhe, ein schmales gestapeltes Layout und vom Leser gewählte Typografie, ohne auf die Shadow Roots der Komponenten zuzugreifen.

css
html,body,#app{height:auto;min-height:0;margin:0}*{box-sizing:border-box}body{font-family:system-ui,sans-serif;color:#24362e;background:#f2f5f3}.reader-shell{max-width:1120px;margin:auto;padding:32px}.eyebrow{font-size:11px;letter-spacing:.14em;font-weight:700;color:#52695c}h1{font-size:34px;line-height:1.15;max-width:660px;margin:12px 0}header>p:last-child{font-size:15px;line-height:1.6;max-width:660px;color:#56675e}.reader-layout{display:grid;grid-template-columns:300px minmax(0,1fr);gap:24px;margin-top:28px}.preferences{background:white;border:1px solid #dbe3de;border-radius:16px;padding:22px;align-self:start;min-width:0}.preferences h2{font-size:19px;margin:0 0 22px}.label{font-size:14px;font-weight:600;margin-bottom:10px}ion-segment{margin-bottom:20px}ion-range{padding:12px 0 0;--bar-height:4px}.scale{display:flex;justify-content:space-between;font-size:12px;color:#52695c;margin:0 0 24px}.paper-toggle{border-top:1px solid #e4e9e6;padding-top:20px;margin-bottom:20px}.paper-toggle ion-toggle{width:100%;font-size:14px}.paper-toggle p{font-size:12px;line-height:1.6;color:#5a6b61}.save-result{font-size:12px;line-height:1.6;color:#46614f;min-height:38px}.reading-paper{background:white;border:1px solid #dce3dd;border-radius:16px;padding:28px;line-height:1.65;min-width:0;overflow-wrap:anywhere;transition:background .2s}.reading-paper.warm{background:#fff9eb}.reading-paper h2{font-size:1.9em;line-height:1.15;margin:14px 0 24px;font-weight:400}.reading-paper p{margin:0 0 1.2em}.article-kicker{font-family:system-ui,sans-serif;font-size:10px;letter-spacing:.15em}.paper-art{height:112px;background:#dce8d9;border-radius:8px;position:relative;overflow:hidden;margin-bottom:24px}.paper-art span{position:absolute;width:150px;height:150px;background:#a4baa2;border-radius:50%;right:15%;top:35px}.paper-art i{position:absolute;width:130px;height:70px;background:#f3e0a8;border-radius:50% 50% 0 0;right:25%;top:48px}.paper-art b{position:absolute;width:60px;height:130px;transform:rotate(24deg);background:#64816b;left:15%;top:38px;border-radius:50% 50% 0 0}.reading-paper footer{font:11px/1.6 system-ui,sans-serif;border-top:1px solid #deded3;padding-top:18px;display:flex;gap:12px;flex-wrap:wrap;align-items:center}.reading-paper ion-chip{font-size:11px;margin:0}@media(max-width:760px){.reader-shell{padding:20px}.reader-layout{grid-template-columns:minmax(0,1fr)}h1{font-size:29px}}@media(max-width:360px){.reader-shell{padding:14px}.preferences,.reading-paper{padding:16px}.reader-layout{gap:18px}.reading-paper h2{font-size:1.6em}}

Code-Referenz

  • Der Bereich verwendet die dokumentierte benutzerdefinierte CSS-Eigenschaft --bar-height.
  • Sämtliche Illustrationen im Text sind eigens erstellt CSS und als dekorativ gekennzeichnet.
04

Ionic Framework-Designsystem: Agent-Einrichtung

Ausgangspunkt für die Implementierung

Ionic Vue/Core 9.0.6 verifiziert. Die vollständige SFC und das Stylesheet stehen oben; vue-router ist als Integrationsabhängigkeit installiert, obwohl die Vorschau keine Seiten mit Routing enthält.

javascript
// Start with: npm create vite@latest ionic-reader -- --template vue
// cd ionic-reader && npm install
// npm install @ionic/[email protected] @ionic/[email protected] vue-router@4
// Save the complete examples as src/App.vue and src/style.css.
// src/main.js:
import {createApp} from 'vue';
import {IonicVue} from '@ionic/vue';
import '@ionic/vue/css/core.css';
import './style.css';
import App from './App.vue';
createApp(App).use(IonicVue, {mode:'ios'}).mount('#app');
// The Vite index.html must contain:
// <div id="app"></div><script type="module" src="/src/main.js"></script>
// Run: npm run dev

Ein Prompt für dein Projekt

Agenten-Prompt
Verwenden Sie Ionic Vue/Core 9.0.6 im expliziten iOS-Modus, um das bereitgestellte Beispiel für Leseeinstellungen umzusetzen. Verbinden Sie das native Segment für die Schriftauswahl, Range für die Textgröße, Toggle für die Papierdarstellung und die Button-Aktionen mit den tatsächlichen Artikelstilen. Behalten Sie den Bereich von 16–26px bei und übernehmen Sie Änderungen in die lokal gespeicherte Momentaufnahme der Einstellungen. Richten Sie IonicVue ein und binden Sie die erforderliche CSS- sowie die vue-router-Peer-Abhängigkeit ein. Behalten Sie das Layout mit inhaltsabhängiger Höhe bei, statt innerhalb der Einbettung eine Vollbildhülle hinzuzufügen. Es werden keine Prüfdaten hochgeladen und keine Änderungen an entfernten Konten vorgenommen.
05

Ionic Framework-Designsystem: Quellen und Geltungsbereich

Ionic Vue/Core 9.0.6 im iOS-Modus. Originalessay, Illustrationen, Leseschriftgrößen und Farben für warmes Papier. Die Speicherfunktion verwendet lokalen reaktiven Zustand und bleibt nach einem Neuladen nicht erhalten. Dieses eingebettete Komponentenbeispiel ist keine vollständige Ionic-App mit Routing oder nativer Geräteintegration.