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 データベースをインストールし、環境変数を設定するためのグラフィック チュートリアル

推薦する

Windows で複数の MySQL インスタンスを実行する方法

序文Windows では、各インスタンスに適切なパラメータを使用してコマンド ラインから複数の My...

HTML の相対パスと絶対パスの違いの分析

HTML 初心者は、ファイルを正しく参照する方法という問題によく遭遇します。たとえば、HTML ペー...

フロントエンド JavaScript ハウスキーパー package.json

目次1. 必須属性1. 名前2. バージョン2. 説明情報1. 説明2. キーワード3. 著者4. ...

HTML+CSS でハートビートの特殊効果を作成する

今日は、シンプルなハートビート効果を作成します。多くのコードは必要ありません。ボックスを追加し、CS...

JavaScript フロー制御 (ループ)

目次1. forループ2. 二重の for ループ3. whileループ4. dowhileループ5...

Docker に Solr 8.6.2 をインストールし、中国語の単語セグメンターを構成する方法

1. 環境バージョンDocker バージョン 19.03.12セントロス7ソル8.6.2 2. Do...

ホバー画像のポップアウトポップアップ効果を実現するための純粋な CSS のサンプルコード

実施原則メイングラフィックは、背景と前景の 2 つの要素で構成されています。次のサンプルコードでは、...

Vueカスタム命令とその使用方法の詳細な説明

目次1. 指令とは何ですか? Vue でよく使われる組み込みの v ディレクティブv-if と v-...

MySQL の日付と時刻の加算と減算のサンプル コード

目次1.MySQLは時間間隔を加算または減算します2. 日付を減算する最近、MySQL を見直してい...

CSSは、閉じることができるマスクレイヤーを備えたポップアップウィンドウ効果を実装します。

実際の開発ではポップアップウィンドウがよく使われます。CSS3を勉強していたときに、閉じることができ...

Dockerを使用してプライベートGitLabを構築する2つの方法

最初の方法: docker インストール1. オープンソース版のイメージを取得する2. 対応するデー...

MySQL でパーティション分割後にクエリを実装するために MRG_MyISAM (MERGE) を使用する例

大量のデータベース データを最適化することは非常に高度な科学であり、開発者が習得する必要がある専門的...

MySQL インデックスの最適化: ページング探索の詳細な紹介

目次MySQL インデックス最適化ページングの調査ケース1ケース2 MySQL インデックス最適化ペ...

同じ日の最初の3つのデータを取得するためのMySQLタイムラインデータ

テーブルデータを作成する テーブル `praise_info` を作成します ( `id` bigi...

CSSレイアウトで中央揃えレイアウトを実現する方法

1. 親コンテナーをテーブルに設定し、子をインライン要素に設定します。テキストを表示するサブコンテン...