以前、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-child
と split-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段構成にしないとうまくいきませんでした。
こうして作成したのが、この投稿と、それに使ったテンプレートです。
コメントを残す