LinkButton
View on GitHub: Copmonentリンクとして機能するボタン
Example#
Props#
Name | Type | Default | Description |
---|---|---|---|
block | boolean | false | 横幅を100%占有する |
children required | ReactNode | - | ボタンのラベルとして表示する内容 |
data-* optional | string | - | Custom data attributes |
fixedIcon optional | 'default' ReactElement 'ubie-iconsのアイコン名' | - | Fixedアイコン |
m optional | 'xxs' 'xs' 'sm' | - | 四方のマージンを一括で設定。Spacing Tokenのキーを指定 xxs=4px, xs=8px, sm=12px, md=16px, lg=24px, xl=40px, xxl=64px |
mb optional | 'xxs' 'xs' 'sm' | - | 下方向のマージン。Spacing Tokenのキーを指定 xxs=4px, xs=8px, sm=12px, md=16px, lg=24px, xl=40px, xxl=64px |
ml optional | 'xxs' 'xs' 'sm' | - | 左方向のマージン。Spacing Tokenのキーを指定 xxs=4px, xs=8px, sm=12px, md=16px, lg=24px, xl=40px, xxl=64px |
mr optional | 'xxs' 'xs' 'sm' | - | 右方向のマージン。Spacing Tokenのキーを指定 xxs=4px, xs=8px, sm=12px, md=16px, lg=24px, xl=40px, xxl=64px |
mt optional | 'xxs' 'xs' 'sm' | - | 上方向のマージン。Spacing Tokenのキーを指定 |
mx optional | 'xxs' 'xs' 'sm' | - | 水平方向のマージンを一括で設定。Spacing Tokenのキーを指定 xxs=4px, xs=8px, sm=12px, md=16px, lg=24px, xl=40px, xxl=64px |
my optional | 'xxs' 'xs' 'sm' | - | 垂直方向のマージンを一括で設定。Spacing Tokenのキーを指定 xxs=4px, xs=8px, sm=12px, md=16px, lg=24px, xl=40px, xxl=64px |
prefixIcon optional | default ReactElement IconName | - | 前方配置のアイコン |
render optional | ReactElement | - | レンダリングされる要素を変更。フレームワークのリンクコンポーネントなどを指定 |
size | 'large' 'medium' 'small' | 'large' | 種類 |
suffixIcon optional | 'default' ReactElement 'ubie-iconsのアイコン名' | - | 後方配置のアイコン |
variant | 'primary' 'secondary' 'accent' | 'primary' | ボタンの種類 |
whiteSpace | 'normal' 'nowrap' 'pre' | 'normal' | ラベルの折り返しを指定 |
Feature#
一般には、ボタンはアクションのトリガーとして使用されます。リンクとしても使用されますが、「何かのアクションへの入り口」として使用するのが適切です。
Usage#
Variant#
variant
propは機能や、画面内での情報のヒエラルキーを表現するために使用します。情報の優先度を踏まえ、強弱がつくように設計してください。すべてを強調すると、すべてが同じに見えます
primary
- 画面内でもっとも重要なアクションに使用します。可能な限り1画面につき1つの使用にとどめてくださいsecondary
- Primaryボタンに対して副次的なアクションを促すボタンとして扱います。背景が透過のため、背景色とテキストが同化しないよう注意してくださいaccent
-primary
ほど重要ではなく、secondary
よりも強調したい場合に使用します。利用の際は、まずはprimary
を使用できないかを検討します。alert
と混同しないよう注意してくださいalert
- 不可逆の操作やリスクのあるアクションに使用します。例えば「削除」や「退会」に使うと良いでしょうtext
- 控えめな強調度合いを持つボタンです。ボタン同士の差をつける場合、または重要ではないアクションに使用します。「閉じる」や「キャンセル」などに適用できますtextAlert
- alertの意味合いを持つtext
です。背景が透過のため、背景色とテキストが同化しないよう注意してくださいAuthXXX
- Socialログインに使用します
Icon#
icon
系の propにより、ボタンの前後にアイコンを配置可能です。ただし、アイコン単独でボタンを利用することは避けてください。
- アイコンに馴染みがなく、ユーザーが理解できない
- スクリーンリーダーが読み上げられる情報がない
などのリスクがあります。アイコンを利用する場合はテキストとセットで運用してください。
逆に、type='text'
を単独のアクションとして置く場合(つまりテキストのみ)は、それがインタラクティブな要素だとわかりづらくなります。単独で使う場合はアイコンとセットで使うようにしてください。
Label#
- アクション内容をできるだけ短い言葉で表し、余計な装飾入れません
- そのボタンが担うアクションを「〜する」または体言止めのかたちで書きます
- ⭕️「この内容で更新する」
- ❌「OK」
- 「OK」ボタンは実行するアクションの内容を表してはいません。単に、確認の意味合いを持つとユーザーには見えるかもしれません。ボタンを押下した場合に、何が起こるのかをユーザーが推測できるべきです。ボタンは、「何かが実行される」ことをユーザーに暗示します。実行の結果が推測できない場合、ユーザーはボタンを押下しない場合があります
- できる限りモバイルで改行しない文字数におさめましょう(15文字程度)
<Button>
or <LinkButton>
#
- どちらも似たような見た目を提供しますが、何を機能として提供するか(=アフォードするか)は異なります
- ページ遷移するかどうかが大きな判断軸になります。ページ遷移するのであれば
<LinkButton />
が候補となります - ただし、「リンクをボタンとしてデザインすべきかどうか」をまずは検討してください
- リンクであることを示す手段はいくつか存在します。バナーのような一定のサイズを持つ矩形や、画面上部(ロゴ、ヘッダーナビゲーション等)に存在するものはユーザーにとってリンクであると認識しやすいです
- 逆に、ページ遷移を
<Button>
で表現してはいけません。スクリーンリーダーのユーザーなどが見落とす可能性があります
フレームワークのLinkコンポーネントを使用する#
render
propsにフレームワークのLinkコンポーネントを指定してください。フレームワーク固有のpropsが必用な場合は、Linkコンポーネントに指定してください。
Next.jsの例:
import Link from 'next/link';
import { LinkButton } from '@ubie/ubie-ui';
...
export const SomeComponent () => (
<LinkButton
render={<Link href='/' prefetch={false} />}
>
リンク
</LinkButton>
)
Disabledなときは、Buttonを非表示にし適切なメッセージを表示する#
LinkButton
はあくまでもLinkであるため、 disabled
プロパティは存在しません。
Disabledな LinkButton
を用いたい場合は、リンクを非表示にして代わりとなるメッセージを表示するようにしてください。
export const SomeComponent () => (
{showLinkButton ? (
<LinkButton href="/">リンク</LinkButton>
) : (
現在このボタンを押すことはできません
)}
)
Accessibility#
ネイティブの <a>
要素#
- フォーカスを受け取り、Enterキーで押下できます
<button>
とは違い、Spaceキーはページスクロールとなります
- スクリーンリーダーがアクセスしやすくなります
- ページ内のリンクに直接移動する機能1を持つものがあります
- スクリーンリーダーでリンクであることが読み上げられます2