チョコチョコのメモ

美術鑑賞、映画、や、WordPressのメモ

フレックスボックスを試す(左サイドバー作成の試み2)

以前、CSSのfloatを使った左サイドバー作成を試みました。画面上の配置が右に寄りすぎ、きれいにはいきませんでした。

そこで、再び、ChatGPTに聞いたところ、display: flex; を教えてもらいました。これはフレックスボックス、というようです。

ChatGPTへの指示

指示1:本文を右に、サイドバーを左に配置するCSSクラス

指示

画面を左右1:2に分割し、最初のブロックを右に、2番目のブロックを左に配置するCSSクラスを書いてください。

ChatGPT回答

以下は、画面を左右1:2に分割し、最初のブロックを右に、2番目のブロックを左に配置するCSSクラスの例です。

.split-screen {
  display: flex;
  flex-direction: row;
  height: 100vh;
}

.split-screen > div:first-child {
  order: 2;
  flex: 2;
}

.split-screen > div:last-child {
  order: 1;
  flex: 1;
}

このCSSクラスは、 split-screen という名前のクラスを持つ要素を選択し、 display: flex; でフレックスボックスレイアウトを有効にします。 flex-direction: row; で、フレックスコンテナ内の要素が行方向に配置されるように指定し、 height: 100vh; でコンテナの高さをビューポートの高さに設定します。

2つの子要素のスタイルは、それぞれ split-screen > div:first-childsplit-screen > div:last-child で選択されます。 flex: 2;flex: 1; は、それぞれの要素の幅が規定されます。そして order: 2;order: 1; は、要素の順序を入れ替えます。したがって、最初のブロックは右に、2番目のブロックは左に配置されます。

指示2:レスポンシブ

指示

これを、レスポンシブにしてください

ChatGPT回答

以下は、画面を左右1:2に分割し、最初のブロックを右に、2番目のブロックを左に配置するCSSクラスのレスポンシブ対応版です。

@media only screen and (min-width: 768px) {
  .split-screen {
    display: flex;
    flex-direction: row;
    height: 100vh;
  }
  
  .split-screen > div:first-child {
    order: 2;
    flex: 2;
  }
  
  .split-screen > div:last-child {
    order: 1;
    flex: 1;
  }
}

@media only screen and (max-width: 767px) {
  .split-screen {
    display: flex;
    flex-direction: column;
    height: 100vh;
  }
  
  .split-screen > div:first-child {
    order: 1;
    flex: 1;
  }
  
  .split-screen > div:last-child {
    order: 2;
    flex: 1;
  }
}

このCSSクラスは、 @media ルールを使用して、スクリーンサイズに応じて異なるスタイルを適用します。最小幅768px以上のデバイスには、元のクラスと同じスタイルが適用されます。最大幅767px以下のデバイスには、2つの子要素が縦方向に配置されるようにスタイルが変更されます。

最小幅768px以上のデバイス用のスタイルは、前の回答で説明したスタイルと同じです。

最大幅767px以下のデバイス用のスタイルでは、 flex-direction: column; を使用して、子要素が縦方向に配置されるようになります。 order プロパティは、要素の順序を入れ替えて、最初のブロックを上に、2番目のブロックを下に配置します。また、 flex: 1; を使用して、子要素の高さを均等にします。

指示3: CSSクラスの分割

指示

このCSSクラスを、1番目のブロックに指定するもの、2番目のブロックに指定するものに、分けてください。

ChatGPT回答

以下は、画面を左右1:2に分割し、最初のブロックを右に、2番目のブロックを左に配置するために、1番目のブロックと2番目のブロックそれぞれに指定するCSSクラスの例です。

1番目のブロックに指定する場合のクラス名は first-block とし、2番目のブロックに指定する場合のクラス名は second-block とします。

/* 1番目のブロック用のCSSクラス */
.first-block {
  order: 2;
  flex: 2;
}

/* 2番目のブロック用のCSSクラス */
.second-block {
  order: 1;
  flex: 1;
}

/* 両方のブロックに適用する親要素のCSSクラス */
.split-screen {
  display: flex;
  flex-direction: row;
  height: 100vh;
}

.split-screen > .first-block {
  order: 2;
  flex: 2;
}

.split-screen > .second-block {
  order: 1;
  flex: 1;
}

/* レスポンシブ対応 */
@media only screen and (max-width: 767px) {
  .split-screen {
    display: flex;
    flex-direction: column;
    height: 100vh;
  }
  
  .split-screen > .first-block {
    order: 1;
    flex: 1;
  }
  
  .split-screen > .second-block {
    order: 2;
    flex: 1;
  }
}

1番目のブロックに適用するCSSクラス .first-block と2番目のブロックに適用するCSSクラス .second-block は、それぞれ order プロパティと flex プロパティを設定して、親要素内での順序と幅を調整します。

両方のブロックに適用するCSSクラス .split-screen は、前回回答したものと同じです。ただし、子要素の選択子が、それぞれ .first-block と .second-block に変更されています。

レスポンシブ対応も前回回答したものと同じです。ただし、 .first-block と .second-block のスタイルが、縦方向に並べた場合にも適用されるように変更されています。

実際に設定した追加CSS

ChatGPTの答えの大半を使いました。

CSSコード

以下が追加CSSへの設定です。

/* left-side menu */
/* for parent group */
.split-screen {
  display: flex;
  flex-direction: row;
    height: 100%;
}
/* for main (first) block */
.first-block {
  order: 2;
  flex: 2;
}

/* for side-bar(second) block */
.second-block {
  order: 1;
  flex: 1;
}

.split-screen > .first-block {
  order: 2;
  flex: 2;
}

.split-screen > .second-block {
  order: 1;
  flex: 1;
}

/* responsive */
@media only screen and (max-width: 767px) {
  .split-screen {
    display: flex;
    flex-direction: column;
  }
  
  .split-screen > .first-block {
    order: 1;
    flex: 1;
  }
  
  .split-screen > .second-block {
    order: 2;
    flex: 1;
  }
}

設定

テンプレートを以下のように設定します。

  • 本文グループと、サイドバーグループを用意し、本文グループ、サイドバーグループの順に配置します。
  • 本文グループとサイドバーグループを、さらにグループ化します。
  • 作成したグループを、さらにグループ化します。
  • 最上位グループの「配置」は「幅広」を選び、「コンテント幅を使用するインナーブロック」を選び、コンテンツの幅に1000pxを設定します。
  • 2段目のグループの「配置」も「幅広」を選び、「高度な設定」で追加CSSクラスにsplit-screenを設定します。
  • 本文グループの「配置」は「なし」、「コンテント幅を使用するインナーブロック」は選択、コンテンツの幅に600pxを設定します。「高度な設定」で追加CSSクラスにfirst-blockを設定します。
  • サイドバーの「配置」は「なし」、「コンテント幅を使用するインナーブロック」は選択、コンテンツの幅に350pxを設定します。「高度な設定」で追加CSSクラスにsecond-blockを設定します。

ChatGPTには「画面を左右1:2に分割し」を入れたのですが、出てきたCSSは幅は指定していません。幅はWordPressのブロックのメニューで設定しました。

上位グループに設定するsplit-screenクラスですが、なぜか、上位グループを2段構成にしないとうまくいきませんでした。

こうして作成したのが、この投稿と、それに使ったテンプレートです。


投稿

更新

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です