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) の解決方法

推薦する

CSS マルチレベルメニュー実装コード

これは、Web ページを Windows のスタート メニューなどのデスクトップ プログラムのように...

HTMLプログラミングタグとドキュメント構造の詳細な説明

HTML を使用してコンテンツをマークアップする目的は、Web ページにセマンティクスを与えることで...

イメージを再構築せずにDockerにポートを動的に追加する方法

操作中に Docker コンテナの公開ポートを変更または追加する必要がある場合がありますが、実行中の...

CSS3 でテキストの点滅効果を実現する 3 つの方法 サンプルコード

1. 透明度を変更してテキストを徐々に点滅させると、次のような効果が得られます。 <!DOCT...

HTMLにビデオを挿入してすべてのブラウザと互換性を持たせる方法

HTML にビデオを挿入するために最もよく使用される方法は 2 つあります。1 つは古い <o...

Tomcatのデフォルトプログラム公開パスの使用と変更についての説明

tomcat7 のデフォルトのプログラム公開パスは tomcat/webapps/ROOT/ です。...

Linux での screen コマンドの使用方法の詳細な説明

GUNスクリーン:公式サイト: http://www.gnu.org/software/screen...

リンクAの意味論、書き方、ベストプラクティス

リンク A のセマンティクス、ライティング スタイル、およびベスト プラクティス。私は JavaEy...

Linux ソフトウェアのインストール場所を確認する簡単な方法

1. ソフトウェアのインストールパスを確認します。 Linuxソフトウェアをインストールできる場所は...

最も単純な ErrorBoundary コンポーネントをカプセル化して、React 例外を処理する

序文React 16から、子コンポーネントで発生したエラーを捕捉し、エラーログを記録し、ダウングレー...

IE5.0以降のHTCコンポーネントの定義の概要

Microsoft IE 5.0 がリリースされる前は、Web プログラミングにおける最大の課題は、...

MySQLデータベースの使用仕様の概要

導入: MySQL データベースの仕様に関しては、皆さんも何らかのドキュメントを読んだことがあると思...

MySQL NULLデータ変換方法(必読)

MySQL を使用してデータベースをクエリし、左結合を実行すると、関連付けられたフィールドの一部に...

入力できない無効な値はアクションレイヤーに渡すことができません

フォームを入力不可にしたい場合は、フォームを次のように設定します。コードをコピーコードは次のとおりで...