フッターブロック
Footerコンポーネントは、ReactとTypeScriptで構築された完全にカスタマイズ可能でアクセシブルなフッターセクションです。モダンなデザインパターン、ロゴ表示、コンテンツセクション、柔軟なカスタマイズオプションを備えた完全なWebサイトフッターインターフェースを提供します。一貫したスタイリングのためにMUIコンポーネント上に構築されています。
🚀 インストール
npm install @nodeblocks/frontend-footer-block@0.2.0
📖 使用法
import {Footer} from '@nodeblocks/frontend-footer-block';
- 基本的な使用法
- 高度な使用法
function SimpleFooter() { return ( <Footer logoSrc="/img/icon-small.png" content={ <div> <p>ビジネスソリューションの信頼できるパートナー。</p> <p>お問い合わせ: info@example.com | +1 (555) 123-4567</p> </div> } copyright="© 2024 あなたの会社名. All rights reserved." > <Footer.Logo /> <Footer.Content /> <Footer.Copyright /> </Footer> ); }
function AdvancedFooter() { return ( <Footer logoSrc="/img/icon-small.png" content={ <div> <p>ビジネスソリューションの信頼できるパートナー。</p> <p>お問い合わせ: info@example.com | +1 (555) 123-4567</p> </div> } copyright="© 2024 あなたの会社名. All rights reserved." sx={{ bgcolor: '#1e293b', color: '#f1f5f9', }} > {({defaultBlocks}) => { const socialLinks = ( <div style={{ display: 'flex', gap: '16px', alignItems: 'center', }} > <a href="#twitter" style={{color: '#94a3b8', textDecoration: 'none'}}> Twitter </a> <a href="#linkedin" style={{color: '#94a3b8', textDecoration: 'none'}}> LinkedIn </a> <a href="#github" style={{color: '#94a3b8', textDecoration: 'none'}}> GitHub </a> </div> ); const richContent = ( <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))', gap: '24px', padding: '16px 0', }} > <div> <h4 style={{ color: '#f1f5f9', marginBottom: '12px', fontSize: '14px', fontWeight: '600', }} > 会社 </h4> <ul style={{listStyle: 'none', padding: 0, margin: 0}}> <li style={{marginBottom: '8px'}}> <a href="#about" style={{ color: '#94a3b8', textDecoration: 'none', fontSize: '14px', }} > 私たちについて </a> </li> <li style={{marginBottom: '8px'}}> <a href="#careers" style={{ color: '#94a3b8', textDecoration: 'none', fontSize: '14px', }} > 採用情報 </a> </li> <li style={{marginBottom: '8px'}}> <a href="#press" style={{ color: '#94a3b8', textDecoration: 'none', fontSize: '14px', }} > プレス </a> </li> </ul> </div> <div> <h4 style={{ color: '#f1f5f9', marginBottom: '12px', fontSize: '14px', fontWeight: '600', }} > 連絡先 </h4> <p style={{ color: '#94a3b8', margin: '0 0 8px 0', fontSize: '14px', }} > info@example.com </p> <p style={{ color: '#94a3b8', margin: '0 0 8px 0', fontSize: '14px', }} > +1 (555) 123-4567 </p> <p style={{color: '#94a3b8', margin: 0, fontSize: '14px'}}>123 Business St, City</p> </div> </div> ); return { blocks: { ...defaultBlocks, socialLinks, content: richContent, copyright: ( <div style={{ borderTop: '1px solid #334155', paddingTop: '16px', marginTop: '8px', display: 'flex', justifyContent: 'space-between', alignItems: 'center', flexWrap: 'wrap', gap: '12px', }} > <span style={{color: '#64748b', fontSize: '13px'}}>© 2024 カスタム会社. All rights reserved.</span> <div style={{display: 'flex', gap: '16px', fontSize: '13px'}}> <a href="#privacy" style={{color: '#64748b', textDecoration: 'none'}}> プライバシー </a> <a href="#terms" style={{color: '#64748b', textDecoration: 'none'}}> 利用規約 </a> <a href="#cookies" style={{color: '#64748b', textDecoration: 'none'}}> Cookie </a> </div> </div> ), }, blockOrder: ['logo', 'socialLinks', 'content', 'copyright'], }; }} </Footer> ); }
🔧 プロパティリファレンス
メインコンポーネントプロパティ
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
logoSrc | string | 必須 | フッターに表示するロゴ画像のURLまたはパス |
content | ReactNode | 必須 | フッターのメインコンテンツセクション(テキスト、リンクなどを含む) |
copyright | ReactNode | 必須 | フッターの下部に表示する著作権テキストまたはコンポーネント |
spacing | number | string | 2 | 子要素間のスペース(MUI Stackのspacing) |
className | string | undefined | フッターコンテナのスタイリング用の追加CSSクラス名 |
sx | SxProps<Theme> | { backgroundColor: 'primary.main', color: 'primary.contrastText', py: 3, px: 2, typography: 'body2' } | カスタムスタイリング用のMUIシステムプロパティ |
children | BlocksOverride | undefined | デフォルトレンダリングをオーバーライドするカスタムブロックコンポーネント |
注意: このコンポーネントはすべてのMUI Stackコンポーネントプロパティ(component="footer"としてレンダリング)を継承します。
サブコンポーネント
Footerコンポーネントは複数のサブコンポーネントを提供します。すべてのサブコンポーネントは、メインコンポーネントのコンテキストからデフォルト値を受け取り、プロパティを通じてこれらの値をオーバーライドできます。
Footer.Logo
MUI Boxコンテナ内にフッターロゴをレンダリングします。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
logoSrc | string | コンテキスト値 | ロゴ画像のURLまたはパス(コンテキストのlogoSrcをオーバーライド) |
className | string | undefined | スタイリング用の追加CSSクラス名 |
sx | SxProps<Theme> | { pb: 0.5 } | カスタムスタイリング用のMUIシステムプロパティ |
注意: このコンポーネントはすべてのMUI Boxコンポーネントプロパティを継承します。ロゴはBox内にalt="Footer logo"を持つ<img>要素としてレンダリングされます。
Footer.Content
MUI Boxを使用してフッターコンテンツセクションをレンダリングします。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
content | ReactNode | コンテキスト値 | 表示するコンテンツ(コンテキストのcontentをオーバーライド) |
children | ReactNode | undefined | コンテンツを提供する代替方法(contentが提供されない場合に使用) |
className | string | undefined | スタイリング用の追加CSSクラス名 |
sx | SxProps<Theme> | undefined | カスタムスタイリング用のMUIシステムプロパティ |
注意: このコンポーネントはすべてのMUI Boxコンポーネントプロパティを継承します。優先順位: contentプロパティ > childrenプロパティ。
Footer.Copyright
MUI Boxを使用して著作権セクションをレンダリングします。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
copyright | ReactNode | コンテキスト値 | 表示する著作権コンテンツ(コンテキストのcopyrightをオーバーライド) |
children | ReactNode | undefined | 著作権コンテンツを提供する代替方法 |
className | string | undefined | スタイリング用の追加CSSクラス名 |
sx | SxProps<Theme> | undefined | カスタムスタイリング用のMUIシステムプロパティ |
注意: このコンポーネントはすべてのMUI Boxコンポーネントプロパティを継承します。優先順位: copyrightプロパティ > childrenプロパティ。
🎨 設定例
カスタム背景スタイリング
<Footer
logoSrc="/logo.svg"
content={<p>フッターコンテンツ</p>}
copyright="© 2024 会社"
sx={{
bgcolor: 'grey.900',
color: 'grey.100',
py: 4,
px: 3,
}}
/>
カスタムロゴコンテナスタイリング
<Footer.Logo
sx={{
pb: 2,
'& img': {
maxHeight: 40,
width: 'auto',
}
}}
/>
ボーダー付きカスタム著作権
<Footer.Copyright
sx={{
pt: 2,
mt: 2,
borderTop: '1px solid',
borderColor: 'grey.800',
}}
/>
🔧 TypeScriptサポート
包括的な型定義による完全なTypeScriptサポート:
import {Footer} from '@nodeblocks/frontend-footer-block';
import {StackProps, BoxProps} from '@mui/material';
import {ReactNode} from 'react';
// メインコンポーネントプロパティはMUI StackPropsを拡張
interface FooterProps extends Omit<StackProps, 'content' | 'children'> {
logoSrc: string;
content: ReactNode;
copyright: ReactNode;
children?: BlocksOverride;
}
// コンテキストタイプ(すべてのサブコンポーネントに渡される値)
interface FooterContextValue {
logoSrc: string;
copyright: ReactNode;
content: ReactNode;
}
// 型付きプロパティの例
function TypedFooter() {
return (
<Footer
logoSrc="/assets/logo.svg"
content={
<div>
<p>連絡先: info@example.com</p>
<p>電話: +1 (555) 123-4567</p>
</div>
}
copyright="© 2024 会社名. All rights reserved."
spacing={3}
sx={{
bgcolor: 'grey.900',
color: 'grey.100',
}}
>
<Footer.Logo sx={{pb: 1}} />
<Footer.Content />
<Footer.Copyright sx={{pt: 2, borderTop: '1px solid', borderColor: 'grey.800'}} />
</Footer>
);
}
📝 注意事項
- コンポーネントはデフォルトで
spacing={2}のMUIStackをfooter要素としてレンダリングします - デフォルトスタイリングには
backgroundColor: 'primary.main'、color: 'primary.contrastText'、パディング(py: 3, px: 2)、typography: 'body2'が含まれます - Footer.LogoはBox内に
alt="Footer logo"を持つ<img>要素をレンダリングします - Footer.ContentとFooter.Copyrightはコンテキスト値と直接のchildrenの両方をサポートします
- すべてのサブコンポーネントはMUIシステムスタイリング用の
sxプロパティをサポートします - ブロックオーバーライドパターンにより、カスタムブロックの挿入と並べ替えが可能です
React、TypeScript、MUIを使用して❤️で構築されました。