webpackのモバイル適応ソリューションの概要

webpackのモバイル適応ソリューションの概要

モバイル開発における最も一般的な問題の 1 つは、さまざまな画面幅に適応することです。現在、より一般的な適応ソリューションは、CSS の相対単位である rem と vw です。

レム

W3C では、rem をルート要素のフォント サイズとして定義しています。これは、ブラウザーのルート要素 (HTML 要素) のフォント サイズを基準としてのみ決定される単位です。つまり、幅の異なるモデルの場合、対応するルート要素のフォント サイズを計算し、同じ CSS コードを使用して比例調整を行うだけで済みます。最も単純なケースを考えてみましょう。

HTML コード スニペット

// モバイルページに必要なメタ。デバイス画面の幅をドキュメントの幅に設定します <meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=0">

js コードスニペット

// ドキュメントの幅に基づいてルート要素のフォントサイズを計算します。例としてドキュメントの幅の 1/10 を取ります。画面の幅が 375 の場合、ルート要素のフォントサイズは 37.5px になります。
var w = document.documentElement.clientWidth;
document.documentElement.style.fontSize = w / 10 + 'px';

CSS コード スニペット

//このとき、.div{
  幅: 2rem;
}
//この div の幅は 75 ピクセルになります。同様に、画面の幅が 360 の場合、div の幅は 72 ピクセルになります。
//日常の開発では、最も一般的なデザイン案は750pxです。デザイン案の領域の高さが30pxの場合、
//比例スケーリングを実現するために、CSSでheight: 0.4rem (30/75)と記述します

実際の開発では、webpack をビルドするときに rem 適応を実現するために、postcss-pxtorem と lib-flexible などのプラグインを使用するのが一般的です。

インストール: npm i postcss-pxtorem --Dおよびnpm i amfe-flexible --S

webpack.config.js で postcss-loader を設定する

モジュール.エクスポート = {
    エントリ: "./src/index.js",
    出力: {
        パス: path.join(__dirname,"/dist"),
        ファイル名: "bundle.js"
    },
    モジュール:{
        ルール:[
            {
                テスト: /\.css$/,
                使用方法: ['style-loader','css-loader','postcss-loader'] // postcss-loader を設定する
            }
        ]
    },  
}

プロジェクトのルートディレクトリに新しい.postcssrc.jsファイルを作成し、そこにpostcss-pxtoremプラグインの設定を記述します。

モジュール.エクスポート = {
  「プラグイン」: {
    "postcss-pxtorem": {
        rootValue: 75, //750 のデザイン ドラフト propList: ['*']
     }
   }
}

エントリで指定されたエントリ js ファイル ("./src/index.js") に lib-flexible を導入します。

'amfe-flexible' をインポートする

このように、CSSでデザイン原稿内の絶対ピクセル値を直接記述することができます。例えば、750のデザイン原稿内のdiv#testの幅が200pxであれば、変換せずにそのまま記述することができます。

#テスト{
  幅: 200ピクセル
}

フォルクスワーゲン

もう 1 つの解決策は、ブラウザの表示領域の幅を基準とした単位である、ビューポートの幅の 1% である vw を使用することです。

// モバイルページに必要なメタ。デバイス画面の幅をドキュメントの幅に設定します <meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=0">

モバイル デバイスでは、width = device-width が設定されている場合、画面の幅は 100vw になります。

vw レイアウトを使用する場合、rem のように js 内のルート要素のフォント サイズを動的に設定する必要はありませんが、画面の幅に直接相対的になります。例えば、750のデザイン案ではdivの幅は200pxなので、次のように記述できます: width: 200 / 750 * 100 vw

webpack では、postcss-px-to-viewport プラグインを使用してこれを実現できます。

インストール: npm i postcss-px-to-viewport --D

上記の rem のように、webpack.config.js で postcss-loader を設定します。
プロジェクトのルートディレクトリに新しい.postcssrc.jsファイルを作成し、その中にpostcss-px-to-viewportプラグインの設定を記述します。

