序文 モバイル端末の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 のドロップダウン ボックスのセカンダリ リンク効果を実装するためのサンプル コード
1. はじめに少し前、開発者がテスト環境や本番環境で誤った操作をし、データベースを誤って削除/更新し...
目次1. Linuxのビット数を確認する2. JDKをダウンロードする3. JDKをインストールする...
この記事では、Windows に MySQL 5.7 圧縮パッケージをインストールする方法について説...
オールラウンドなシステム監視ツール dstat dstat は、vmstat、iostat、nets...
1: SVNをインストールする yum インストール -y サブバージョン2. 倉庫を作る1: 倉庫...
目次スケルトンスクリーンとは何ですか?デモデザインのアイデア具体的な実装スケルトンスクリーンとは何で...
Baidu には slot-scope に関する記事が既にたくさんありますが、以前よく学習しておら...
目次需要背景Nginx を使用する理由は何ですか? Nginx によるポート転送依存関係をインストー...
問題の背景業務システムのサーバ監視システムからディスク使用率が90%に達したという早期警告通知が来た...
Docker コンテナに入った後、コンテナを終了すると、コンテナは Exited 状態に変わります。...
Tomcat は、Java Community Process を通じて Sun が開発した、広く使...
では、早速コードを見てみましょう。 1. 上部、中央、下部のレイアウト: <!DOCTYPE ...
目次1. 概要2. 名前フィールド3. バージョンフィールド4. 説明フィールド5. キーワードフィ...
1. CSS 要素の非表示<br />CSS では、要素を非表示にする (つまり、画面の...
yumを使用してcentos7.3にDocker V1.13.1をインストールしましたしかし、doc...