Interface multiplataforma e móvel · Novo recurso

Sistema de design Ionic Framework.

Uma interface nativa do Ionic para preferências de leitura, com funções de cor verificadas, geometria de controles deslizantes para iOS e Material, comportamento real de segmentos e interruptores e um artigo que se adapta às escolhas de fonte, tamanho e papel.

Guia OpenDesign9 capítulos25 entradas de referênciaGuia de aplicação original
01

Prévia da interface do sistema de design Ionic Framework

Troque a tipografia, altere o tamanho do texto pelo teclado, ative o papel em tom quente e salve o instantâneo das preferências locais.

Preferências de leituraAbrir exemplo completo
Ionic Vue/Core 9.0.6, Vue 3, modo iOS explícito. Componentes Web nativos incluídos localmente. · Referência de implementação
02

Referência de design do sistema de design Ionic Framework

Ionic Vue/Core 9.0.6 verificado. As cores principais vêm do core.css instalado. A demonstração seleciona explicitamente o modo iOS. A tipografia de leitura, as cores do papel e o espaçamento ao redor são escolhas originais da aplicação, não padrões do Ionic.

Papéis semânticos de cor padrão do tema claro

Fonte
Nome / RegraValor / ConfiguraçãoUso
--ion-color-primary#0054e9 Controles primários nativos.
--ion-color-primary-rgb0, 84, 233Canais RGB para cálculos baseados em opacidade.
--ion-color-primary-contrast#fffContraste do texto e dos ícones sobre a cor primária.
--ion-color-primary-shade#004acd Variante escurecida da cor primária.
--ion-color-primary-tint#1a65eb Variante clareada da cor primária.
--ion-color-secondary#0163aa Função secundária.
--ion-color-tertiary#6030ff Papel terciário.
--ion-color-success#2dd55b Função de sucesso.
--ion-color-warning#ffc409 Função de aviso.
--ion-color-danger#c5000f Função de perigo.

Geometria nativa do controle de intervalo por modo

Fonte
Nome / RegraValor / ConfiguraçãoUso
iOS --bar-height4pxPadrão compilado do intervalo no iOS.
iOS --knob-size26pxTamanho compilado do controle deslizante no iOS.
MD --bar-height2pxPadrão compilado do modo Material Design.
MD --knob-size18pxTamanho compilado do controle deslizante no modo Material Design.
Application min / max / step16 / 26 / 1Tamanho inteiro da fonte de leitura; propriedades reais do intervalo.
snaps / ticks / pintrue / true / trueEtapas visíveis e indicação formatada do tamanho.

Escalas originais de leitura e layout

Fonte
Nome / RegraValor / ConfiguraçãoUso
Reading fontGeorgia, serif OR system-ui, sans-serifControlado pelo segmento nativo; fontes já disponíveis no dispositivo.
Reading size16–26px; default 18pxAplicado diretamente ao artigo.
Reading line-height1.65Largura de texto confortável original.
Article heading1.9em / 1.15; 1.6em below 360pxEscala conforme o tamanho do texto principal escolhido pelo leitor.
Control/body fontsystem-ui, sans-serifEscolha explícita de fonte da aplicação.
Spacing10 / 12 / 14 / 16 / 20 / 22 / 24 / 28 / 32pxValores concretos da folha de estilos original, não uma escala atribuída ao Ionic.
Layout300px settings + flexible article; stack at 760pxAmbas as colunas usam min-width:0.
Paper roles#fff9eb warm; #ffffff white; #24362e inkCores originais do conteúdo, separadas dos papéis dos controles nativos.
Card radius16pxGeometria original dos painéis ao redor.
03

Guia completo do sistema de design Ionic Framework

Um guia prático para escolher, aplicar e avaliar este sistema em uma interface real.

DESIGN-ionic.md

Orientações completas, um ponto de partida para a implementação e links para o código-fonte.

Baixar o guia

Sistema de design Ionic Framework: escolha o modo de renderização de forma intencional

Escolha o modo de renderização de forma intencional

O Ionic disponibiliza componentes Web por meio de integrações com frameworks. Este exemplo usa Ionic Vue 9.0.6 e define mode como ios na configuração do IonicVue. Assim, o segmento, a chave seletora, o controle de intervalo e os botões recebem um tratamento visual de plataforma coerente, independentemente do navegador de desktop usado para inspecionar a página. O modo é uma decisão de renderização dos componentes; ele não transforma a página em um aplicativo móvel nativo.

Com base neste guia de OpenDesign

O exemplo usa intencionalmente um elemento main comum, em vez de uma estrutura em tela cheia com IonApp/IonContent. Isso permite que uma demonstração de componentes se ajuste ao conteúdo dentro de uma página de recursos incorporada. Um aplicativo Ionic real com roteamento deve seguir a estrutura de páginas e roteador do framework, incluindo IonPage quando necessário para as transições.

