基本を学ぶ
このガイドは、Yamada UIの概念を理解するのに役立ちます。開発を開始する前に、このガイドを読んでYamada UIを理解することをオススメします。
このガイドは基本であり、Yamada UIで開発する面白さ
を感じてもらうことが目的です。なので、各概念や機能を深く説明していません。もっと知りたくなった場合は、ページ内の各リンクをご覧ください。
テーマについて
Yamada UIは、他のUIライブラリと同様にテーマという概念が存在します。
テーマは、コンポーネントのスタイルやカラー・スペース・フォントサイズ・その他多くのプロパティのトークンが定義されている変更可能なオブジェクトです。
プロジェクトにデフォルトのテーマを設定するには、アプリケーションのルートにUIProvider
を追加する必要があります。
import { UIProvider } from "@yamada-ui/react"const App = () => {return (<UIProvider><YourApplication /></UIProvider>)}
デフォルトのテーマは、UIProvider
のなかに含まれています。
テーマをカスタマイズする
テーマをカスタマイズしたい場合は、UIProvider
にtheme
を渡しましょう。
import { UIProvider, extendTheme } from "@yamada-ui/react"const customTheme = extendTheme({fontSizes: {xs: "1rem",sm: "1.25rem",md: "1.5rem",lg: "1.75rem",xl: "2rem",},})()const App = () => {return (<UIProvider theme={customTheme}><YourApplication /></UIProvider>)}
これでアプリケーション全体の文字サイズが変更されました。
テーマをもっと学びたい場合は、テーマをカスタマイズするやコンポーネントのスタイルをご覧ください。
セマンティックトークンを変更する
Yamada UIは、あらゆるスケール(色やフォントサイズなど)のセマンティックトークンをサポートしています。
セマンティックトークンとは、デザインシステムなどで使用される用語で、色やフォントサイズのデザインの属性を抽象化した変数やトークンを指します。これらのトークンは、その名前から直感的にその機能や意味を理解できるように名付けられます。
実際に設定されている値はこちらです。
export const semantics: ThemeSemantics = {colors: {primary: "blue.500",secondary: "violet.500",info: "blue.500",success: "green.500",warning: "orange.500",danger: "red.500",link: "blue.500",},colorSchemes: {primary: "blue",secondary: "violet",info: "blue",success: "green",warning: "orange",danger: "red",link: "blue",},spaces: {xs: "1",sm: "2",md: "4",normal: "6",lg: "8",xl: "12","2xl": "16","3xl": "24","4xl": "32",},}
プロジェクトによって、セマンティックトークンを変更する場合があるでしょう。
例えば、primary
をpink
にしたいとします。その場合は、semantics
を変更します。
import { UIProvider, extendTheme } from "@yamada-ui/react"const customTheme = extendTheme({semantics: {colors: {primary: "pink.500",},colorSchemes: {primary: "pink",},},})()const App = () => {return (<UIProvider theme={customTheme}><YourApplication /></UIProvider>)}
セマンティックトークンをもっと学びたい場合は、こちらをご覧ください。
ローディングを使う
Yamada UIは、アプリケーションで必要なローディングアニメーション
をサポートしています。
ローディングを表示するには、useLoading
を使用します。useLoading
は、screen
・page
・background
・custom
のインスタンスを返します。インスタンスには、いくつかのメソッドが含まれています。
isLoading
: ローディングアニメーション中かどうかを取得します。start
: ローディングアニメーションを開始します。update
: ローディングアニメーションの情報を更新します。finish
: ローディングアニメーションを終了します。
custom
は、デフォルトのコンフィグで設定されていません。カスタムローディングを設定したい場合は、こちらをご覧ください。
編集可能な例
const { screen, page, background } = useLoading() const onLoadingScreen = async () => { try { screen.start() await wait(5000) } finally { screen.finish() } } const onLoadingPage = async () => { try { page.start() await wait(5000) } finally { page.finish() } } const onLoadingBackground = async () => { try { background.start() await wait(5000) } finally { background.finish() } } return ( <Wrap gap="md"> <Button onClick={onLoadingScreen}>Start screen loading</Button> <Button onClick={onLoadingPage}>Start page loading</Button> <Button onClick={onLoadingBackground}>Start background loading</Button> </Wrap> )
ローディングのアイコンやスタイルは、useLoading
の引数やUIProvider
に渡せるコンフィグ
で設定できます。
ローディングをもっと知りたい場合は、こちらをご覧ください。
通知を使う
Yamada UIは、アプリケーションで必要な通知
をサポートしています。
通知を表示するには、useNotice
を使用します。useNotice
は、通知を表示・制御するインスタンスを返します。
編集可能な例
const notice = useNotice() return ( <Button onClick={() => notice({ title: "Notification", description: "This is description.", }) } > Show notification </Button> )
通知のバリアントや表示位置の変更は、useNotice
の引数やUIProvider
に渡せるコンフィグ
で設定できます。
通知をもっと知りたい場合は、こちらをご覧ください。
スタイルについて
Yamada UIは、コンポーネントにprops
を渡すだけでスタイルを簡単に変更できます。また、多くの便利なショートハンドを提供しており、開発効率を向上させています。
例えば、padding
であれば、p
と記述することもでき、margin-left
とmargin-right
の両方を設定したい場合は、mx
と記述することができます。
編集可能な例
<Box w="full" p="md" bg="warning" color="white"> This is Box </Box>
擬似要素
編集可能な例
<Box position="relative" boxSize="2xs" bg="primary" p="md" color="white" _after={{ content: "'after'", position: "absolute", top: "0", right: "0", bg: "secondary", p: "md", color: "white", }} > Box </Box>
Style props
やショートコードをもっと学びたい場合は、こちらをご覧ください。
コンポーネント
Yamada UIが提供しているコンポーネントの多くは、variant
・size
・colorScheme
を設定することでスタイルが変更されます。
編集可能な例
<Wrap gap="md"> <Button>Basic</Button> <Button variant="solid" colorScheme="green"> Solid </Button> <Button variant="outline" colorScheme="orange"> Outline </Button> <Button variant="ghost" colorScheme="red"> Ghost </Button> <Button variant="link" colorScheme="sky"> Link </Button> <Button variant="unstyled">Unstyle</Button> </Wrap>
編集可能な例
<Wrap gap="md"> <Button colorScheme="primary" size="xs"> X Small </Button> <Button colorScheme="secondary" size="sm"> Small </Button> <Button colorScheme="warning" size="md"> Medium </Button> <Button colorScheme="danger" size="lg"> Large </Button> </Wrap>
レスポンシブについて
Yamada UIは、すぐに使えるレスポンシブスタイルをサポートしています。スタイルのprops
にオブジェクトを渡すだけでPCファーストのレスポンシブスタイルに対応します。
すべてのスタイルのprops
は、オブジェクトも受け入れます。まずは、背景色を変えてみましょう。
- オブジェクトのキーは、テーマのブレイクポイントで設定されているキーを定義します。
- オブジェクトの値は、キーで設定するスタイルの値を定義します。
編集可能な例
<Box w="full" p="md" bg={{ base: "primary", "2xl": "secondary", xl: "warning", lg: "danger" }} color="white" > This is Box </Box>
画面幅を変更して実際に確認してください。
上記のコードは、次のようなCSS
が生成されます。
.Box {background: var(--ui-colors-primary);@media screen and (max-width: 1440px) {background: var(--ui-colors-secondary);}@media screen and (max-width: 1280px) {background: var(--ui-colors-warning);}@media screen and (max-width: 976px) {background: var(--ui-colors-warning);}@media screen and (max-width: 480px) {background: var(--ui-colors-danger);}}
レスポンシブスタイルをもっと学びたい場合は、こちらをご覧ください。
Yamada UIは、デフォルトで@media(max-width)
のメディアクエリを用いたレスポンシブデザインを採用しています。もし、@media(min-width)
のメディアクエリを採用したい場合は、コンフィグをカスタマイズするをご覧ください。
ブレイクポイントについて
レスポンシブスタイルは、テーマで定義されたブレイクポイントを参照します。Yamada UIには、デフォルトのテーマがあり、ブレイクポイントが定義されています。
実際に定義されている値はこちらです。
breakpoints.ts
export const breakpoints = {sm: "30em", // 480pxmd: "48em", // 768pxlg: "61em", // 976pxxl: "80em", // 1280px"2xl": "90em", // 1440px}
ブレイクポイントを変更したい場合は、こちらをご覧ください。
カラーモードについて
Yamada UIには、アプリケーションのカラーモードを管理するためのサポートが組み込まれています。
Yamada UIのすべてのコンポーネントは、ダークモードをサポートしています。また、個別にカラーモードのスタイルを設定する場合は、スタイルのprops
に配列を渡すだけでカラーモードに対応します。
すべてのスタイルのprops
は、配列も受け入れます。まずは、背景色を変えてみましょう。
- 第1引数にライトモードに設定したいスタイルの値を定義します。
- 第2引数にダークモードに設定したいスタイルの値を定義します。
編集可能な例
<Box w="full" p="md" bg={["primary", "secondary"]} color="white"> This is Box </Box>
下のボタンでカラーモードを変更して実際に確認してください。
カラーモードを切り替える
カラーモードは、デフォルトのコンフィグに設定されています。
実際に定義されている値はこちらです。
config.ts
export const config: ThemeConfig = {initialColorMode: "light",}
-
initialColorMode
: カラーモードの初期値です。3つ値を受け入れます。light
: ライトモード。dark
: ダークモード。system
: オペレーションシステム(OS)からカラーモードを取得します。
initialColorMode
が設定されていない場合は、内部的にlight
になります。
コンフィグをカスタマイズしたい場合は、こちらををご覧ください。
アプリケーション内でカラーモードを変更したい場合は、changeColorMode
かtoggleColorMode
を使用します。
changeColorMode
: 任意のカラーモードを設定します。toggleColorMode
: ライトモードならダークモードへ、ダークモードならライトモードへ切り替えます。
編集可能な例
const { colorMode, changeColorMode, toggleColorMode } = useColorMode() return ( <Wrap gap="md"> <Button onClick={() => changeColorMode("light")}>ライトモード</Button> <Button onClick={() => changeColorMode("dark")}>ダークモード</Button> <Button onClick={() => changeColorMode("system")}>システム</Button> <Button onClick={toggleColorMode}> {colorMode === "light" ? "ダーク" : "ライト"}モードに切り替える </Button> </Wrap> )
カラーモードは、localStorage
やcookies
を用いて実装されています。カラーモードを学びたい場合は、こちらをご覧ください。
アニメーションについて
Yamada UIは、アニメーションに特化したコンポーネントのMotion
やCSSのkeyframes
のように記述できるuseAnimation
など、多くのユーティリティを提供しています。
useAnimation
を使う
useAnimation
は、引数にkeyframes
などを設定し、生成されたanimation
をprops
に渡します。
keyframes
: アニメーションの流れに沿ったキーフレーム(または中間地点)のスタイルを設定します。各スタイルの値は、Yamada UIのスタイルシステムやテーマのトークンが使用できます。duration
: 1回のアニメーションサイクルに要する時間の長さを設定します。timingFunction
: アニメーションの進め方を設定します。これは加速曲線を定義することで、キーフレーム間のアニメーションをどのように進めていくかを設定します。delay
: 要素が読み込まれてからアニメーションを始めるまでの遅延時間を設定します。iterationCount
: アニメーションを繰り返す回数を設定します。アニメーションを無限に繰り返すにはinfinite
を指定してください。direction
: アニメーションのシーケンス完了時に、逆方向にアニメーションして繰り返すか、始めの状態にリセットしてアニメーションを繰り返すかを設定します。fillMode
: アニメーションの実行前後に、指定したスタイルを適用するかを設定します。playState
: アニメーションを一時停止したり、再開したりするかを設定します。
アニメーションの設定は、@keyframesとCSSアニメーションの使用を基本としています。
編集可能な例
const animation = useAnimation({ keyframes: { from: { transform: "rotate(0)", }, to: { transform: "rotate(359deg)", }, }, duration: "0.8s", iterationCount: "infinite", timingFunction: "linear", }) return ( <Center p="lg"> <Center w="150px" h="150px" p="1" rounded="50%" bgGradient={[ "linear(blackAlpha.50, blackAlpha.500)", "linear(whiteAlpha.50, whiteAlpha.500)", ]} animation={animation} > <Box w="full" h="full" rounded="50%" bg={["white", "black"]} /> </Center> </Center> )
Motion
を使う
Motion
コンポーネントのprops
は、数多く存在します。今回は、whileHover
・whileTap
・whileFocus
について軽く紹介します。
whileHover
: 要素がホバーされたときに発火するアニメーションです。whileTap
: 要素がクリック・タップされたときに発火するアニメーションです。whileFocus
: 要素がフォーカスされたときに発火するアニメーションです。
今回は、拡大・縮小させるためにscale: 1.1
やscale: 0.9
を設定しています。
編集可能な例
<Center p="lg"> <Motion as="button" whileHover={{ scale: 1.1 }} whileTap={{ scale: 0.9 }} whileFocus={{ scale: 1.1 }} p="md" rounded="md" bg="primary" color="white" > Click me! </Motion> </Center>
アニメーションをもっと学びたい場合は、こちらをご覧ください。
Congratulations!
おめでとうございます🎉
これで、あなたは普通の山田
になることができました🥳
普通の山田
になったアナタへ、山田からこの言葉を贈ります。
「次は、応用を学ぶで待ってるねっ///」😘
もっと学習をする
Yamada UIをもっと知るために、応用やテーマを学んでみませんか?😎
応用を学ぶ
Yamada UIのテーマ・スタイル・レスポンシブ・ダークモード・アニメーションの応用を学ぶ。
テーマについて学ぶ
Yamada UIのデフォルトのテーマを知り、色・フォント・その他のテーマの値を作成・変更する方法を学ぶ。
コンポーネントを探索する
Yamada UIは、100以上の柔軟性が高いコンポーネントを提供しています。すべてのコンポーネントは、アニメーション・ダークモードをサポートしています。
ソースコードを探索する
Yamada UIのパッケージ・ドキュメントサイトはオープンソースです。Yamada UIを気に入ったら、スターを付けてください。
GitHubでこのページを編集する