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

推薦する

MySQLコンテナ間のレプリケーション構成例の詳細な説明

背景先週、会社で MySQL レプリケーションのトレーニングを受けたので、今週末は学んだことを実践す...

JavaScript での && および || 演算子の使用例

目次序文&& 演算子|| 演算子|| 演算子の簡単なデモ章の目的ケース演習(json...

Vueプロジェクトでのトークン検証ログイン(フロントエンド部分)

この記事の例では、Vueプロジェクトでのトークン検証ログインの具体的なコードを参考までに共有していま...

Docker+nacos+seata1.3.0 のインストールと使用設定チュートリアル

これに先立ち、1日かけてやってみました。Seataは使い方が簡単で超シンプルですが、インストールや設...

HTMLページにビデオを挿入する方法の概要

ページでビデオ タグを使用する場合は、Ogg Theora または VP8 (これに問題がない場合)...

Vue の基本 MVVM、テンプレート構文、データバインディング

目次1. Vueの概要Vue公式サイトMVVM アーキテクチャ パターンVue の紹介2. Vueを...

JavaScript は setTimeout を使用してカウントダウン効果を実現します

JavaScript ネイティブ コードの記述能力を高め、setTimeout() の使用を強化する...

フックを使用して React コンポーネントを書くときに注意すべき 5 つの点

目次01. レンダリングが不要な場合はuseStateを使用する02. リンクの代わりにrouter...

Vue3はフロントエンドのログを出力するためにaxiosインターセプターを使用する

目次1. はじめに2. axiosインターセプターを使用してフロントエンドログを出力する1. はじめ...

JS ES の新機能、変数分離割り当て

目次1. 配列の分離割り当て1.1 配列分離割り当てとは何ですか? 1.2 配列分離割り当てに失敗し...

MySQL 5.5.27 winx64 のインストールと設定方法のグラフィックチュートリアル

1. インストールパッケージMYSQLサービスダウンロードアドレス:MySQL公式サイトからダウンロ...

CSS でフロートをクリアするための完全ガイド (要約)

1. 親divは疑似クラスafterとzoomを定義します <スタイル タイプ="...

ウェブフロントエンドエンジニアにおすすめのヒント

まず、Webフロントエンドエンジニアの価値についてお話ししましょう。現在、Web製品のインタラクショ...

https暗号化アクセス用にnginxを設定するための詳細なチュートリアル

環境: 1 CentOS Linux リリース 7.5.1804 (コア)ファイアウォールと sel...

MYSQL updatexml() 関数のエラーインジェクション分析

まず、updatexml()関数を理解する UPDATEXML (XML ドキュメント、XPath ...