Button
ボタンを表示するコンポーネントです。
対応するHTML構造
<a class="c--button" href="###">
<span class="c--button__text">Button</span>
</a>
主なprops
keycolor
: ボタンのキーカラー。デフォルトはmain
カラーです。variant
: ボタンの表示スタイル。outline
、ghost
の2種類を用意しています。c--button--{variant}
がクラスとして出力されます。
leftIcon
,rightIcon
: アイコンを指定できます。テキストの左右にアイコンを出力できます。icon
: アイコン。icon
に指定するとアイコンのみ表示される。isGrid
: アイコンを端に寄せることができます。テキストとアイコンの並びがgridレイアウトになります。hove
: デフォルトはfade
が指定されています。
Astroでアイコンの受け渡しどうする...。(jsxコンポーネントであれば問題なし。)
要検討
- グラデーションなどどうする?
- ブロック化時のプリセット機能
data-preset="{keyword}"
に対するCSSを設定できるようにする?- primary, secondary... or main, sub, simple ... ?
Import
import { Button } from '@loos/lism-core';
DEMO
各
variant
<Cluster gap={20}>
<Button href="#button">Fill Button</Button>
<Button href="#button" variant="outline">Outline Button</Button>
<Button href="#button" variant="ghost">Text Button</Button>
</Cluster>
左にアイコン
import { ShoppingCartSimple } from "@phosphor-icons/react";
<Cluster gap={20}>
<Button href="#button" leftIcon={ShoppingCartSimple}>Button</Button>
<Button href="#button" leftIcon={ShoppingCartSimple} variant="outline">Button</Button>
<Button href="#button" leftIcon={ShoppingCartSimple} variant="ghost">Button</Button>
</Cluster>
アイコンを右に
import { ArrowRight } from "@phosphor-icons/react";
<Cluster gap={20}>
<Button href="#button" rightIcon={ArrowRight}>Button</Button>
<Button href="#button" rightIcon={ArrowRight} variant="outline">Button</Button>
<Button href="#button" rightIcon={ArrowRight} variant="ghost">Button</Button>
</Cluster>
アイコンのみのボタン。hoverも変えてみる
import { ShoppingCartSimple, ArrowFatDown, ArrowRight } from "@phosphor-icons/react";
<Cluster gap={20}>
<Button href="#button" icon={ShoppingCartSimple} hover="up" />
<Button href="#button" icon={ArrowFatDown} hover="shadow" variant="outline" />
<Button href="#button" icon={ArrowRight} hover={{c:'b800', bgc: 'b100'}} variant="ghost" />
</Cluster>
isGrid
でアイコンを端に寄せる
ボタンに幅を指定した時に、isGrid
を併用することでアイコンを端に寄せることもできます。
([data-icon-position="edge"]
とかdata属性にすべきか...?prop名は要検討)
Prop: iconOffset
iconOffset
の指定(data-icon-offset
属性) によって、translate
でアイコンの位置を微調整できます。
アイコン側の余白が広く見えてしまう場合などに活用してください。
iconOffset
の比較<Button href="#button" iconOffset="0%" rightIcon={<ArrowRight />}>Button</Button>
<Button href="#button" iconOffset="10%" rightIcon={<ArrowRight />}>Button</Button>
サイズの調整
専用のPropはいまのところなし。p, fz, w などの基本Propで調整できます。
小さいサイズのボタンテスト
<Cluster gap={20}>
<Button href="#button" variant="ghost" keycolor="main" fz="xs" p={10} hover={{ bgc: "b100" }}>Button</Button>
<Button href="#button" keycolor="purple" fz="xs" p={10} hover="reverse" leftIcon={ArrowRight}>Button</Button>
<Button href="#button" fz="xs" p={20} hover="fade" icon={ShoppingCartSimple} />
</Cluster>
hover="reverse"
Button用のhover
ユーティリティ。
- 基本的には、 cとbgcを入れ替えるようになっている
- fill(デフォルト) で使うと、文字色とボーダー色がホバー前の背景色になり、背景色が透明に。
- outline, ghost で使うと、文字色 →
--c--filled
, 背景色 → ホバー前の文字色に。
テキストカラー反転してるようなエリアでは、ホバー時の文字色を明示的に指定してあげないと、真っ白になったり真っ黒になったりする。
hover="reverse"
<Cluster gap={20}>
<Button href="#button" hover="reverse">Fill</Button>
<Button href="#button" hover="reverse" variant="outline">Outline</Button>
<Button href="#button" hover="reverse" variant="ghost">Ghost</Button>
</Cluster>
白黒反転エリア
...