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 をデプロイするチュートリアル

推薦する

IntelliJ IDEA で Java を使用して MySQL データベースに接続する方法の詳細な説明

1. MySQLデータベースをダウンロードし、インストールして設定するダウンロードアドレス: htt...

MySQL 5.7 以降のバージョンのダウンロードとインストールのグラフィック チュートリアル

1. ダウンロード1. MySQL公式サイトのダウンロードアドレス: https://downloa...

WeChatアプレットがシンプルな計算機機能を実装

この記事では、WeChatアプレットの計算機機能を実装するための具体的なコードを参考までに紹介します...

ウェブデザインと制作の一般的な原則をまとめる

<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案、W...

Baotaパネルを再起動すると、「-ModuleNotFoundError: No module named 'geventwebsocket'」というメッセージが表示されます。

背景:サーバーがFlaskプロジェクトをデプロイし、python3をインストールしたため、再起動時に...

Vueでスワイパープラグインを使用する際の問題を解決する

デモを作成するときにこのプラグインを使用していくつか問題が発生したため、プラグインの使用方法といくつ...

JavaScript 配列の include と Reduce の基本的な使用法

目次序文配列.プロトタイプ.includes文法パラメータ戻り値例配列プロトタイプの削減文法パラメー...

nginx/apache 静的リソースのクロスドメインアクセスの問題を解決する詳細な説明

1. Apache 静的リソースのクロスドメイン アクセスApache設定ファイルhttpd.con...

Dockerコンテナの状態変換の実装

Dockerコンテナの状態遷移図2度目の実戦 [root@localhost ~]# docker ...

CentOS7でパーティションのサイズを変更する方法

昨日、ある人のシステムのインストールを手伝ったのですが、自動パーティション分割をクリックするのを忘れ...

tomcat8の最新のLinuxインストールプロセス

ダウンロード参考:ダウンロードするコアパッケージを選択してくださいダウンロード後、ファイルをサーバー...

mysql-8.0.16 winx64 最新インストール チュートリアル (画像とテキスト付き)

最近、データベースについて学び始めました。最初にやったことは、データベースとは何か、データベースとデ...

HTML で Web ページに動的な時計を書く

HTML を使用して動的な Web クロックを作成します。コードは次のとおりです。 <!DOC...

webpack -v エラー解決

背景webpackのバージョンを確認したいのですが、webpack -vを実行するとエラーが報告され...

Vueは新しいウィンドウを開き、パラメータ転送のグラフィック例を実装します。

私が実現したい機能は、新しいウィンドウを開いて新しいページを表示することですが、パラメータを渡す必要...