モジュール.エクスポート = {
  「プラグイン」: {
    'postcss-px-to-viewport': {
        viewportWidth: 750 //750 デザイン案}
   }
}

この方法では、デザイン ドラフト内の絶対ピクセル値を CSS に直接書き込むことができます。例は上記の rem の例と同じです。

サードパーティのUIフレームワークに適応する

モバイル デバイスで他のコンポーネント ライブラリを使用したり、vant や mint-ui などのサードパーティの UI フレームワークを参照したりすることがあります。サードパーティのフレームワークは 375 ピクセルのデザイン ドラフトに基づいて px 単位を使用するため、プロジェクトのデザイン ドラフトが 750 ピクセルの場合、適応に同じ viewportWidth を使用することはできません。

このとき、.postcssrc.js で次のように設定できます (vw を例にとると、rem も同様です)。

定数パス = require('path')
module.exports = ({file}) => {

  //vant UI フレームワークを使用する場合 const width = file.dirname.includes(path.join('node_modules', 'vant')) ? 375 : 750; 
  
  戻る {
    「プラグイン」: {
      「postcss-px-to-viewport」: {
        viewportWidth: 幅、
      }
    }
  }
}

結論

rem と vw はどちらも一般的に使用されているモバイル適応ソリューションです。両者の違いは、まず第一に互換性にあります。Rem は古いバージョンのブラウザと互換性があります。caniuse の Web サイト caniuse.com/ を参照してください。次に、rem は js を通じてルート要素のフォント サイズを計算する必要がありますが、vm は純粋な CSS 実装です。

以上で、webpack のモバイル適応ソリューションの概要についての説明は終了です。より関連性の高い webpack のモバイル適応コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Electron-vueはwebpackを使用して複数ページのエントリファイルをパッケージ化します
  • webpackが静的リソースキャッシュを実装する方法
  • vue-cli を使用してプロジェクトを作成し、webpack でパッケージ化する方法
  • webpackでHMRを手動で実装するいくつかの方法
  • vue の webpack -v エラー解決の概要

<<:  MySQLのスローログの開き方と保存形式の詳細な分析

>>:  CentOS8 で Docker を使用してオープンソース プロジェクト Tcloud をデプロイするチュートリアル

推薦する

Docker での Tomcat インストールの 404 問題の解決方法

tomcat の containerID を見つけて、tomacat ディレクトリに入ります。 [r...

均一なアニメーション効果を実現するJavaScript

この記事の例では、JavaScriptで等速アニメーションを実装するための具体的なコードを参考までに...

JavaScript 非同期プログラミングにおける Promise の初期の使用法の詳細な説明

1. 概要Promise オブジェクトは、ES6 で提案された非同期プログラミングの仕様です。非同期...

CSS3で背景画像にカラーマスクを追加する方法

以前、開発中に背景レイヤーにカラーマスクを追加する必要のあるプロジェクトに遭遇しました。ここでは、背...

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

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

Linux のリンク解除機能とファイルの削除方法

1. リンク解除機能ハード リンクの場合、unlink はディレクトリ エントリを削除し、inode...

新しいカーネルをLinuxシステムに移植する手順

1. ubuntu16.04 イメージと対応する ubuntu16.04 カーネル バージョンのソー...

HTML テーブルタグチュートリアル (24): 行の水平方向の配置属性 ALIGN

水平方向では、行の配置を左、中央、右に設定できます。基本的な構文<TR ALIGN="...

MySQL トリガー構文とアプリケーション例

この記事では、例を使用して MySQL トリガーの構文とアプリケーションを説明します。ご参考までに、...

Uniappの小規模プログラム開発経験

1. 新しいUIプロジェクトを作成するまず、私たちの UI は ColorUI に基づいています。C...

Linux CentOS 7.4 で mysql5.7.20 のパスワードを変更する方法

MySQL がバージョン 5.7 にアップグレードされた後、セキュリティが大幅に向上しました。しかし...

12個のJavascriptテーブルコントロール(DataGrid)が整理されています

DataGrid コントロールの DataSource プロパティがデザイン時に設定されている場合、...

Web コンテンツ ページを作成するための 9 つの実用的なヒント

コンテンツ1. 読者に留まる理由を与える。ウェブページを面白く魅力的なものにしましょう。しかし、まず...

HTML メタタグの小さなコレクション

<Head>……</head> は <HTML> のファイル ヘ...