Interface multiplateforme et mobile · Nouvelle ressource

Système de design Ionic Framework.

Une interface native Ionic de préférences de lecture, avec des rôles de couleur vérifiés, la géométrie des curseurs iOS et Material, le comportement réel des segments et des interrupteurs, ainsi qu’un article qui s’adapte aux choix de police, de taille et de papier.

Guide OpenDesign9 chapitres25 entrées de référenceGuide de l’application d’origine
01

Ionic Framework Aperçu de l’interface du système de design

Changez de police, modifiez la taille du texte au clavier, activez le papier chaud et enregistrez l’instantané des préférences locales.

Préférences de lectureOuvrir l’exemple complet
Ionic Vue/Core 9.0.6, Vue 3, mode iOS explicite. Composants Web natifs intégrés localement. · Référence de mise en œuvre
02

Ionic Framework Référence de conception du système de design

Ionic Vue/Core 9.0.6 vérifié. Les couleurs Core proviennent du fichier core.css installé. La démo sélectionne explicitement le mode iOS. Les choix de typographie, de couleurs du papier et d’espacement environnant sont propres à l’application, et non des valeurs par défaut d’Ionic.

Rôles de couleurs sémantiques clairs par défaut

Source
Nom / règleValeur / configurationUtilisation
--ion-color-primary#0054e9 Contrôles principaux natifs.
--ion-color-primary-rgb0, 84, 233Canaux RVB pour les calculs basés sur l’opacité.
--ion-color-primary-contrast#fffContraste du texte et des icônes sur la couleur principale.
--ion-color-primary-shade#004acd Variante assombrie de la couleur principale.
--ion-color-primary-tint#1a65eb Variante éclaircie de la couleur principale.
--ion-color-secondary#0163aa Rôle secondaire.
--ion-color-tertiary#6030ff Rôle tertiaire.
--ion-color-success#2dd55b Rôle de réussite.
--ion-color-warning#ffc409 Rôle d’avertissement.
--ion-color-danger#c5000f Rôle de danger.

Géométrie native du curseur selon le mode

Source
Nom / règleValeur / configurationUtilisation
iOS --bar-height4pxValeur par défaut du curseur iOS compilé.
iOS --knob-size26pxTaille du curseur iOS compilé.
MD --bar-height2pxValeur par défaut du mode Material Design compilé.
MD --knob-size18pxTaille du curseur Material Design compilé.
Application min / max / step16 / 26 / 1Taille de police entière affichée ; propriétés réelles du curseur.
snaps / ticks / pintrue / true / truePaliers visibles et indication de la taille mise en forme.

Échelles initiales de lecture et de mise en page

Source
Nom / règleValeur / configurationUtilisation
Reading fontGeorgia, serif OR system-ui, sans-serifGéré par le segment natif ; les polices sont déjà installées sur l’appareil.
Reading size16–26px; default 18pxAppliqué directement à l’article.
Reading line-height1.65Largeur de lecture initiale, confortable.
Article heading1.9em / 1.15; 1.6em below 360pxÉvolue avec la taille du texte choisie par le lecteur.
Control/body fontsystem-ui, sans-serifChoix explicite d’une police pour l’application.
Spacing10 / 12 / 14 / 16 / 20 / 22 / 24 / 28 / 32pxValeurs concrètes de la feuille de style d’origine, et non une échelle Ionic revendiquée.
Layout300px settings + flexible article; stack at 760pxLes deux colonnes utilisent min-width:0.
Paper roles#fff9eb warm; #ffffff white; #24362e inkCouleurs de contenu d’origine, distinctes des rôles des contrôles natifs.
Card radius16pxGéométrie d’origine du panneau environnant.
03

Ionic Framework Guide complet du système de design

Un guide pratique pour choisir, appliquer et évaluer ce système dans une interface réelle.

DESIGN-ionic.md

Des conseils complets, un point de départ pour la mise en œuvre et des liens vers les sources.

Télécharger le guide

Système de design Ionic Framework : choisir délibérément le mode de rendu

Choisissez délibérément le mode de rendu

Ionic expose des composants Web par l’intermédiaire d’intégrations de frameworks. Cet exemple utilise Ionic Vue 9.0.6 et définit le mode sur ios dans la configuration d’IonicVue. Le segment, le bouton à bascule, le curseur et les boutons adoptent ainsi un style cohérent avec la plateforme, quel que soit le navigateur de bureau utilisé pour inspecter la page. Le mode est un choix de rendu des composants ; il ne transforme pas la page en application mobile native.

Extrait de ce guide OpenDesign

L’exemple utilise délibérément un élément main standard plutôt qu’une structure plein écran IonApp/IonContent. Un exemple de composants peut ainsi adapter son contenu à une page de ressources intégrée. Une véritable application Ionic avec routage doit respecter la structure des pages et du routeur du framework, notamment utiliser IonPage lorsque les transitions l’exigent.

Consultez la spécification associée

Système de design Ionic Framework : une couleur Ionic est une famille de variables associées

Une couleur Ionic est une famille de variables associées

