世界でもっともiOS26を再現したCSSライブラリをリリース!
AppleがiOS26を発表して以降、Liquid Effectが注目を集めていますが、実はiOS26では他にも多くのデザイン変更が行われています。デバイスネイティブな使い心地をユーザに提供するため、iOS26の体験を踏襲することは非常に重要です。
そこで、WebでiOS26デザインをつくるためのCSSライブラリをリリースしました。最新のIonic Frameworkに対応しており、ダークモードもサポートしています!
URL | |
---|---|
デモ | https://ionic-theme-ios26.netlify.app/ |
レポジトリ | https://github.com/rdlabo-team/ionic-theme-ios26 |
% npm install @rdlabo/ionic-theme-ios26
ユーザには、ブラウザでiOS26の体験をしてもらうだけでなく、Capacitorを使ってWebアプリをモバイルアプリにしてリリースすることも可能です!
iOS18とiOS26の比較
iOS26では、Liquid Glassの採用以外にも多くのデザイン変更が行われました。
セーフエリア
最も目を引くのは、セーフエリアの扱い方の変化です。iOS18では、セーフエリアは空白で埋めるものだったのに対し、iOS26ではエッジ効果を使いながら、全画面をユーザに提供するようになりました。
左がiOS18、右がiOS26の画面です。
フローティングタブ
それに連動して、タブのデザインも大きく変わりました。横幅いっぱいをカバーするデザインから、フローティングスタイルに変更されています。また、今までAndroidのみで正式採用されていたFABボタンが、iOSでも採用されたのも特徴的です。
要素の丸み
さらに、シート、リスト項目、ボタン、セグメント化されたコントロールなど、ほとんどのコンポーネントと要素がより丸みを帯びるようになりました。丸みを帯びることで、よりモダンな外観を実現しています。また、リスト間の空白がわずかに大きくなったことも特徴です。
ナビゲーションバーのボタン
ナビゲーションバーのボタンも、アイコンのみのボタンに置き換えられました。ラベルつきアイコンも使用可能ですが、アイコンのみの方が好まれる傾向にあります。アイコンボタンは個別に利用することもできますが、グループ化することも可能です。
アラート
アラートのデザインも大きく変わりました。より丸みを帯びた一方で、テキストが左揃えとなっています。特に長い文章の場合、可読性が向上したと感じられます。全体的に丸みを帯びて、より広々とデバイスを使えるようになりました。
Liquid Effectが大きな注目を浴びましたが、このようにそれ以外でも大きくデザイン変更が行われています。
モバイルUIを再現するIonic Framework
Ionic Frameworkは、Web技術だけを使って、モバイルUIを再現するためのUIフレームワークです。モバイルUIは身近な存在であるにも関わらず、Web技術で再現するのは非常に面倒な作業です。例えば、プッシュ遷移やシートモーダル、Large Titleなど、ネイティブアプリで当たり前のように使われている機能をWebで実現するのは困難を極めます。
しかし、Ionic Frameworkでは、これらすべてを指定の書き方(Web Componentsの利用)をするだけで実現してくれます。身近なアプリでは、「三井住友銀行」や「iAEON」、「みんなの銀行」などで採用されています。iOS18、Material Design2までレベルの高い再現度を持っています。
ただ、iOSもAndroidも、それ以降、デザインの破壊的変更を行いました。iOSやAndroidのネイティブアプリ開発では、設定ファイルに利用するデザインを記述したり、インポートするデザインライブラリを切り替えることで既存ユーザのデザインを確保しています。
一方で、多くのIonicユーザは、Ionicの提供するデザインをベースにオリジナルデザインにカスタマイズしています。IonicがiOS26やMaterial Design3にデザインを進化させると、それら既存ユーザのデザインを破壊することになってしまいます。
そこで近年は、モバイルデザインを再現できる基盤としてIonicのアップデートが行われています。当初、CSS変数でのデザイン拡張にとどまっていたのが、Shadow PartsをAPIとして提供するようになり、CSSで自由にデザインできるようになりました。つまり、今ではiOS26のデザインを作りたかったら、自分で作ることが可能なのです。
@rdlabo/ionic-theme-ios26
ということで、実際に作ってみました!随分前に、Ionicのプルリクエストを作った時、「角丸が数ピクセル違うよ!」とチームに指摘を受けたことを今でも覚えています。その経験を活かし、今回はスクリーンショットを透過して比較しながら作成しました。配色もRGBのパーセントレベルで比較しながら作ったため、かなり精度が高いです。
% npm install @rdlabo/ionic-theme-ios26
利用は簡単で、Ionicのインストール後、指定のCSSファイルをインポートするだけです。
@import '@rdlabo/ionic-theme-ios26/dist/css/default-variables.css';
@import '@rdlabo/ionic-theme-ios26/dist/css/ionic-theme-ios26.css';
/**
* このファイルはMDデザインに、iOS26における要素の変更による影響を排除するためのものです。
* 例えば、ion-buttons ion-button[fill=default] は通常実装されませんが、iOS26では必要になる場合があります。
* このファイルは、そのような影響を排除するために存在します。
*/
@import '@rdlabo/ionic-theme-ios26/dist/css/md-remove-ios-class-effect.css';
/*
* ダーもクードのサポートファイルです。Support Dark Mode
* Ionicのダークモードに沿って必要なファイルをインポートしてください。詳細はこちら: https://ionicframework.com/docs/theming/dark-mode
* use Always: @import '@rdlabo/ionic-theme-ios26/dist/css/ionic-theme-dark-always.css'
* use System: @import '@rdlabo/ionic-theme-ios26/dist/css/ionic-theme-dark-system.css'
* use CSS Class: @import '@rdlabo/ionic-theme-ios26/dist/css/ionic-theme-dark-class.css'
*/
ただ、Liquid Effectは現在技術的に実現が困難でした。SVG Filterを使ったものはChromiumでしか動作せず、WebGLを使ったものは計算が膨大で、実用アプリにはまだ厳しい状況です。
そこで、Liquid Effectに関しては、blur等を組み合わせてそれっぽい感じになるようにしています。
Webでそこまで再現してどうするの
これはもっともな疑問ですね。
Capacitorという、Webアセットを使ってモバイルアプリを作るライブラリがあります。それを使うと、ブラウザ、iOSアプリ、Androidアプリ、さらにがんばればデスクトップアプリとマルチプラットフォームで展開可能です。ブラウザで提供するだけでなく、iOSでもAndroidでも使えるようになります。
このテーマについて書かれた記事で「I built a PWA and published it in 3 app stores. Here's what I learned.」というものがあります。この記事のここの一文が私は大好きです。
「なぜアプリストアに出す必要があるの?PWAならWeb上に置いておけばいいじゃない」
答えは簡単、そこにユーザがいるからです。
ユーザは何度も何度も私に尋ねてきました。『Chavahは何処?アプリストアに見つからないよ?』彼らは、アプリはアプリストアにあるものだと認識しているので、当然のようにそう聞いてきます。
というのは現実です。
ユーザが必要とする環境で使えるようにしていきたいですね。
まとめ
iOS26の新デザインをWeb技術で再現する@rdlabo/ionic-theme-ios26
をリリースしました。このライブラリは、スクリーンショットを透過して比較しながら作成したため、非常に高い精度でiOS26のデザインを再現しています。
主な特徴:
- セーフエリアの扱い方の変更に対応
- フローティングスタイルのタブデザイン
- より丸みを帯びたコンポーネント
- アイコンのみのナビゲーションバーボタン
- 左揃えテキストのアラートデザイン
- ダークモードサポート
技術的な制約により、Liquid Effectは完全再現できませんでしたが、blur等を組み合わせて近い効果を実現しています。Capacitorと組み合わせることで、Webアプリをモバイルアプリとして展開することも可能です。ぜひ、アプリの世界をブラウザに留めず、iOS、Androidへの展開も進めてみてください。
それではまた。
Discussion