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

推薦する

MySql ストレージ エンジンとインデックスに関する知識のまとめ

ストレージエンジンデータベース ストレージ エンジンとは何ですか?データベース エンジンは、データベ...

MySQLのパスワードを忘れた場合の対処方法

MySQL パスワードを忘れた場合の解決策: [root@localhost ~]# mysql -...

MySQL スケジュールタスク (EVENT イベント) を詳細に設定する方法

目次1. イベントとは何ですか? 2. 「イベント」機能を有効にする1. 機能が有効になっているかど...

nginxリバースプロキシwebSocket設定の詳細な説明

最近、プロジェクトで作業しているときに webSocket プロトコルを使用し、WeChat アプレ...

VMware Workstation に Windows Server 2019 をインストールする (グラフィック チュートリアル)

キーの入力を求められた場合は、[キーがありません]を選択します。デスクトップエクスペリエンスを選択す...

アコーディオンセカンダリメニューを実装するためのjQueryプラグイン

この記事では、jQueryプラグインを使用してアコーディオンセカンダリメニューを作成します。具体的な...

CSSはBEM命名規則の実践を使用する

クラスを見るとき、どのような情報を得たいですか?このクラスはどこで使用され、その機能は何ですか?この...

vue-cropper を使用して vue で写真をトリミングする方法をご存知ですか?

目次1. インストール: 2. 使用方法: 3. 組み込みメソッド: 4. 使用方法:要約する公式サ...

Win10 64 ビットで圧縮パッケージを使用して最新の MySQL 8.0.18 をインストールするチュートリアル (画像とテキスト付き)

WIN10 64ビットに最新のMySQL8.0.18をインストールダウンロード公式サイトから最新バ...

XMLとCSSスタイルの組み合わせ

学生.xml <?xml バージョン="1.0" エンコーディング=&qu...

Centos7.5でのIPアドレス設定の実装

1. IPアドレスを設定する前に、まずifconfigを使用してネットワークカード情報を表示し、ネッ...

時間のかかるMySQLレコードのSQL例の詳細な説明

mysqlは時間のかかるSQLを記録しますMySQL は、最適化と分析のために、時間のかかる SQL...

Faint: 「Web2.0 を使用して標準に準拠したページを作成する」

今日、ある人がウェブサイト開発プロジェクトについて話をしてくれました。具体的な要件について話すと、「...

dockerfile における ENTRYPOINT と CMD の組み合わせと違い

前回の記事【dockerコンテナのためのdockerfileを詳しく解説】では、dockerfile...

Webデザインの経験: Webコードを効率的に書く

本来、この第 7 章では、デザインにおけるレイヤーと空間テクニックについて深く議論するはずです。しか...