La feuille de style principale installée définit primary sur #0054e9, ainsi que des valeurs distinctes pour les canaux RVB, le contraste, la nuance et la teinte. Les composants peuvent utiliser ces valeurs associées selon les états. Remplacer uniquement le code hexadécimal de base peut rendre les autres états incohérents ; une couleur de marque personnalisée doit définir toute la famille.

Cet exemple conserve la couleur primary par défaut des contrôles natifs. Le papier chaud est une surface distincte de l’application, définie sur #fff9eb, et le texte de l’article reste en #24362e. Passer la page au blanc ne change que la surface de lecture. Cela ne modifie pas implicitement la palette des contrôles et ne prétend pas implémenter l’ensemble de la palette sombre d’Ionic.

Consultez la spécification associée

Système de design Ionic Framework : rendre visible le choix typographique du lecteur

Rendez observable le choix de police de l’utilisateur

Le segment permet de choisir entre Georgia et system-ui pour l’article. Les contrôles restent en system-ui afin que la préférence porte sur le contenu destiné à la lecture, sans modifier de façon inattendue les libellés ni les dimensions des contrôles. Aucune police externe n’est chargée ; l’exemple s’appuie sur les piles de polices locales correspondantes.

La taille du texte est un entier compris entre seize et vingt-six pixels. Le titre de l’article est proportionnel à cette taille et l’interligne reste à 1.65. Sous 360px de largeur, le rapport du titre passe à 1.6em : la taille maximale reste ainsi lisible dans une colonne intégrée étroite. Ces valeurs propres à l’application sont clairement distinctes des valeurs par défaut des composants Ionic.

Consultez la spécification associée

Système de design Ionic Framework : un segment offre une sélection contrôlée et une sémantique native

Un segment offre une sélection contrôlée et des sémantiques natives

IonSegment reçoit la valeur actuelle de face et deux éléments enfants IonSegmentButton. Son événement ionChange met à jour le modèle à partir de event.detail.value. Chaque bouton a une valeur stable distincte, serif ou sans, et son libellé visible explique le choix. Un paragraphe associe un libellé à l’ensemble du contrôle à l’aide de aria-labelledby.

Dans l’arborescence d’accessibilité réelle, le contrôle apparaît comme une tablist avec des onglets sélectionnés, et non comme un groupe de boutons ordinaires. Le test d’interaction local cible donc l’onglet natif Sans et vérifie que la police de lecture change. Donner simplement à deux boutons l’apparence d’un segment ne garantit pas le même comportement de sélection.

Consultez la spécification associée

Système de design Ionic Framework : considérer les événements et contraintes du curseur comme un contrat unique

Utilisez les événements et les contraintes de plage comme un seul contrat

IonRange définit explicitement min, max et step ; sa plage par défaut, de zéro à cent, ne permettrait pas de choisir une taille de texte adaptée à la lecture. L’accrochage aux paliers et les graduations montrent les incréments disponibles, et le formateur de l’indicateur ajoute px à la valeur affichée pendant l’interaction. Le libellé permanent de la taille, sous le contrôle, reste lisible une fois le curseur relâché.

Le gestionnaire utilise ionChange et convertit sa valeur en nombre. Cette approche convient à un curseur simple ; un curseur à deux poignées renverrait une valeur d’une autre forme et nécessiterait un traitement distinct. Le curseur iOS compilé utilise une poignée de vingt-six pixels et une barre de quatre pixels, tandis que le mode Material utilise respectivement dix-huit et deux pixels. Ces différences sont consignées au lieu d’être ramenées à un prétendu jeton Ionic universel.

  1. Placez le focus sur le curseur Taille du texte, puis appuyez huit fois sur la flèche droite pour atteindre 26px.
  2. Sélectionnez Sans et désactivez Papier chaud.
  3. Enregistrez les préférences, puis vérifiez la police, la taille et l’instantané du papier exacts.

Consultez la spécification associée

Système de design Ionic Framework : un choix booléen de papier doit mettre à jour immédiatement la surface

Un choix de papier booléen doit immédiatement actualiser la surface

IonToggle reçoit la valeur checked du modèle warm. Son événement fournit detail.checked, directement affecté à cet état booléen. Le libellé visible Papier chaud est associé au commutateur natif, et l’explication à proximité précise qu’il modifie la surface de l’article.

La classe warm modifie l’arrière-plan de l’article sans supprimer sa bordure ni changer le texte. La comparaison reste ainsi pertinente. Cela évite aussi de confondre une préférence de teinte du papier avec un réglage clair/sombre à l’échelle de la plateforme, qui nécessiterait de coordonner bien d’autres variables de surface et de texte Ionic.

Consultez la spécification associée

Système de design Ionic Framework : séparer les préférences appliquées de l’instantané enregistré

Séparez les préférences appliquées de l’instantané enregistré

Chaque réglage s’applique immédiatement à l’article. Enregistrer les préférences consigne un instantané lisible dans l’état réactif local et désactive le bouton tant que cet instantané est à jour. Un observateur des trois modèles efface le message à chaque changement, afin qu’une confirmation obsolète ne décrive pas une nouvelle combinaison.