Consulte a especificação de apoio

Sistema de design Ionic Framework: uma cor do Ionic é uma família de variáveis relacionadas

Uma cor do Ionic é uma família de variáveis relacionadas

A folha de estilos principal instalada define primary como #0054e9, com canais RGB, contraste, tonalidades mais escuras e mais claras separados. Os componentes podem usar esses valores relacionados em diferentes estados. Substituir apenas o valor hexadecimal base pode deixar os outros estados inconsistentes; uma cor de marca personalizada deve definir toda a sua família.

Este exemplo mantém a cor primary padrão nos controles nativos. O tom de papel quente é uma superfície separada da aplicação, em #fff9eb, e o texto do artigo permanece #24362e. Mudar a página para branco altera apenas a superfície de leitura. Isso não modifica silenciosamente a paleta dos controles nem afirma implementar toda a paleta escura do Ionic.

Consulte a especificação de apoio

Sistema de design Ionic Framework: torne observável a escolha de tipografia do leitor

Torne observável a escolha de tipografia do leitor

O segmento alterna a tipografia do artigo entre Georgia e system-ui. Os controles continuam usando system-ui para que a preferência afete o conteúdo de leitura pretendido, sem alterar inesperadamente os rótulos e as dimensões dos controles. Nenhuma fonte externa é solicitada; o exemplo usa as pilhas de fontes locais correspondentes.

O tamanho do texto é um número inteiro entre 16 e 26 pixels. O título do artigo é proporcional a esse tamanho, e a altura da linha permanece em 1.65. Em larguras menores que 360px, a proporção do título diminui para 1.6em, mantendo legível o maior tamanho em uma coluna incorporada estreita. Esses são valores próprios da aplicação, claramente distintos dos padrões dos componentes do Ionic.

Consulte a especificação de apoio

Sistema de design Ionic Framework: um segmento tem seleção controlada e semântica nativa

Um segmento tem seleção controlada e semântica nativa

IonSegment recebe o valor atual de face e dois filhos IonSegmentButton. O evento ionChange atualiza o modelo usando event.detail.value. Cada botão tem um valor estável e distinto, serif ou sans, e o rótulo visível explica a escolha. Um parágrafo identifica o controle completo por meio de aria-labelledby.

A árvore de acessibilidade real expõe uma lista de abas (tablist) com abas selecionadas, e não um grupo de botões comuns. Por isso, o teste de interação local seleciona a aba Sans nativa e verifica se a fonte de leitura muda. Apenas estilizar dois botões para que pareçam um segmento não garante o mesmo comportamento de seleção.

Consulte a especificação de apoio

Sistema de design Ionic Framework: use eventos e restrições de intervalo como um único contrato

Use eventos e restrições de intervalo como um único contrato

IonRange define min, max e step explicitamente; usar o intervalo padrão de zero a cem não permitiria representar um tamanho de texto útil. O ajuste aos incrementos e as marcações deixam visíveis os valores disponíveis, e o formatador do indicador acrescenta px ao valor exibido durante a interação. O rótulo permanente do tamanho abaixo do controle continua legível depois que o usuário solta o controle deslizante.

O manipulador usa ionChange e converte o valor em número. Isso é apropriado para um único controle deslizante; um intervalo com dois controles retornaria outro formato de valor e exigiria um tratamento diferente. No modo iOS, o intervalo compilado usa um controle deslizante de 26 pixels e uma barra de 4 pixels; no modo Material, usa 18 e 2 pixels. Essas diferenças são registradas, em vez de serem achatadas em um token universal do Ionic inventado.

  1. Selecione o controle deslizante Tamanho do texto e pressione a seta para a direita oito vezes para chegar a 26px.
  2. Selecione Sans e desative Papel quente.
  3. Salve as preferências e confira a captura exata de tipografia, tamanho e papel.

Consulte a especificação de apoio

Sistema de design Ionic Framework: uma escolha booleana de papel deve atualizar a superfície imediatamente

Uma opção booleana de papel deve atualizar a interface imediatamente

IonToggle recebe checked do modelo warm. O evento fornece detail.checked, atribuído diretamente a esse estado booleano. O rótulo visível Papel quente pertence ao controle nativo, e a explicação ao lado informa que ele altera a superfície do artigo.

A classe warm altera o fundo do artigo sem remover sua borda nem modificar o texto. Assim, a comparação continua significativa. Isso também evita confundir uma preferência de tonalidade do papel com uma configuração de claro/escuro da plataforma, que exigiria coordenar muito mais variáveis de superfície e texto do Ionic.

Consulte a especificação de apoio

Sistema de design Ionic Framework: separe as preferências aplicadas de uma captura salva

Separe as preferências aplicadas de um instantâneo salvo

