あなたが作成するもの この新しいチュートリアルでは、CSS と JavaScript を使用して、レスポンシブな管理ダッシュボード レイアウトを作成します。 これを構築するには、折りたたみ可能なサイドバー メニューなど、WordPress ダッシュボードからいくつかのアイデアを借用します。 チュートリアル全体を通して、多くの課題に直面しますが、これらの課題は、フロントエンドのスキルを向上させるための優れた実践的なヒントを提供してくれます。 では、早速、最終的な管理ダッシュボードのデモを見てみましょう (サイドバーの下部にある [折りたたむ]ボタンをクリックすると、折りたたみ可能なナビゲーション機能が表示されます。また、フルスクリーン バージョンを表示して、その応答性を確認してください)。 1. ページマークアップから始める マークアップを開始するには、SVG、タイトル、セクションが必要です。 <svg style="display:none;">...</svg> <header class="page-header">...</header> <section class="page-content">...</section> SVGスプライト ご想像のとおり、どの管理コンソールでも多数のアイコンが必要です。 ありがたいことに、Envato Elements では便利なベクター アイコンのコレクションがどんどん増えています。このライブラリを活用して、これらのトレード アイコンとダッシュボード アイコンをダウンロードしてみましょう。
各アイコンは、一意の ID と、アイコンのサイズに応じて異なる それでは、SVG スプライトに必要なマークアップについて詳しく見ていきましょう。 <svg スタイル="display:none;"> <シンボル id="下" ビューボックス="0 0 16 16"> <ポリゴンポイント="3.81 4.38 8 8.57 12.19 4.38 13.71 5.91 8 11.62 2.29 5.91 3.81 4.38" /> </シンボル> <シンボル id="ユーザー" ビューボックス="0 0 16 16"> <PATH D = "M8,0A8,8,0,1,0,8,8,8,0,0,0,8,0zm8,15a7,7,0,1-5.19-2.32,2.71,2.71,0,0,0,1,1.7-133.11,1111111111111日.94-.34,17,1.17,0,0,0-.27-.7H0A3.61,3.61,0,0,5.15,7.49,3.18,3 1.13,1.13,0,0,0-.27.69,2.68,2.68,0,0,0,0,0,0,0,0,0,0,0,1.28.23,2.63,2.63,0,0,1,1.78,1A7,7,0,0,0,1,15Z " /> </シンボル> <!-- ここにさらに記号 --> </svg> 実際、組み込みの SVG スプライトを作成するために必要なのはこれだけです。 ヘッダ 管理ダッシュボードのレイアウトを続けて、ページ ヘッダーを見てみましょう。 その中で、次の要素のラッパーとして機能する
ワイドスクリーン(>767px)では次のようになります。 ヘッダー構造: <ヘッダークラス="ページヘッダー"> <ナビ> <a href="#0"> <img class="logo" src="logo.svg" alt="予測ロゴ"> </a> <button class="toggle-mob-menu" aria-expanded="false" aria-label="メニューを開く"> <svg 幅="20" 高さ="20" aria-hidden="true"> <use xlink:href="#down"></use> </svg> </ボタン> <ul class="admin-menu"> <li class="メニュー見出し"> <h3>管理者</h3> </li> <li> <a href="#0"> <svg> <xlink:href="#pages" を使用> </svg> <span>ページ</span> </a> </li> <!-- ここにリスト項目がさらにあります --> <li> <button class="collapse-btn" aria-expanded="true" aria-label="メニューを折りたたむ"> <svg aria-hidden="true"> <xlink:href="#collapse" を使用> </svg> <span>折りたたむ</span> </ボタン> </li> </ul> </nav> </ヘッダー> 上記のコードでは次の 2 つの点に注意してください。
一部 このセクションには 2 つのネストされたセクションが含まれます。 セクション1 最初のセクション内に、検索フォームと現在ログインしているユーザーに関する情報 (名前、アバター、通知) を配置します。 ワイドスクリーン(>767px)では次のようになります。 部分構造: <section class="検索とユーザー"> <フォーム> <input type="search" placeholder="ページを検索..."> <button type="submit" aria-label="フォームを送信"> <svg aria-hidden="true"> <use xlink:href="#search"></use> </svg> </ボタン> </フォーム> <div class="管理者プロフィール"> <span class="greeting">...</span> <div class="通知"> <span class="badge">...</span> <svg> <xlink:href="#users" を使用></use> </svg> </div> </div> </セクション> ここでも、送信ボタンにいくつかの ARIA 属性を追加したことに注目してください。 セクション2 2 番目の部分では、デモにダミー コンテンツを埋め込むために、記事のプレースホルダーをいくつか配置します。 これらには通常、表形式のデータ、グラフ、または何らかの形式のフィードが含まれます。 「ビューを作成するために使用するウィジェットは最大 5~7 個にしてください。そうでないと、ユーザーが集中して明確な概要を把握することが難しくなります。」 – Taras Bakusevych ワイドスクリーン(>767px)では次のようになります。 UXのベストプラクティスに基づくと、それほど多くのセクションは必要ないかもしれない 部分構造: <セクションクラス="ページコンテンツ"> <セクションクラス="グリッド"> <記事></記事> <記事></記事> <記事></記事> <記事></記事> <記事></記事> <記事></記事> <記事></記事> <記事></記事> </セクション> </セクション> 2. 基本的なスタイルを定義する 管理コンソールのマークアップが準備できたので、CSS に移ります。 いつものように、最初のステップは、いくつかの CSS 変数と一般的なリセット スタイルを指定することです。 :根 { --ページヘッダーの背景色: #242e42; --page-header-bgColor-hover: #1d2636; --page-header-txt色: #dde9f8; --ページヘッダーの見出し色: #7889a4; --ページヘッダー幅: 220px; --page-content-bgColor: #f0f1f6; --page-content-txt色: #171616; --page-content-blockColor: #fff; --白: #fff; --黒: #333; --青: #00b9eb; --赤: #ec1848; --border-radius: 4px; --box-shadow: 0 0 10px -2px rgba(0, 0, 0, 0.075); } * { パディング: 0; マージン: 0; ボックスのサイズ: 境界線ボックス; } ul { リストスタイル: なし; } 、 ボタン { 色: 継承; } { テキスト装飾: なし; } ボタン { 背景: なし; カーソル: ポインタ; } 入力{ -webkit-appearance: なし; } ボタン、 入力{ 境界線: なし; } svg { 表示: ブロック; } 体 { フォント: 16px/1.5 "Lato"、サンセリフ体; } 注: わかりやすくするために、このチュートリアルではすべてのCSS ルールを順に説明しません。 ここには 400 行近くの CSS があります。 必要に応じて、デモ プロジェクトのCSSタブをクリックしてすべて選択できます。 3. メインダッシュボードのスタイルを定義する この時点で、ページのスタイル設定に焦点を当てる準備が整いました。 タイトルを設定 ヘッダーは固定位置の要素になります。 幅は 220 ピクセル、高さはビューポートの高さと同じになります。 コンテンツがビューポートの高さを超える場合は、垂直スクロールバーが表示されます。 ロゴのモバイル メニュー切り替えボタンとメニュー。 トグル ボタンは小さい画面 (<768 ピクセル) でのみ表示されます。 必要なスタイルは次のとおりです。 /*カスタム変数はここに*/ .ページヘッダー{ 位置: 固定; 上: 0; 左: 0; 右: 0; 下部: 0; オーバーフロー:自動; パディング上部: 20px; 幅: var(--page-header-width); 色: var(--page-header-txtColor); 背景: var(--page-header-bgColor); } .ページヘッダーナビゲーション{ ディスプレイ: フレックス; flex-direction: 列; 最小高さ: 100%; } .page-header .toggle-mob-menu { 表示: なし; } ヒント:ページ全体の高さをカバーする絶対配置のヘッダーが必要な場合は、次のスタイルを追加します。 体 { 位置: 相対的; } .ページヘッダー{ 位置: 絶対; 上: 0; 左: 0; 高さ: 100%; /*これらのスタイルをコメント化します*/ /*位置: 固定; 上: 0; 左: 0; 右: 0; 下部: 0; オーバーフロー: 自動;*/ } メニュースタイル メニューはフレックス コンテナーとして機能し、拡張されて親の高さ全体をカバーするように 最後のメニュー項目はメニューの一番下に配置されるため メニュー内のリンクとボタンもフレックス コンテナーとして機能し、そのコンテンツ (テキストとアイコン) は垂直に揃える必要があります。 メニュータイトルは他のメニュー要素に比べて小さくなります。 さらに、文字間の間隔を広げます。 これはメニュー スタイルの一部です。 /*カスタム変数はここに*/ .ページヘッダー .管理者メニュー { ディスプレイ: フレックス; flex-direction: 列; フレックス成長: 1; 上マージン: 35px; } .page-header .admin-menu li:last-child { 上マージン: 自動; 下マージン: 20px; } .page-header .admin-menu li > * { 幅: 100%; パディング: 12px 15px; } .page-header .admin-menu a, .page-header .admin-menu ボタン { ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 フォントサイズ: 0.9rem; 遷移: 背景 0.2 秒、カラー 0.2 秒。 } .ページヘッダー .管理者メニュー .メニュー見出し h3 { テキスト変換:大文字; 文字間隔: 0.15em; フォントサイズ: 12px; 上マージン: 12px; 色: var(--page-header-headingColor); } ページコンテンツスタイル
このセクションは、ビューポートの左側から 220 ピクセルの位置に配置されます。 さらに、 スタイル: /*カスタム変数はここに*/ .ページコンテンツ{ 位置: 相対的; 左: var(--page-header-width); 幅: calc(100% - var(--page-header-width)); 最小高さ: 100vh; パディング: 30px; 色: var(--page-content-txtColor); 背景: var(--page-content-bgColor); } 検索とユーザースタイル また、 レイアウトには CSS グリッドを使用します。 検索フォームは利用可能なスペースをすべて占有し、検索フォームとその兄弟フォームの間に 50 ピクセルの余白が設けられます。 二人の兄弟は縦に並びます。 フォーム内の送信ボタンは絶対位置に配置されます。 装飾的なアイコンのみが含まれるため、スクリーン リーダーがそれを解釈してアクセスできるようにするには、ARIA 属性が必要です。 両方の要素を含む このセクションに必要なスタイルの一部を次に示します。 /*カスタム変数はここに*/ .検索とユーザー{ 表示: グリッド; グリッドテンプレート列: 1fr 自動; グリッド列の間隔: 50px; アイテムの位置を中央揃えにします。 背景: var(--page-content-bgColor); 下部マージン: 30px; } .検索とユーザーフォーム { 位置: 相対的; } .search-and-user フォーム ボタン { 位置: 絶対; 上位: 50%; 右: 15px; 変換: translateY(-50%); } .検索とユーザー .管理者プロファイル { ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 } .検索とユーザー .管理者プロファイル .通知 { 位置: 相対的; } .検索とユーザー .管理者プロファイル .バッジ { ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 コンテンツの中央揃え: 中央; 位置: 絶対; 上: -10px; 右: -3px; 幅: 18px; 高さ: 18px; 境界線の半径: 50%; フォントサイズ: 10px; 色: var(--white); 背景: var(--red); } グリッドスタイル 管理ダッシュボードの記事をレイアウトするには、CSS グリッドを使用します。 すべての記事の高さを 300 ピクセルに固定します。 親の幅全体に広がる最初の記事と最後の記事を除き、他のすべての記事は 2 列レイアウトの一部になります。 関連スタイル: /*カスタム変数はここに*/ .ページコンテンツ.グリッド{ 表示: グリッド; グリッドテンプレート列: repeat(2, 1fr); グリッドギャップ: 30px; } .page-content .grid > 記事 { ディスプレイ: フレックス; 高さ: 300px; 背景: var(--page-content-blockColor); 境界線の半径: var(--border-radius); ボックスシャドウ: var(--box-shadow); } .page-content .grid > article:first-child, .page-content .grid > article:last-child { グリッド列: 1 / -1; } 4. タイトルを切り替える 折りたたみ/展開ボタンをクリックするたびに、ヘッダーの状態が変わります。 展開されている場合は折りたたまれます (メニュー項目のアイコンバリアントのみが残ります)。逆の場合も同様です。 この機能は 767 ピクセルを超える画面でのみ使用できることに注意してください。 小さい画面の場合、ヘッダーのレイアウトは異なりますが、これについては後で説明します。 ヘッダーが折りたたまれた状態の場合、本文は
この機能を実装する JavaScript コードは次のとおりです。 定数 body = document.body; const collapseBtn = document.querySelector(".admin-menu ボタン"); const 折りたたみクラス = "折りたたみ"; 折り畳みボタン.addEventListener("クリック", 関数() { this.getAttribute("aria-expanded") == "true" ? this.setAttribute("aria-expanded", "false") : this.setAttribute("aria-expanded", "true"); this.getAttribute("aria-label") == "メニューを折りたたむ" ? this.setAttribute("aria-label", "メニューを展開") : this.setAttribute("aria-label", "メニューを折りたたむ"); body.classList.toggle(折りたたまれたクラス); }); 関連するすべてのスタイル: /*カスタム変数はここに*/ @media スクリーンと (最小幅: 768px) { .collapsed .page-header { 幅: 40px; } .collapsed .page-header .admin-menu li > * { パディング: 10px; } .collapsed .page-header .logo, .collapsed .page-header .admin-menu span、 .collapsed .page-header .admin-menu .menu-heading { 表示: なし; } .collapsed .page-header .admin-menu svg { 右マージン: 0; } .collapsed .page-header .collapse-btn svg { 変換: 回転(180度); } .collapsed .page-content { 左: 40px; 幅: calc(100% - 40px); } } 5. 管理メニュー項目にツールチップを表示する ここで、さらに一歩進んで、折りたたみ可能なヘッダーに別の新しい機能を追加してみましょう。 前のセクションで述べたように、ヘッダーが折りたたまれると、メニュー リンクのテキストは消えます。 つまり、その時点では SVG アイコンのみが表示されます。 そこで、各リンクが何をするのかをユーザーにわかりやすく示すツールチップを表示しましょう。 これを実現するには、メニュー リンク (アイコン) にマウスを移動するたびに、プレーン テキストの値を持つ 対応する JavaScript は次のとおりです。 定数 body = document.body; const menuLinks = document.querySelectorAll(".admin-menu a"); const 折りたたみクラス = "折りたたみ"; for (const link of menuLinks) { link.addEventListener("mouseenter", 関数() { body.classList.contains(collapsedClass) && window.matchMedia("(最小幅: 768px)").matches ? this.setAttribute("タイトル", this.textContent) : this.removeAttribute("タイトル"); }); } 6. 応答性を高める 幅 767 ピクセルの画面では、ページは次のようになります。 これはサイドバーの配置とはかなり異なりますね。 デスクトップ版と比較して最も重要な違いを強調してみましょう。
以下にレスポンシブ スタイルの一部を示します。 @media スクリーンと (最大幅: 767px) { .ページヘッダー、 .ページコンテンツ{ 位置: 静的; 幅: 100%; } .ページヘッダーナビゲーション{ flex-direction: 行; } .page-header .toggle-mob-menu { 表示: ブロック; } .ページヘッダー .管理者メニュー { 位置: 絶対; 左: 98px; 上: 57px; 上マージン: 0; zインデックス: 2; 境界線の半径: var(--border-radius); 背景: var(--page-header-bgColor); 可視性: 非表示; 不透明度: 0; 変換: スケール(0.95); 遷移: すべて 0.2 秒; } .page-header .admin-menu li:last-child, .検索とユーザー .管理者プロファイル .挨拶 { 表示: なし; } .検索とユーザー{ 位置: 絶対; 左: 131ピクセル; 上: 10px; パディング: 0; グリッド列の間隔: 5px; 幅: calc(100% - 141px); 境界線の半径: var(--border-radius); 背景: 透明; } } 7. モバイルメニューに切り替える トグルボタンをクリックするたびに、メニューの状態が変わります。 拡大すれば縮小し、その逆もまた同様です。 メニューが展開された状態では、body は
必要な JavaScript コードは次のとおりです。 定数 body = document.body; const トグルモバイルメニュー = document.querySelector(".toggle-mob-menu"); トグルモバイルメニュー.addEventListener("クリック", 関数() { this.getAttribute("aria-expanded") == "true" ? this.setAttribute("aria-expanded", "false") : this.setAttribute("aria-expanded", "true"); this.getAttribute("aria-label") == "メニューを開く" ? this.setAttribute("aria-label", "メニューを閉じる") : this.setAttribute("aria-label", "メニューを開く"); body.classList.toggle("mob-menu-opened"); }); 関連する CSS: .page-header .toggle-mob-menu svg { 遷移: 変換 0.2 秒; } .ページヘッダー .管理者メニュー { 遷移: すべて 0.2 秒; } .mob-menu-opened .toggle-mob-menu svg { 変換: 回転(180度); } .mob-menu-opened .page-header .admin-menu { 変換: スケール(1); 可視性: 可視; 不透明度: 1; } 結論は それでおしまい! 完全に機能する管理ダッシュボード レイアウトを正常に構築できました。 これを拡張して、さまざまな管理インターフェースを作成できます。 皆さんも私と同じようにこの旅行を楽しんでいただければ幸いです。 最後にもう1点。 私はアクセシビリティの専門家ではありませんが、いくつかの一般的な ARIA 属性を追加することで、このコンポーネントのアクセシビリティを高めようとしました。 このプロセス中に、参考のために WordPress と Codepen のダッシュボードを確認しました。 コードには他の ARIA 属性が含まれている場合があります。 たとえば、関連コンテンツを識別する役割を持つ 何か見落としがあった場合、または何か違うやり方があると思われる場合は、下のコメント欄でお知らせください。 いつも読んでいただきありがとうございます!
CSS と JavaScript を使用して管理ダッシュボード レイアウトのサンプル コードを作成する方法については、これで終わりです。CSS 管理ダッシュボード レイアウトに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 |
<<: MySQLフィルタリングレプリケーションのアイデアの詳細な説明
>>: Docker Composeでコンテナ管理の問題を解決する
2次元配列の次元削減配列インスタンスメソッド concat と ES6 スプレッド演算子を使用した次...
目次情事の概念取引の状態取引の役割取引の特徴トランザクション構文トランザクション対応ストレージエンジ...
注 1: 上の画像の背景全体がこの Web ページのフルサイズであり、中央の小さなボックスがブラウザ...
1. DOM要素を挿入、更新、または削除するときに、適切な場合は要素にスタイルクラス名を追加します。...
1.dockerをオンラインでダウンロードする yum インストール -y epel-release...
このチュートリアルの動作環境: Windows 7 システム、MySQL 8 バージョン、Dell ...
開発を行う際に、次のような状況に遭遇することがよくあります。 a.swf が Web ページに追加さ...
1. 単一列インデックスどの列にインデックスを作成するかを選択することは、パフォーマンス最適化プロ...
目次1. プロジェクト環境: 2: DNSサーバーの設定i: 前方解析を構成する: ii: 逆解像度...
mha4mysql をインストールする場合の手順は、おおよそ次のようになります: unzip、per...
目次1. SELinux の紹介2. SELinuxの基本概念2.1 仕事の種類2.2. セキュリテ...
前回の記事では、Promise を使用して小さなプログラム wx.request をカプセル化する実...
目次開発環境用のDocker-ceをインストールする開発環境用のDocker-composeをインス...
どのような製品について言及したいですか?最近、ユーザーがマーケティングの変化をよりよく観察できるよう...
マウスをホバーすると画像が折りたたまれる効果を実現する CSS 1. 実施のポイント折り畳みは複数の...