Restaurer les valeurs par défaut rétablit la police avec empattements, la taille de dix-huit pixels et le papier chaud, puis efface le message de sauvegarde. Le statut précise explicitement que les préférences s’appliquent uniquement à cet aperçu. L’action ne s’appuie ni sur la persistance dans localStorage, ni sur un paramètre de compte, ni sur un plug-in de préférences natif ; un rechargement rétablit les valeurs par défaut.

Consultez la spécification associée

Système de design Ionic Framework : préserver les contrôles natifs du Shadow DOM tout en stylisant la composition

Préserver les contrôles natifs du Shadow DOM tout en stylisant la composition

Le curseur possède un libellé visible « Taille du texte », l’interrupteur comporte son propre libellé textuel et le segment est intitulé « Police ». L’illustration d’origine est masquée aux technologies d’assistance avec aria-hidden. Le retour de sauvegarde utilise role=status, tandis que l’article reste un HTML sémantique ordinaire afin que son titre et ses paragraphes s’inscrivent dans la navigation habituelle du lecteur.

Les composants Ionic encapsulent leur balisage interne dans le Shadow DOM. L’exemple utilise des propriétés publiques, des événements et des propriétés personnalisées CSS documentées au lieu de rechercher des classes internes privées. La page environnante utilise une hauteur adaptée au contenu et des largeurs minimales nulles ; la vérifier à 280px permet de détecter les problèmes de largeur dans un composant intégré qu’une simple capture d’écran de téléphone autonome peut laisser passer.

  • Conserver les associations de libellés sur les composants natifs.
  • Utiliser les propriétés et événements publics plutôt que modifier les éléments internes du Shadow DOM.
  • Vérifier conjointement les changements de taille au clavier et l’article dynamique.

Consultez la spécification associée

Système de design Ionic Framework : installer l’intégration Vue et inclure Core CSS

Installez l’intégration Vue et incluez Core CSS

Le point d’entrée complet enregistre IonicVue et importe @ionic/vue/css/core.css avant la feuille de style d’origine. Le paquet Vue installé résout également vue-router ; la commande de dépendances reproductible inclut donc vue-router, même si cet exemple intégré ne configure pas la navigation. L’omission de cette dépendance requise par les pairs empêchait la résolution du bundle local.

Les deux exemples complets fournissent App.vue et style.css. Un projet Vue standard créé avec Vite compile le SFC et ses imports de composants natifs. L’aperçu autonome des ressources regroupe localement le JavaScript et le CSS obtenus, y compris les implémentations des composants ; modifier les contrôles ne nécessite donc aucune requête à un CDN externe.

Consultez la spécification associée

Ionic Framework Exemples de composants du système de design

SFC complet des préférences de lecture

IonSegment, IonRange, IonToggle et IonButton natifs contrôlent un court essai original.

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>

Référence du code

  • La valeur est validée via ionChange ; e.detail.value est converti en nombre.
  • Toute modification d’une préférence efface l’instantané sauvegardé.
  • La sauvegarde repose sur un état réactif local, et non sur le stockage de l’appareil ou une requête au serveur.

Feuille de style complète de la mise en page d’origine

Intégration adaptée à la hauteur du contenu, mise en page étroite empilée et typographie choisie par le lecteur, sans accéder aux racines Shadow DOM des composants.

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}}

Référence du code

  • Le curseur utilise la propriété personnalisée documentée --bar-height.
  • Toutes les illustrations accompagnant le texte sont originales CSS et marquées comme décoratives.
04

Ionic Framework Configuration de l’agent du système de design

Point de départ de l’implémentation

Ionic Vue/Core 9.0.6 vérifié. Le SFC complet et la feuille de style figurent ci-dessus ; vue-router est installé comme dépendance d’intégration, bien que l’aperçu ne comporte aucune page avec routage.

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

Un prompt pour votre projet

Prompt pour l’agent IA
Utiliser Ionic Vue/Core 9.0.6 en mode iOS explicite pour créer l’exemple fourni de préférences de lecture. Relier le Segment natif au choix de la police, le Range à la taille du texte, le Toggle à l’apparence du papier et les actions du Button aux styles réels de l’article. Conserver la plage de 16–26px et refléter les modifications dans l’instantané local des préférences sauvegardées. Inclure la configuration IonicVue, la dépendance requise CSS et la dépendance requise par les pairs vue-router ; conserver une composition adaptée à la hauteur du contenu plutôt que d’ajouter une coquille plein écran dans le composant intégré. Aucune donnée d’inspection n’est téléversée et aucun compte distant n’est modifié.
05

Ionic Framework Sources et périmètre du système de design

Ionic Vue/Core 9.0.6, mode iOS. Essai, illustrations, échelle de lecture et couleurs de papier chaud d’origine. La sauvegarde repose sur un état réactif local et n’est pas conservée après rechargement. Cet exemple intégré de composant n’est pas une application Ionic complète avec routage ou destinée à un appareil natif.