Vueプロジェクトを大画面に適応させる方法の例

Vueプロジェクトを大画面に適応させる方法の例

レムの簡単な分析

まず、remはCSS単位です。pxの固定ピクセル単位と比較すると、remはより柔軟性があり、vmも比較的優れています。今まで知らなかった方は、まずはご覧になってみてください。

rem 適応型。 CSS3 REMはフォントサイズを設定します

ルート要素のフォント サイズ。

簡単に言えば、rem は HTML 要素のフォント サイズに基づいて計算されます。私たちの要件は、さまざまな解像度に応じて要素のサイズを変更し、非常に快適な視覚効果を実現できることです。 PC 側で作業する場合を考えてみましょう。通常は、中間のサイズを固定します。たとえば、1200 ピクセルです。次に、最小サイズを 1200 ピクセルにして、両側に空白スペースを残します。これにより、拡大または縮小しても効果に影響しません。しかし、現在ではさまざまなモバイル画面が登場し、適応性はさらに高まっています。異なる解像度に応じて HTML のフォント サイズを変更するには、ページに rem を記述します。rem はルート要素のフォント サイズを基準に計算されるため、適応効果を実現できます。

1. 適応方法

適応ソリューションでは、rem レイアウトを使用します。さまざまな画面解像度に応じて、ルート要素 html のフォント サイズが調整されるため、各要素の幅と高さが自動的に変更され、さまざまな画面に適応できます。

2. postcss-px2rem-excludeプラグインを使用する

インストールnpm install postcss-px2rem-exclude --save-dev

プロジェクトのルートディレクトリにpostcss.config.jsファイルを作成します。

モジュール.エクスポート = {
  プラグイン: {
    自動プレフィックス: {},
    'postcss-px2rem-exclude': {
      remユニット: 192
      // 除外: /node_modules|folder_name/i,
    }
  }
}

3. Flexible.js をインストールします(ローカルに配置することを推奨)

インストールコマンド npm install lib-flexible

(関数(win, lib) {
  var doc = win.document
  var docEl = doc.documentElement
  var metaEl = doc.querySelector('meta[name="viewport"]')
  var フレキシブルEl = doc.querySelector('meta[name="フレキシブル"]')
  var dpr = 0
  varスケール = 0
  var tid
  var フレキシブル = lib.フレキシブル || (lib.フレキシブル = {})

  if (メタEl) {
    console.warn('ズーム率は既存のメタタグに従って設定されます')
    var マッチ = metaEl
      .getAttribute('コンテンツ')
      // eslint は次の行を無効にして、無駄なエスケープを禁止します
      .match(/initial\-scale=([\d\.]+)/)
    (一致)の場合{
      スケール = parseFloat(match[1])
      dpr = parseInt(1 / スケール)
    }
  } そうでない場合 (flexibleEl) {
    var コンテンツ = FlexibleEl.getAttribute('コンテンツ')
    if (コンテンツ) {
      // eslint は次の行を無効にして、無駄なエスケープを禁止します
      var initialDpr = content.match(/initial\-dpr=([\d\.]+)/)
      // eslint は次の行を無効にして、無駄なエスケープを禁止します
      var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/)
      (初期Dpr)の場合{
        dpr = parseFloat(初期Dpr[1])
        スケール = parseFloat((1 / dpr).toFixed(2))
      }
      (最大Dpr)の場合{
        dpr = parseFloat(最大Dpr[1])
        スケール = parseFloat((1 / dpr).toFixed(2))
      }
    }
  }

  (!dpr && !スケール){
    // var isAndroid = win.navigator.appVersion.match(/android/gi);
    var isIPhone = win.navigator.appVersion.match(/iphone/gi)
    var デバイスピクセル比 = win.デバイスピクセル比
    if (isIPhone) {
      // iOS では、2 画面と 3 画面の場合は 2 倍のソリューションを使用し、それ以外の場合は 1 倍のソリューションを使用します if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {
        dpr = 3
      } そうでない場合 (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) {
        dpr = 2
      } それ以外 {
        dpr = 1
      }
    } それ以外 {
      // 他のデバイスでは、1xソリューションが引き続き使用されますdpr = 1
    }
    スケール = 1 / dpr
  }

  docEl.setAttribute('data-dpr', dpr)
  if (!metaEl) {
    metaEl = doc.createElement('meta')
    metaEl.setAttribute('名前', 'ビューポート')
    metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no')
    docEl.firstElementChildの場合{
      docEl.firstElementChild.appendChild(metaEl)
    } それ以外 {
      var wrap = doc.createElement('div')
      wrap.appendChild(メタEl)
      doc.write(wrap.innerHTML)
    }
  }

  関数refreshRem() {
    var 幅 = docEl.getBoundingClientRect().width
    (幅 / dpr > 540)の場合{
      幅 = 幅 * dpr
    }
    var rem = 幅 / 10
    docEl.style.fontSize = rem + 'px'
    フレキシブル.rem = win.rem = rem
  }

  win.addEventListener() 関数は、
    「サイズ変更」、
    関数() {
      クリアタイムアウト(tid)
      tid = setTimeout(リフレッシュ間隔、300)
    },
    間違い
  )
  win.addEventListener() 関数は、
    'ページ表示',
    関数(e) {
      if (e.persisted) {
        クリアタイムアウト(tid)
        tid = setTimeout(リフレッシュ間隔、300)
      }
    },
    間違い
  )

  doc.readyState === '完了'の場合{
    doc.body.style.fontSize = 12 * dpr + 'px'
  } それ以外 {
    doc.addEventListener() 関数は、
      'DOMコンテンツがロードされました'、
      関数() {
        doc.body.style.fontSize = 12 * dpr + 'px'
      },
      間違い
    )
  }

  リフレッシュRem()

  フレキシブル.dpr = win.dpr = dpr
  フレキシブル.refreshRem = リフレッシュRem
  フレキシブル.rem2px = 関数(d) {
    var val = parseFloat(d) * this.rem
    (typeof d === 'string' && d.match(/rem$/))の場合{
      val += 'px'
    }
    戻り値
  }
  フレキシブル.px2rem = 関数(d) {
    var val = parseFloat(d) / this.rem
    if (typeof d === 'string' && d.match(/px$/)) {
      val += 'rem'
    }
    戻り値
  }
})(ウィンドウ、ウィンドウ['lib'] || (ウィンドウ['lib'] = {}))

