10 種類のモダンなレイアウトを実現するための CSS コード

10 種類のモダンなレイアウトを実現するための CSS コード

序文

日曜日に自宅で web.dev の 2020 3 日間ライブを視聴したところ、興味深い点がたくさんありましたが、そのうちの 1 つは CSS に関するものでした。ホストは Una Kravets (Chrome チーム メンバー) でした。ここ数か月、CSS を深く勉強していませんが、以前学んだ基礎はそのまま残っています (興味があれば、1 年前に投稿した CSS に関する記事を読んでみてください。ただし、内容が低すぎるため、読む人は多くありません。残念です)。

注意: 以下のコードのほとんどは、最新の主要ブラウザで実装されています。本番環境では使用しないでください。公式アカウントの読者であれば、外部リンクのため、クリックして元のテキストを読むことができます。github ページに、より詳細なデモがあります。

文章

01. スーパーセンター

flex と grid が登場する前は、垂直方向の中央揃えをうまく実現できませんでした。これで、 gridplace-itemsを組み合わせて、水平方向垂直方向の両方の中央揃えをエレガントに実現できるようになりました。

<div class="親青">
  <div class="box coral" コンテンツ編集可能>
    :)
  </div>
.ex1 .親{
    表示: グリッド;
    アイテムを配置: 中央;
  } 

MDN、place-items属性の詳細な説明

Codepenアドレス

02. 解体パンケーキ

flex: 0 1 <baseWidth>

このレイアウトは、eコマースのウェブサイトでよく見られます。

ビューポートが十分に大きい場合、3 つのボックスが固定幅で水平に配置されます。

ビューポートが大きくない場合(モバイルなど)、幅は固定されたままですが、自動的に分解され(私の中国語レベルを許してください)、同じレベルにはなりません。

<div class="親白">
    <div class="box green">1</div>
    <div class="box green">2</div>
    <div class="box green">3</div>
  </div>
.ex2 .親{
    ディスプレイ: フレックス;
    flex-wrap: ラップ;
    コンテンツの中央揃え: 中央;
  }

  .ex2 .ボックス {
    flex: 1 1 150px; /* flex-grow: 1 は、自動的に最大幅まで拡張することを意味します*/
    flex: 0 1 150px; /* 伸縮なし: */
    マージン: 5px;
  } 

flex: 1 1 150px;を設定すると、

いつ:

Codepenアドレス

03. クラシックサイドバー

grid-template-columns: minmax(<min>, <max>) ...

また、 gridレイアウトを使用すると、 minmax()を組み合わせて柔軟なサイドバーを実現できます (これは、大きな画面に適応する場合に便利です)。 minmax(<min>, <max>)はまさにその通りです。 <flex>ユニットと組み合わせると、これは非常にエレガントになり、幅の数学的計算 (ギャップを設定するときなど) などの柔軟性のない方法を回避できます。

<div class="parent">
    <div class="section yellow" コンテンツ編集可能>
    最小: 150ピクセル / 最大: 25%
    </div>
    <div class="section purple" コンテンツ編集可能>
      この要素は2番目のグリッド位置(1fr)を占め、
      残りのスペースをすべて占有します。
    </div>
  </div>
.ex3 .親{
    表示: グリッド;
    グリッドテンプレート列: 最小最大(150px, 25%) 1fr;
  } 

Codepenアドレス

04. ヘッダーとフッターを固定

grid-template-rows: auto 1fr auto

高さが固定されたヘッダーとフッター、および残りのスペースを占める本体は、頻繁に使用されるレイアウトであり、 gridおよびfrユニットを使用して完全に実装できます。

<div class="parent">
    <header class="blue section" contenteditable>ヘッダー</header>
    <main class="coral section" contenteditable>メイン</main>
    <footer class="purple section" contenteditable>フッターコンテンツ</footer>
  </div>
.ex4 .親{
    表示: グリッド;
    グリッドテンプレート行: 自動 1fr 自動;
  } 

Codepenアドレス

05. クラシカルな聖杯レイアウト

grid-template: auto 1fr auto / auto 1fr auto

グリッド レイアウトを使用すると、簡単に理想のレイアウトを実現でき、柔軟性も高くなります。

