AppShell

机の上に白いシートを置く、アプリの基本の画面構成です。ヘッダーと作業面を画面の中央に揃えます。

既定の幅(default)

取引先

取引のある会社と、担当者・進行中の案件を管理します。

取引先の一覧
コード取引先担当進行中の案件更新日
C-0012株式会社みなと製作所田中 遥39月25日
C-0031ひかり書房佐藤 健19月24日
C-0047合同会社あおば農園森 美咲09月22日
つむぐ商会 · 顧客管理

上の階層を背後に重ねる(trail)

展示会の什器の見積もり

案件 · 担当 田中 遥 · 9月30日まで

やること

2

見積書の数量を確かめ、来週の打ち合わせまでに送ります。

先頭側の列を置く(aside)

すべての取引先

128件の取引先

取引先の一覧
コード取引先担当進行中の案件更新日
C-0012株式会社みなと製作所田中 遥39月25日
C-0031ひかり書房佐藤 健19月24日
C-0047合同会社あおば農園森 美咲09月22日

入力が中心の画面(compact)

設定

会社の名前と通知を変えます。

横に広い画面(wide)

案件の進み具合

見込み1

No. 21

展示会の什器の見積もり

項目はありません

提案中1

No. 18

秋のカタログの印刷

項目はありません

受注1

No. 11

店舗の看板の交換

項目はありません

使いどころ

  • アプリの各画面に共通する画面構成として、ヘッダー(アプリの名前・主な移動先・検索)と中央のシート(作業面)を置く時に使います。
  • 画面の幅いっぱいには広げず、ヘッダー・先頭側の列・作業面を同じ幅の中に収めて中央に揃えます。画面の端に固定するサイドバーは持ちません。
  • 上の階層はtrailの背後に重ねたシートで、分類ごとの移動先や最近見た項目はasideの列で示します。作業面に付属する開閉式の補助パネルはwings(Wing)で扱います。
  • AppShellを使わない画面で作業面だけを置く時はSurfaceを使います。

使い方

homeにアプリの名前やロゴのリンク、navigationに主な移動先、commandsに検索やCommandMenuを渡します。ヘッダーは背景を持たず、机の地の上にそのまま並びます。アプリの名前は20pxの太字の濃い灰色で、名前と移動先の間に1pxの縦の線を引きます。移動先は13pxの灰色の文字で、navigationの今いる項目はcurrentにすると、面や下線を付けずに黒い太字で示し、aria-current="page"を付けます。

accountはヘッダーの上の行の末尾側に、11pxの灰色の文字で置きます。利用者の名前・アカウントの設定・ログアウトへのリンクなどを並べます。

childrenは中央のシートに置きます。シートの幅の上限はsizeで選びます。defaultは--rx-page(60rem、960px)、compactは本文の行の長さ(--rx-measure)に左右の余白を足した46rem、wideは90remです。ほかの幅が必要な時は、ルートのstyleで--rx-pageを上書きします。Board・Table・Grid・Calendarは、シートの左右の余白の分だけ外側に広がり、シートの端までスクロールします。

