rem をモバイル デバイスに適応させる方法の例

rem をモバイル デバイスに適応させる方法の例

序文

モバイル端末のREM適応ソリューションのレビューと概要

remの使い方

rem 単位の計算は、HTML のルート ノードのフォント サイズを参照します。ルート ノードのフォントが変更されると、レイアウトによって参照される rem ページもそれに応じて拡大縮小されます。これが rem レイアウトの本質です。

1. HTMLのフォントサイズの値を動的に変更する

ほぼすべてのブラウザは HTML のフォント サイズを 16px に初期化します。動的に変更したい場合は、rem によって適応されたルート ノードのフォント サイズの初期値として 16px を一時的に設定できます。

では、動的な変更にはどのように適応すればよいのでしょうか?

デザインの幅が 750 ピクセルであると仮定し、レイアウトに 1rem = 16 ピクセルの単位を使用するように定義しますが、どのように適応すればよいでしょうか?

Chrome 上の iPhone シミュレーターの幅は 375px で、これはデザイン案のちょうど半分です。 暗算すると、そのときの 1rem は初期化時の HTML ノードのフォント サイズの半分、つまり newFontSize = 16/2 = 8px に等しいはずです。 半分ずつに適合しているのではないでしょうか。

ここから、デザイン ドラフトの幅 / 16 px = 適応するデバイスの幅 / 8 px という式が得られます。新しいフォント サイズは、現在のデバイスの幅と元のデザイン ドラフトの幅に基づいて比例して拡大縮小されることがわかります。

最後に、newFontSize = 16px * 適応するデバイスの幅 / 元のデザインの幅

(関数(doc, win) {
  var resizeEvt =
      ウィンドウ内の「orientationchange」?「orientationchange」:「resize」、
    setRemResponse = 関数() {
      var vM = 750;
      var vfontSize = 16;
      var html = doc.documentElement;
      var newfontSize = (vfontSize * html.clientWidth) / vM;
      html.style.fontSize = 新しいフォントサイズ + "px";
    };
  doc.addEventListener("DOMContentLoaded", setRemResponse, false);
  win.addEventListener(resizeEvt、setRemResponse、false);
})(ドキュメント、ウィンドウ);

2. 実際の使用

測定されたbtnボタンスタイルをpxからremに変換する

.btn{
  幅: 699px; /* 699/16 => 43.6875rem; */
  高さ: 90px; /* 90/16px => 5.625rem; */
  背景: rgba(90, 173, 246, 1);
  境界線の半径: 6px; /* 6/16=> 0.375rem; */
}

計算が面倒すぎるので、計算処理の代わりにscssを使って関数を定義します。

@function pxToRem($initialStyle) {
  @return $initialStyle/16 * 1rem;
}

上記の CSS は次のように書き換えられます。

.btn{
  幅: pxToRem(699);
  高さ:pxToRem(90);
  背景: rgba(90, 173, 246, 1);
  境界線の半径:pxToRem(6);
}

補足: vscodeのプラグインcssremは、css、scssに入力したpxをrem単位に変換する計算をサポートしています。デフォルトのフォントサイズは16pxに設定されています。

計算方法の変更、暗算の残余

1. 簡単な分析

前のセクションを分析すると、最終的にnewFontSize = 16px * 適応するデバイスの幅 / 元のデザインの幅が得られます。

計算するたびに 16 で割るのは非常に面倒です。初期の HTML ルート ノードの font-size を計算しやすいように変更すると、最終的には除数として機能するため、どのような値になるでしょうか。100 の方が便利ですか。それは正しい!

定数 oHtml = document.documentElement;
定数 clientWidth = oHtml.clientWidth;
var vM = 750;
var vfontSize = 100;
// モバイルデバイス oHtml.style.fontSize = (vfontSize * clientWidth) / vM + "px";

2. 実際の使用

引き続き、上記の使い慣れたボタンを使用して、px を rem に変換し、結果を頭の中で計算します。