<div class="parent">
    <header class="pink section">ヘッダー</header>
    <div class="left-side blue section" contenteditable>左サイドバー</div>
    <main class="section coral" contenteditable> メインコンテンツ</main>
    <div class="right-side yellow section" contenteditable>右サイドバー</div>
    <footer class="green section">フッター</footer>
  </div>
.ex5 .親{
    表示: グリッド;
    グリッドテンプレート: auto 1fr auto / auto 1fr auto;
  }
  
  .ex5 ヘッダー {
    パディング: 2rem;
    グリッド列: 1 / 4;
  }

  .ex5 .左側 {
    グリッド列: 1 / 2;
  }

  .ex5 メイン {
    グリッド列: 2 / 3;
  }

  .ex5 .右側 {
    グリッド列: 3 / 4;
  }

  .ex5 フッター {
    グリッド列: 1 / 4;
  } 

Codepenアドレス

06. 面白い積み木

grid-template-columnsgrid-column次の図に示すレイアウトを実現できます。これは、 repeatfrの利便性をさらに示しています。

Codepenアドレス

07. RAMのヒント

grid-template-columns: repeat(auto-fit, minmax(<base>, 1fr))

Una Kravets はこれを「繰り返し、自動、最小最大化テクニック」と呼んでいます。これは、柔軟なレイアウトの画像/ボックスで非常に便利です (行に配置できるカードの数は自動的に調整されます)。

.ex7 .親{
    表示: グリッド;
    グリッドギャップ: 1rem;
    グリッドテンプレート列: repeat(auto-fit, minmax(150px, 1fr));
  }
<div class="親白">
    <div class="box pink">1</div>
    <div class="box purple">2</div>
    <div class="box blue">3</div>
    <div class="box green">4</div>
  </div>

その結果、複数のボックスの最小幅(上記の150pxなど)を満たすことができる場合、自動的に適応して複数の行に配置されます。 例えば:

  • 現在の幅は160px (ギャップを考慮せず) なので、上の 4 つのboxの幅は160pxに調整され、4 行に分割されます。
  • 現在の幅は310px (ギャップを考慮せず)で、上の4つのbox 2行に分割され、2つのbox幅は均等に共有されます。
  • 3 つのボックスを 1 行に配置できる場合、3 番目のボックスは自動的に 1 行目に移動します。
  • 行内のボックスの数が十分である場合、4 番目のボックスは自動的に最初の行に移動します。

auto-fit auto-fillに変更すると、次のようになります。

08. カードの弾力性と適応性

justify-content: space-between gridおよびflexと組み合わせて、完璧なカード レイアウトを実現します。

<div class="親白">
    <div class="カード 黄色">
      <h3>タイトル - カード 1</h3>
      <p contenteditable>中程度の長さの説明で、ここにさらにいくつかの単語を追加します。</p>
      <div class="ビジュアルピンク"></div>
    </div>
    <div class="カード 黄色">
      <h3>タイトル - カード 2</h3>
      <p contenteditable>長い説明。お会いできてとても嬉しいです。</p>
      <div class="ビジュアルブルー"></div>
    </div>
    <div class="カード 黄色">
      <h3>タイトル - カード 3</h3>
      <p contenteditable>短い説明。</p>
      <div class="visual green"></div>
    </div>
  </div>
.ex8 .親{
    高さ: 自動;
    表示: グリッド;
    グリッドギャップ: 1rem;
    グリッドテンプレート列: repeat(3, 1fr);
  }

  .ex8 .visual {
    高さ: 100px;
    幅: 100%;
  }

  .ex8 .カード {
    ディスプレイ: フレックス;
    flex-direction: 列;
    パディング: 1rem;
    コンテンツの両端揃え: スペースの間;
  }

  .ex8 h3 {
    マージン: 0
  } 

幅や高さを縮小しても拡大しても、カードのレイアウトを完璧に表示できます。

Codepenアドレス

09. クランプを使用して流動的なタイポグラフィを実装する

clamp(<min>, <actual>, <max>)

新しいclamp()メソッドを使用すると、流動的なタイポグラフィを 1 行で実装できます。 UX が向上し、テキストの行が短すぎたり長すぎたりしないように、読書コンテンツを含むカードに最適です。

<div class="親白">
    <div class="カード 紫">
      <h1>タイトルをここに入力</h1>
      <div class="visual yellow"></div>
      <p>説明テキスト。Lorem ipsum dolor sit, amet consectetur adipisicing elit。Sed est error repellat veritatis。</p>
    </div>
  </div>