trailに上の階層を上から順に渡すと、シートの背後に淡い灰色(#f9f9f9、1px #e5e5e5 の枠、影なし)のシートを重ねます。背後のシートは手前のシートと同じ幅で、一段ごとに先頭側(左)と上へずれ(先頭側へは21pxずつ)、手前のシートの後ろを下端まで続きます。上の帯に18pxの太字の見出しを、2pxの下線を引いた上の階層へのリンクとして置き、先頭側(左)には細い帯が見えます。今のページのシートは、段の数だけの帯を空けて一番手前に置きます。

asideを渡すと、シートの先頭側に14.5rem(232px)の列を置きます。Highriseの左の列と同じく、列はシートの外の机の上に間を空けずに置き、列とシートを合わせて中央に揃えます。列の文字は13pxで、シートの縁から20px離します。列に置いたNavigationの行の面だけは、シートの縁まで伸ばします。幅が52rem未満ではシートの上へ移ります。

footerはシートの下に20px空けて、11pxの灰色の文字で置きます。中のリンクも同じ灰色で、下線を引きます。

AppShellの幅が45rem未満では、ヘッダーを「名前と検索」「主な移動先」の二段にし、シートの外側と内側の余白を詰めます。

wingsにstart・endを渡すと、シートをWingで包み、左右に開閉できる補助パネルを付けます。開閉の状態を保存する時はstorageKey・savedStateも渡し、WingControllerをwingとして登録します(詳しくはWingのページ)。

AppShell自身はcontrollerを使わず、JavaScriptなしでも同じ配置で表示します。

アクセシビリティ

  • ヘッダーはheaderで、navigationはaria-labelを付けたnavに置きます。読み上げ名はnavigationLabelで変えられ、省略すると「アプリの移動」です。
  • trailはaria-label="上の階層"のnavの中のolです。
  • シートはdivで、mainを持ちません。画面の本文はchildrenの中で利用側がmainで包みます。
  • home・account・commandsに文字のないリンクや操作を置く時は、読み上げ名を利用側で付けます。

API

AppShell

机の上に白いシートを置く画面構成。ヘッダーにアプリの名前・主な移動先・検索を並べ、その下の中央に作業面を置く。 trailは上の階層を作業面の背後に重ねたシートで示し、asideは作業面の先頭側に移動先の列を置く。

AppShellのprops
名前型既定値説明
homeChildヘッダーの先頭側に置く、アプリの名前やロゴとホームへのリンク。省略すると枠ごと出さない。
navigationreadonly NavigationItem[]ヘッダーでhomeの後に並べる、アプリの主な移動先。今いる項目はcurrentにする。
navigationLabelstring"アプリの移動"navigationのnavの読み上げ名。省略すると「アプリの移動」。
commandsChildヘッダーの末尾側に置く、検索やCommandMenu。省略すると枠ごと出さない。
accountChildヘッダーの上の行の末尾側に小さく置く、アカウントやログアウトへのリンク。省略すると行ごと出さない。
asideChild作業面の先頭側に置く列。Highriseのように、分類ごとの移動先や最近見た項目を置く。作業面の外に置き、列と作業面を合わせて画面の中央に揃える。狭い画面では作業面の上へ移る。
trailreadonly AppShellTrailItem[]作業面の背後に重ねるシート。上の階層から順に並べる。各シートの見出しは上の階層へのリンクになり、今のページの作業面はその手前に置く。
footerChild作業面の下に置く、小さな補足のリンクなど。省略すると出さない。
wingsPick<WingProps, "start" | "end" | "storageKey" | "savedState">作業面の左右に付ける補助パネル。Wingのstart・end・storageKey・savedStateと同じ値を渡す。省略するとWingを使わず、作業面だけを置く。
size"compact" | "default" | "wide""default"作業面の幅の上限。compactは46rem(本文の行の長さ--rx-measureに左右の余白を足した幅)、defaultは60rem(--rx-page)、wideは90rem。設定画面など入力が中心の画面はcompact、Boardや年の予定など横に広い画面はwideにする。
childrenChild中央のシートに置く、画面の中身。

ほかに、<div>へ標準のHTML属性を渡せます。

登録するcontroller:wing(WingController)

読み込むCSS:layers.css、reset.css、tokens.css、base.css、layout.css、components/app-shell.css、components/wing.css、components/button.css、components/overlay.css、components/icon.css

NavigationItem

NavigationItem
名前型既定値説明
label必須string項目の名前。
href必須string移動先のURL。現在地の項目もリンクのまま出す。
currentboolean今いる項目。aria-current="page"を付け、見た目でも現在地として示す。
countnumber名前の後に出す件数。0も表示し、省略すると出さない。
iconChild名前の前のアイコン(Iconなど)。

AppShellTrailItem

作業面の背後に重ねる、上の階層のページ。

AppShellTrailItem
名前型既定値説明
label必須string上の階層のページの名前。背後のシートの見出しとして出す。
href必須string上の階層のページのURL。

WingProps

Wingのpropsと同じです。

コード

HTML
Hono JSX