Cada configuração é aplicada imediatamente ao artigo. Salvar preferências registra uma captura legível no estado reativo local e é desativado enquanto essa captura estiver atualizada. Um observador dos três modelos limpa a mensagem após qualquer alteração, evitando que uma confirmação antiga descreva uma nova combinação.

Restaurar padrões define serif, 18 pixels e papel quente, e depois limpa a mensagem de confirmação salva. O status informa explicitamente que as preferências se aplicam apenas a esta prévia. A ação não usa persistência em localStorage, configuração de conta nem plugin nativo de preferências; ao recarregar, os valores padrão são restaurados.

Consulte a especificação de apoio

Sistema de design Ionic Framework: preserve os controles nativos com Shadow DOM ao estilizar a composição

Preserve os controles nativos com Shadow DOM ao estilizar a composição

O controle deslizante tem o rótulo visível Tamanho do texto, o controle de alternância inclui seu próprio rótulo de texto e o segmento é identificado como Tipografia. A ilustração original tem aria-hidden. O feedback ao salvar usa role=status, enquanto o artigo permanece um elemento semântico comum HTML, para que seu título e seus parágrafos sigam a navegação habitual do documento pelo leitor.

Os componentes do Ionic encapsulam a marcação interna no Shadow DOM. O exemplo usa propriedades públicas, eventos e propriedades personalizadas documentadas de CSS, em vez de consultar classes internas privadas. A página ao redor usa altura de conteúdo e larguras mínimas iguais a zero; testá-la em 280px ajuda a detectar problemas de largura incorporada que podem passar despercebidos em uma captura de tela de celular independente.

  • Mantenha as relações entre rótulos e os componentes nativos.
  • Use propriedades e eventos públicos em vez de alterar os elementos internos do Shadow DOM.
  • Verifique em conjunto as alterações de tamanho pelo teclado e o artigo atualizado ao vivo.

Consulte a especificação de apoio

Sistema de design Ionic Framework: instale a integração Vue e inclua CSS principal

Instale a integração Vue e inclua o Core CSS

O arquivo de entrada completo registra IonicVue e importa @ionic/vue/css/core.css antes da folha de estilos original. O pacote Vue instalado também resolve vue-router; por isso, o comando de dependências reproduzível inclui vue-router, embora este exemplo incorporado não configure navegação. A ausência dessa dependência peer fez a resolução do pacote local falhar.

Os dois exemplos completos incluem App.vue e style.css. Um projeto Vue padrão do Vite compila o SFC e suas importações de componentes nativos. A prévia independente do recurso reúne localmente o JavaScript e o CSS resultantes, incluindo as implementações dos componentes, para que seja possível alterar os controles sem fazer uma solicitação a um CDN externo.

Consulte a especificação de apoio

Exemplos de componentes do sistema de design Ionic Framework

SFC completo de preferências de leitura

IonSegment, IonRange, IonToggle e IonButton nativos controlam um breve ensaio 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>

Referência de código

  • O intervalo é confirmado por ionChange; e.detail.value é convertido em número.
  • Alterar qualquer preferência limpa o registro salvo.
  • O salvamento é um estado reativo local, não usa o armazenamento do dispositivo nem faz uma solicitação ao servidor.

Folha de estilos completa do layout original

Composição com altura definida pelo conteúdo, layout estreito empilhado e tipografia escolhida pelo leitor, sem acessar as raízes shadow dos componentes.

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

Referência de código

  • O intervalo usa a propriedade personalizada documentada --bar-height.
  • Todo o material gráfico do texto é original CSS e está marcado como decorativo.
04

Configuração do agente do sistema de design Ionic Framework

Ponto de partida para implementação

Ionic Vue/Core 9.0.6 verificado. O SFC completo e a folha de estilos estão acima; vue-router está instalado como dependência de integração, embora a prévia não tenha páginas com rotas.

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

Um prompt para seu projeto

Prompt para agente de IA
Use Ionic Vue/Core 9.0.6 no modo iOS explícito para criar o exemplo de preferências de leitura fornecido. Mantenha o Segment nativo para escolher a fonte, o Range para ajustar o tamanho do texto, o Toggle para a aparência do papel e as ações de Button conectadas aos estilos reais do artigo. Mantenha o intervalo entre 16–26px e reflita as alterações no registro local de preferências salvas. Inclua a configuração de IonicVue, a dependência CSS obrigatória e a dependência peer vue-router; mantenha a composição com altura definida pelo conteúdo, sem adicionar uma estrutura de tela cheia dentro da incorporação. Não há uploads de inspeção nem alterações remotas na conta.
05

Fontes e escopo do sistema de design Ionic Framework

Ionic Vue/Core 9.0.6, modo iOS. Ensaio, material gráfico, escala de leitura e cores de papel em tons quentes originais. O salvamento é um estado reativo local e não persiste após recarregar. Este exemplo incorporado de componente não é um aplicativo Ionic completo com rotas ou para dispositivos nativos.