.ex9 .親{
    表示: グリッド;
    アイテムを配置: 中央;
  }

  .ex9 .カード {
    幅: クランプ(23ch, 50%, 46ch);
    ディスプレイ: フレックス;
    flex-direction: 列;
    パディング: 1rem;
  }

  .ex9 .visual {
      高さ: 125px;
      幅: 100%;
    } 

MDN、clamp() の説明

10. 完璧なバランス

aspect-ratio: <width> / <height>

CMS やその他のデザイン コンテンツを表示する場合、画像、ビデオ、カードが固定の比率でレイアウトされることが想定されます。最新のaspect-ratioこの機能をエレガントに実現できます(Chrome 84以降を使用)

<div class="親白">
    <div class="カード ブルー">
      <h1>ビデオのタイトル</h1>
      <div class="visual green"></div>
      <p>説明テキスト。このデモは Chromium 84 以降で動作します。</p>
    </div>
  </div>
.ex10 .親{
    表示: グリッド;
    アイテムを配置: 中央;
  }

  .ex10 .visual {
    アスペクト比: 16/9;
  }

  .ex10 .カード {
    幅: 50%;
    ディスプレイ: フレックス;
    flex-direction: 列;
    パディング: 1rem;
  } 

Codepenアドレス

CSS を使用して 10 個のモダン レイアウト コードを実装する方法についての記事はこれで終わりです。CSS モダン レイアウトに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  163 メールボックスログインボックスインタラクティブデザインの改善体験と共有

>>:  Mac に MySQL データベースをインストールし、環境変数を設定するためのグラフィック チュートリアル

推薦する

HTML5で見逃せないAPIやヒントのまとめ

これまでのブログ投稿では、HTML 5 ではあまり使われていないが注目すべき API やヒントに焦点...

HTMLポップアップdivはモバイルの中央揃えを実現するのに非常に便利です

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

HTML テーブル マークアップ チュートリアル (48): CSS で変更されたテーブル

<br />では、CSS 構文を巧みに使用してテーブルを美しくする方法を見てみましょう。...

MySQLデータベースのSYNフラッディング問題を解決する

Syn 攻撃は、最も一般的で最も簡単に悪用される攻撃方法です。TCP プロトコルの欠陥を利用して、偽...

JSプロトタイプとプロトタイプチェーンについての簡単な説明

目次1. プロトタイプ2. プロトタイプポインタ: __proto__要約する1. プロトタイプJa...

CSS が初期読み込み時の白い画面の時間に与える影響

外部 CSS ファイルを使用したレンダリング パイプライン上図では、HTML データの要求から DO...

Dockerコンテナデータをコピーしてバックアップする方法の詳細な説明

ここでは、Jenkins コンテナを例に 3 つの方法を紹介します。方法1コンテナをイメージにパッケ...

MySQL エラー 1290 (HY000) の解決方法

私は長い間問題に取り組み、文法上の問題を何度も確認しました。しかし、後でネットで調べてみたら、突然理...

Vue コンポーネント化の一般的な方法: コンポーネント値の転送と通信

関連する知識ポイント親コンポーネントから子コンポーネントに値を渡す子コンポーネントから親コンポーネン...

登録フォームのデザインルール

随分前に「Patterns for Sign Up & Ramp Up」を読み終えました。今...

CSS スティッキーレイアウトを使用してヘッダーを上部に配置する方法

適用シナリオ:新しい要件の 1 つはアンケート調査を行うことですが、必然的に多くの質問が含まれ、1 ...

Linux での vi (vim) の新しい使い方のまとめ

私は数年間 vi エディタを使ってきましたが、実用的な用途で使ったことはありませんでした。今日 Py...

Vueは商品詳細ページの虫眼鏡機能を実装します

この記事では、商品詳細ページの虫眼鏡を実装するためのVueの具体的なコードを参考までに共有します。具...

Vueはカスタム命令を使用してページの下部に透かしを追加します

プロジェクトシナリオプロジェクトの背景全体にカスタム透かしを追加します。透かしのテキスト、フォントの...

MySQL の CPU 負荷が高い問題のトラブルシューティング

MySQL による CPU 負荷の上昇今日の午後、MySQL によってサーバーの負荷が高くなる問題を...