.btn{
  幅: 699px; /* 699/100 => 6.99rem; */
  高さ: 90px; /* 90/100 => 0.9rem; */
  背景: rgba(90, 173, 246, 1);
  境界線の半径: 6px; /* 6/100=> 0.06rem; */
}

正直に言うと、scss があると本当に便利です!

@function を100倍に減らす($initialStyle) {
  @return $initialStyle/100 * 1rem;
}

上記の CSS 関数メソッドは次のように書き換えられます。

.btn{
  幅: 縮小100(699);
  高さ:縮小100(90);
  背景: rgba(90, 173, 246, 1);
  境界線の半径:縮小100(6);
}

どうですか、レムはそんなに簡単なんですね! ! !

ユーティリティ関数

上記のどちらの方法も選択できます。結局のところ、JavaScript の実行効率は悪くありません!

(関数(doc, win) {
  var resizeEvt =
      ウィンドウ内の「orientationchange」?「orientationchange」:「resize」、
    setRemResponse = 関数() {
      var vM = 750;
      var vfontSize = 16;
      var html = doc.documentElement;
      var newfontSize = (vfontSize * html.clientWidth) / vM;
      html.style.fontSize = 新しいフォントサイズ + "px";
    };
  doc.addEventListener("DOMContentLoaded", setRemResponse, false);
  win.addEventListener(resizeEvt、setRemResponse、false);
})(ドキュメント、ウィンドウ);

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  Dockerコンテナの中国語言語パックの設定の問題を解決する

>>:  Vue のドロップダウン ボックスのセカンダリ リンク効果を実装するためのサンプル コード

推薦する

MySQLデータを復元する2つの方法

1. はじめに少し前、開発者がテスト環境や本番環境で誤った操作をし、データベースを誤って削除/更新し...

Linux で JDK をインストールして環境変数を設定する方法 (この記事で十分です)

目次1. Linuxのビット数を確認する2. JDKをダウンロードする3. JDKをインストールする...

WindowsにMySQL5.7圧縮パッケージを素早くインストールする

この記事では、Windows に MySQL 5.7 圧縮パッケージをインストールする方法について説...

Linux の総合システム監視ツール dstat の詳細な例

オールラウンドなシステム監視ツール dstat dstat は、vmstat、iostat、nets...

LinuxでSVNサーバーを構築する方法

1: SVNをインストールする yum インストール -y サブバージョン2. 倉庫を作る1: 倉庫...

Reactは一般的なスケルトン画面コンポーネントの例を実装します

目次スケルトンスクリーンとは何ですか?デモデザインのアイデア具体的な実装スケルトンスクリーンとは何で...

Vue のスロットスコープの詳細な理解(初心者向け)

Baidu には slot-scope に関する記事が既にたくさんありますが、以前よく学習しておら...

Nginx を使用してポート転送 TCP プロキシを実装する例

目次需要背景Nginx を使用する理由は何ですか? Nginx によるポート転送依存関係をインストー...

Linuxでファイルを削除してもスペースが解放されない問題の対処方法

問題の背景業務システムのサーバ監視システムからディスク使用率が90%に達したという早期警告通知が来た...

Dockerコンテナを閉じずに終了する方法の詳細な説明

Docker コンテナに入った後、コンテナを終了すると、コンテナは Exited 状態に変わります。...

Tomcatサーバーのセキュリティ設定方法

Tomcat は、Java Community Process を通じて Sun が開発した、広く使...

フレックスレイアウトを使用してページレイアウトを簡単に実装するためのサンプルコード

では、早速コードを見てみましょう。 1. 上部、中央、下部のレイアウト: <!DOCTYPE ...

最も完全なpackage.json分析

目次1. 概要2. 名前フィールド3. バージョンフィールド4. 説明フィールド5. キーワードフィ...

CSS 要素の非表示の原則と display:none および visibility:hidden

1. CSS 要素の非表示<br />CSS では、要素を非表示にする (つまり、画面の...

docker インストール後に hello-world を実行する問題を解決する

yumを使用してcentos7.3にDocker V1.13.1をインストールしましたしかし、doc...