CSS ビューポート ユニットはここ数年登場しており、時が経つにつれて、ますます多くの開発者が使用し始めています。これらの利点は、JavaScript を必要とせずに動的にサイズを変更できることです。失敗した場合でも、バックアッププランは豊富にあります。 この記事では、CSS ビューポート ユニットとその使用方法について学習し、一般的な問題とその解決策および使用例をいくつか見ていきます。それでは始めましょう。 導入 CSS 仕様によれば、ビューポートのパーセンテージ単位は、Web ページのルート要素である初期コンテナ ブロックのサイズを基準とします。 ビューポートの単位は、 ビューポートの幅
次の CSS を持つ要素があるとします。 。要素 { 幅:50vw; } ビューポートの幅が 幅 = 500*50% = 250ピクセル ビューポートの高さ
次の CSS を持つ要素があります。 。要素 { 高さ: 50vh; } ビューポートの高さが 高さ = 290*70% = 202ピクセル みんな履歴書にプロジェクトがないと言うので、みんなのためにプロジェクトを探してきて、【構築チュートリアル】も添付しました。 Vmin 単位
次の例を見てみましょう。 。要素 { パディングトップ: 10vmin; パディングボトム: 10vmin; } ご想像のとおり、計算は次のようになります。 パディングトップ = (高さの 10%) = 10% * 164 = 16.4px padding-bottom = (高さの10%) = 10% * 164 = 16.4px Vmaxユニット
次の例を見てみましょう。 。要素 { パディングトップ: 10vmax; パディングボトム: 10vmax; } 計算結果は以下のとおりです。 パディングトップ = (幅の10%) = 10% * 350 = 35px padding-bottom = (幅の10%) = 10% * 350 = 35p ビューポートの単位とパーセンテージの違いは何ですか? ビューポートの単位はページのルート要素に基づきますが、パーセンテージはそれらが含まれるコンテナーに基づきます。したがって、それらは互いに異なりますが、それぞれに独自の用途があります。 ビューポート単位でのフォントサイズの使用例 CSS ビューポート ユニットは、レスポンシブなタイポグラフィに最適です。たとえば、記事のタイトルとして次のものを使用できます。 。タイトル { フォントサイズ: 5vw; } タイトルの 本体サイズが非常に小さくなり、アクセシビリティとユーザーエクスペリエンスに悪影響を及ぼします。私の知る限り、モバイル デバイスの最小フォント サイズは この問題を解決するには、タイトルの最小フォントサイズを指定する必要があります。これは 。タイトル { フォントサイズ: calc(14px + 2vw); } 考慮すべきもう 1 つの重要な点は、 @media (最小幅: 1800px) { 。タイトル { フォントサイズ: 40px; } } フォント サイズをリセットすることで、サイズが大きくなりすぎないようにすることができます。複数のメディアクエリを追加する必要もあるかもしれませんが、それはプロジェクトのコンテキストに応じて異なります。 アドレスの例: https://codepen.io/shadeed/pen/fa989837c6379770cce49f0be6daa3e3 全画面表示 場合によっては、ビューポートの高さを .p { 高さ:100vh; ディスプレイ: フレックス; flex-direction: 列; コンテンツの中央揃え: 中央; アイテムの位置を中央揃えにします。 } ソースコードの例: https://codepen.io/shadeed/pen/dc4e82f3c873cc64ae5c5bc4a3f4ef9f?editors=1100 スティッキーレイアウト(フッター) 大きな画面では、Web サイトのコンテンツがまばらになり、 これを修正するには、コンテンツの高さをビューポートの高さ - (ヘッダー + フッター)に等しくする必要があります。これを動的に行うことは困難ですが、CSS のビューポートを使用すると簡単です。 最初の解決策:
ヘッダ、 フッター { 高さ: 70px; } 主要 { 高さ: calc(100vh - 70px - 70px); } この解決策は、特に 2. 2番目の解決策: Flexboxとビューポートユニット (推奨) 体 { 最小高さ: 100vh; ディスプレイ: フレックス flex-direction: 列; { 主要 { /* これにより、メイン要素が残りのスペースを動的に占有するようになります */ フレックス成長: 1; } この方法では、問題は解決され、コンテンツの長さに関係なく固定 ソースコードの例: https://codepen.io/shadeed/pen/c735b26b8fa97ee685b38084448b3f85?editors=1100 レスポンシブ要素 レスポンシブ デザインの作品を紹介するポートフォリオがあり、3 つのデバイス (モバイル、タブレット、ラップトップ) があるとします。各デバイスには 1 つの画像が含まれます。目標は、CSS を使用してこれらのページをレスポンシブに適応させることです。 CSS グリッドとビューポート ユニットを使用することで、完全に動的かつレスポンシブにすることができます。 <div class="wrapper"> <div class="デバイス ラップトップ"></div> <div class="デバイス モバイル"></div> <div class="デバイス タブレット"></div> </div> ビューポート単位は、 .ラッパー{ 表示: グリッド; グリッドテンプレート列: repeat(20, 5vw); グリッド自動行: 6vw; } 。携帯 { 位置: 相対的; zインデックス: 1; グリッド列: 2 / スパン 3; グリッド行: 3 / スパン 5; } .タブレット{ 位置: 相対的; zインデックス: 1; グリッド列: 13 / スパン 7; グリッド行: 4 / スパン 4; ボーダー下部: 1vw 実線 #a9B9dd; 右ボーダー: solid 3vw #a9B9dd; } 。ラップトップ { 位置: 相対的; グリッド列: 3/スパン 13; グリッド行: 2 / スパン 8; } /* ビューポートの単位は、下、左、右、高さ、境界の半径に使用されます。クールだと思いませんか? */ .laptop:after { コンテンツ:""; 位置:絶対; 下部: -3vw; 左: -5.5vw; 右: -5.5vw; 高さ: 3vw; 背景色: #a9B9dd; 境界線の半径: 0 0 1vw 1vw; } ソースコードの例: https://codepen.io/shadeed/pen/2da0f2b70699769f8de3220ff4465bc6?editors=1100 コンテナから抜け出す レイアウトの編集に最適なユースケースが 1 つあることに気付きました。親要素の幅が制限されている場合でも、ビューポートの幅の 。起こる { 幅:100vw; 位置: 相対的; 左: 50%; 右: 50%; 左マージン: -50vw; 右マージン: -50vw; } これらすべてのプロパティがどのように機能するかを少しずつ理解できるように、少し分解してみましょう。 1. 最も重要なステップは、画像の幅をビューポートの 2. 画像を中央に配置するには、ビューポートの幅の半分の幅の負のマージンを与える必要があります。 3. 最後に、親の幅の アドレスの例: https://codepen.io/shadeed/pen/828f12b1ef7fa7211584ff5c7b82d2fa?editors=1100 垂直および水平間隔 思い浮かぶもう 1 つの興味深い使用例は、ビューポート単位を使用して要素間の間隔を表すことです。これは、 モーダルボックス モーダルの場合は、ビューポートの上部から押し込む必要があります。通常、これは .modal-body { トップ:20vh; } アドレスの例: https://codepen.io/shadeed/pen/f77a0d58947c64c2b3dadbd887700db5?editors=1100 ページヘッダー ページ たとえば、次の CSS スタイルがあるとします。 .ページヘッダー{ パディングトップ: 10vh; パディングボトム: 10vh; } .ページヘッダー h2 { マージン下部: 1.5vh; } ページ タイトルのパディングとタイトルの下の余白には ソースコードの例: https://codepen.io/shadeed/pen/43024fa031519e316e95bb3ce47f2b22?editors=1100 Vmin と Vmax の使用例 このユースケースは、ページ タイトル要素の上部と下部の .ページヘッダー{ パディング: 10vmin 1rem; } ソースコードの例: https://codepen.io/shadeed/pen/f335c2f43b960a2c70ea057228ddc5b9?editors=0100 アスペクト比
まず、必要なアスペクト比を決定する必要があります。この例では、 p { /* 9/16 * 100 */ 高さ: 56.25vw; } ソースコードの例: https://codepen.io/shadeed/pen/dc4e82f3c873cc64ae5c5bc4a3f4ef9f?editors=0100 人気のトップボーダー ほとんどのウェブサイトで使用されている上部の境界線をご存知ですか?多くの場合、ブランドと同じ色で、個性を与えます。 境界線の初期値として vw = (ピクセル値 / ビューポート幅) * 100 ビューポートの幅は、ピクセル値と必要な この例では、 .ヘッダー{ 上境界線: 4px 実線 #8f7ebc; } 私の場合、ビューポートの幅は vw = (4 / 1440) * 100 = 0.277 .ヘッダー{ 上ボーダー: 0.277vw 実線 #8f7ebc; } さらに良いことに、基本ピクセル値を使用して、ビューポート単位を加算することができます。 .ヘッダー{ border-top: calc(2px + 0.138vw) solid $color-main; } モバイルのスクロールの問題 モバイルデバイスでは、 .my-要素{ height: 100vh; /* カスタムプロパティをサポートしていないブラウザ用のフォールバック */ 高さ: calc(var(--vh, 1vh) * 100); } // まず、ビューポートの高さを取得し、それに 1% を掛けて vh 単位の値を取得します。let vh = window.innerHeight * 0.01; // 次に、`--vh` カスタム プロパティの値をドキュメントのルート ディレクトリ内のプロパティに設定します。 document.documentElement.style.setProperty('--vh', `${vh}px`); ソースコードの例: https://codepen.io/shadeed/pen/1d18ca2d23ec0038c759dc62dc3fd8c3?editors=0110 CSS ビューポート ユニットを使用して高速レイアウトを実現する方法については、これで終わりです。CSS ビューポート ユニットに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 |
<<: MySQL の暗黙的な型変換によって発生するインデックス障害の解決策
>>: Vue3 における provide と inject の使用法と原則
目次序文さまざまなオブジェクト間の関係配列バッファ型付き配列Uint8ClampedArray文字間...
成果を達成する実装コードhtml <div クラス = 'ラッパー'> ...
序文職場で次のような状況に遭遇しました。ログ システムのテーブルでは、時間フィールドには日付データで...
原因外部ファイルをミニプログラムにインポートする方法は次のとおりです: @import "...
目次概要1. コンポジションAPI 1. ref と reactive の違いは何ですか? 2. 周...
前回の記事「Zen Coding: HTML/CSS コードを素早く記述する方法」を公開した後、一部...
目次エラーメッセージ原因エラーのデモンストレーション回避策方法1方法2方法3エラーメッセージ現在の場...
mysqlslap共通パラメータの説明–auto-generate-sql システムはテスト用のSQ...
目次概要例1) オブジェクトをフリーズする2) 配列をフリーズする3) 浅い凍結4) ディープフリー...
テーブル構造を設計する場合、数値型は最も一般的な型の 1 つですが、数値型をうまく使用するのは想像す...
偶然にも、SQL ステートメントを異なる MySQL インスタンスで実行すると、異なる結果が生成され...
IE6 で CSS スタイルの div または li の背景のタイリングや境界の破壊を解決するには、...
フロントエンドのデザイン案では、「X」や「>」の形をした閉じるボタンや、他の 3 方向の白抜き...
目次1. 動詞-if 2. <template> で v-if を使用する3. キーを使...
目次1. ホームページ制作1. ダウンロードアプリの制作2. ナビゲーションバーの制作3. カルーセ...