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 のドロップダウン ボックスのセカンダリ リンク効果を実装するためのサンプル コード

推薦する

Windows でのシンプルな Mysql バックアップ BAT スクリプトの共有

序文この記事では、Windows で Mysql をバックアップするための簡単な BAT スクリプト...

MySQL 分離レベルの詳細な説明と例

目次MySQL の 4 つの分離レベルデータ テーブルを作成します。分離レベルの設定物事の分離レベル...

LeetCode の SQL 実装 (181. 従業員は管理職よりも収入が高い)

[LeetCode] 181.従業員の収入が管理職よりも多い従業員テーブルには、マネージャーを含む...

FileZilla_Server:425 データ接続を開けない問題を解決する方法

FileZilla Serverをサーバーにインストールすると、425データ接続を開けない問題が発生...

Centos7 で yum を使用して Mysql5.7.19 をインストールする詳細な手順

Centos7 の yum ソースには、mysql の代わりに mariaDB が使用されているため...

複数の X 軸を使用して 7 日間の天気予報を実現するための Echarts サンプル コード

目次UIデザインEcharts の例の効果序文サンプルコード最終結果UIデザイン Echarts の...

フロントエンド プロジェクトのデフォルトのスクロール バー スタイルを変更する (概要)

スクロールバーのデフォルトスタイルを変更する必要があるプロジェクトを多数作成しましたが、プラグインを...

Linux redis-Sentinel 設定の詳細

ダウンロードダウンロードアドレス: https://redis.io/download /usr/l...

Vueは州、都市、地区のカスケード選択を実現します

最近、省、市、地区のカスケード選択効果を実装する必要があります。省、市、地区のデータはすべてローカル...

MySQL ストレステストツールの使い方

1. MySQL 独自のストレステストツール - Mysqlslap mysqlslap は、mys...

JS はシンプルな todoList (メモ帳) 効果を実装します

メモ帳プログラムは、HTML + CSS + JavaScript の 3 つの主要なフロントエンド...

初心者がHTMLタグを学ぶ(1)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

フロントエンドインタビューに必要なホモロジーとクロスドメインの詳細な説明

序文ご存知のとおり、ブラウザの相同性戦略とクロスドメイン方式も、フロントエンド面接で頻繁に遭遇する問...

MySQLデッドロック問題の詳細な分析

序文私たちのビジネスがまだ初期段階にあり、同時実行の度合いが比較的低い場合、数年間はデッドロックの問...

Vue コードの読みやすさに関するいくつかの提案

目次1. コンポーネントをうまく活用してコードを整理する1. UIコンポーネントを抽出する2. モジ...