上記のコードはインストールされたflexible.jsとは異なります

修正済み

  関数refreshRem() {
    var 幅 = docEl.getBoundingClientRect().width
    (幅 / dpr > 540)の場合{
      幅 = 幅 * dpr
    }
    var rem = 幅 / 10
    docEl.style.fontSize = rem + 'px'
    フレキシブル.rem = win.rem = rem
  }

main.js にインポートする

'path/flexible.js' をインポートします

要約する

Vue プロジェクトの大画面への適応に関するこの記事はこれで終わりです。Vue の大画面への適応に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • vue+px2rem(rem適応)を使用してPCで大画面適応を実装するためのサンプルコード

<<:  Linux でユーザーにルート権限を追加する方法の概要

>>:  MySQL エラー 1290 (HY000) の解決方法

推薦する

Zabbix redis 自動ポート検出スクリプトは json 形式を返します

自動検出を行う際には、ポートなどの情報を取得してjson形式で返すスクリプトが必ず存在します。Red...

Centos7環境でMySQL 5.6のインスタンスを複数作成する方法の詳細な説明

この記事では、CentOS 7 環境で MySQL 5.6 の複数のインスタンスを作成する方法につい...

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

この記事では、MySQL 8.0.13のインストールと設定のチュートリアルを参考までに紹介します。具...

モバイル Web アプリ上の画像が鮮明ではなく、非常にぼやけているのはなぜですか?

なぜ?最も簡単に言えば、ピクセルは均等ではないということです。携帯電話に表示される写真はとても繊細に...

CSS3はトランジション効果を実現するためにtransitionプロパティを使用する。

物件の詳細な説明transition 属性の目的は、一部の CSS プロパティ (背景など) をスム...

Linux環境にJDK1.8をインストールする

目次1. インストール環境2. インストール手順ステップ1: インストールパッケージをダウンロードす...

Reactフックの仕組み

目次1. React フックと純粋関数2. シンプルなmyUseState 3. myUseStat...

JDKネイティブスレッドプールのバグを修正するTomcatの実装原理

処理能力と同時実行性を向上させるために、Web コンテナは通常、リクエストを処理するタスクをスレッド...

WeChatアプレットリクエストの前処理方法の詳細な説明

質問一部のページでは、onload でデータを要求してからビューをレンダリングするため、ミニプログラ...

Linux でのプロセスデーモン スーパーバイザーのインストール、構成、および使用

Supervisor は非常に優れたデーモン管理ツールです。自動起動、ログ出力、自動ログカットなど、...

Dockerイメージを構築する2つの方法

目次既存のイメージからイメージを更新します。イメージを最初から構築する: Docker イメージ リ...

Ubuntu16.04にclionをインストールするプロセス全体と手順の詳細な説明

CLion のプロセス全体を最初から説明します。CLion は、JetBrains がリリースした新...

Dockerコンテナはルーティングを介して直接通信し、ネットワーク通信を実現します。

概要Docker 自体の現在のデフォルト ネットワークについては、単一ホスト上の異なる Docker...

vue+drf+サードパーティのスライディング検証コードアクセスの実装

目次1. 背景2. 検証プロセス3. 検証を作成する4. フロントエンドコード4.1 コアjsファイ...

DOSBox を起動後に自動的にコマンドを実行する方法

DOSBox を使用すると、Windows で DOS をシミュレートし、楽しい作業を行うことができ...