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

推薦する

MySQLでデータベースデータ保存ディレクトリを変更する方法

序文MySQL データベースのデフォルトのデータベース ファイルは /var/lib/mysql に...

Web 開発の面接と筆記試験に必須の知識(必読)

HTML のインライン要素とブロックレベル要素の違い:標準的なドキュメント フローでは、ブロック ...

Mysql5.7 で JSON 操作関数を使用する手順

序文JSON は、言語に依存しないテキスト形式を使用する軽量のデータ交換形式で、XML に似ています...

CSS3は、Transformを使用して動く2D時計を作成します。

これでtransformコースは終了です。例を見てみましょう。transform transform...

MySQL 空間データストレージと関数

目次1. データ型1. MySQL空間データとは何か2. GeoJSONとは3. 空間データ型のフォ...

Linux で MySQL データベースのスケジュールされたバックアップを実装する簡単な方法

詳細な手順は次のとおりです。 1. ディスク容量を確認します。 [root@localhost バッ...

JavaScript の for/of、for/in の詳細な紹介

目次JavaScriptでは、 forループを記述する一般的な方法がいくつかあります。最初の、そして...

Docker 接続 MongoDB 実装プロセスとコード例

コンテナが起動した後まず管理者にログインして新しいユーザーを作成してください $ docker ex...

Vue router-viewとrouter-linkの実装原理

使用 <div id="アプリ"> <router-link ...

ページ リファクタリング スキル - Javascript、CSS

JS、CSSについてCS: ...上部のスタイルシートCSS式を避ける外部JS、CSSの使用JSと...

Vue のライフサイクルとフック関数の詳細な説明と典型的な面接の質問

目次1. Vue ライフサイクル2. フック機能2.1 4つの段階と8つの方法に分かれています。 2...

MySQL SQL文を最適化するためのヒント

十分に最適化されていない、またはパフォーマンスが極端に低い SQL ステートメントに直面した場合、通...

MySQLデータストレージプロセスパラメータの詳細な例

MySQL ストアド プロシージャ パラメータには、in、out、inout の 3 種類があります...

CSS スタイル分類入門(基礎知識)

CSSスタイルの分類1. 内部スタイル ---- インラインスタイルスタイルタグの使用 <ス...