rem 原点: ルート要素のフォント サイズ。rem は単位であり、単位サイズは第一世代の祖先の font-size のサイズによって決まります。現在、フロントエンドのプログラマーは、すべての画面で健全な Web ページを表示するために、自分自身の健全性を黙って犠牲にしています。なぜなら、レムが単位であることを知る必要があるだけでなく、さらに重要なことに、異なる解像度でページをレンダリングする方法を知る必要があるからです。非常に注意が必要です。
事故の原因:
1.px単位はPCで非常に人気があります。モバイル画面を見ると、MLGBは同じ12pxですが、アリのように小さいです。
2. iPhone 4でようやく正常に調整した後、Chrysanthemumブランドの携帯電話に変更したところ、MBDが見苦しくなりました。
3. rem の使い方は分かったけど、html の適切なフォントサイズはどれくらいですか?
それでは、これらの問題を解決しましょう。
問題を解決する前に、知りたくないかもしれないいくつかのことを理解してください (警告: これらを理解していないと、真実を知ることはできません~):
1.物理ピクセル
私たちが見るすべての画面は、肉眼では見るのが難しい小さな粒子 (物理ピクセル) で構成されています。
2. 論理ピクセル
は、コンピューター座標系の点であり、プログラムで使用できる仮想ピクセル (CSS ピクセルなど) を表します。
3. デバイスのピクセル比率 (デバイスのピクセル比率) は、DPR と呼ばれます
その値は、物理ピクセルと論理ピクセルの関係を反映しています。デバイスの DPR のサイズは、次の式を使用して計算できます。式:
DPR = 物理像素 / 逻辑像素
以上の概念を理解すると、CSS が PC では font-size=12px;
と表示されているのに、携帯電話に切り替えると小さくなる理由がわかるでしょうか。 DPRのせいでお兄さん~。 font-size=12px;
但是换到手机上却变小了?因为DPR啊啊啊,大哥~。
没错,我们在电脑屏幕上的DPR是1,但是手机却不同,可能是它可能是2,也可能是3。获取设备DPR的方法还是有的:
1.在JavaScript中,通过window.devicePixelRatio
来获取
2.在css中,可以通过-webkit-device-pixel-ratio
,-webkit-min-device-pixel-ratio
和 -webkit-max-device-pixel-ratio
进行媒体查询,对不同DPR的设备,做一些样式适配(这里只针对webkit内核的浏览器和webview)。
本人也在网上看了不少动态设置rem的文章,下面把几个常用的列举出来:
一,用媒体查询来设置html的font-size:
@media screen and (min-width: 320px) {html {font-size: 14px;} } @media screen and (min-width: 360px) {html {font-size: 16px;} } @media screen and (min-width: 400px) {html {font-size: 18px;} } @media screen and (min-width: 440px) {html {font-size: 20px;} } @media screen and (min-width: 480px) {html {font-size: 22px;} } @media screen and (min-width: 640px) {html {font-size: 28px;} }
二、利用js来动态设置
!(function(doc, win) {var docEle = doc.documentElement, evt = "onorientationchange" in window ? "orientationchange" : "resize", fn = function() {var width = docEle.clientWidth; width && (docEle.style.fontSize = 20 * (width / 320) + "px"); }; win.addEventListener(evt, fn, false); doc.addEventListener("DOMContentLoaded", fn, false); }(document, window));
我要说的是最后一种,也是我认为目前比较好的实现方法:
利用js计算当前设备的DPR,动态设置在html标签上,并动态设置html的font-size
window.devicePixelRatio
を通じて取得します🎜🎜🎜 2. CSS では、-webkit- を通じて取得できます。 device-pixel-ratio
、-webkit-min-device-pixel-ratio
、および -webkit-max-device-pixel-ratio
は、さまざまなメディア クエリを実行します。 DPR デバイスでは、スタイルの調整が行われます (これは、Webkit コアを備えたブラウザーと Web ビューのみに適用されます)。 🎜🎜🎜🎜 また、インターネット上で rem の動的設定に関する記事をたくさん読みました。一般的に使用されている記事をいくつか紹介します。 🎜🎜🎜 🎜🎜🎜 まず、メディア クエリを使用して HTML のフォント サイズを設定します。 <span style="font-size: 18px"><code>!<span class="hljs-function"><span class="hljs-keyword">function(<span class="hljs-params">win, lib) {<span class="hljs-keyword">var timer, doc = win.document, docElem = doc.documentElement, vpMeta = doc.querySelector(<span class="hljs-string">'meta[name="viewport"]'), flexMeta = doc.querySelector(<span class="hljs-string">'meta[name="flexible"]'), dpr = <span class="hljs-number">0, scale = <span class="hljs-number">0, flexible = lib.flexible || (lib.flexible = {}); <span class="hljs-comment">// 设置了 viewport meta<span class="hljs-keyword">if (vpMeta) { <span class="hljs-built_in">console.warn(<span class="hljs-string">"将根据已有的meta标签来设置缩放比例");<span class="hljs-keyword">var initial = vpMeta.getAttribute(<span class="hljs-string">"content").match(<span class="hljs-regexp">/initial\-scale=([\d\.]+)/); <span class="hljs-keyword">if (initial) { scale = <span class="hljs-built_in">parseFloat(initial[<span class="hljs-number">1]); <span class="hljs-comment">// 已设置的 initialScale dpr = <span class="hljs-built_in">parseInt(<span class="hljs-number">1 / scale); <span class="hljs-comment">// 设备像素比 devicePixelRatio } }<span class="hljs-comment">// 设置了 flexible Meta<span class="hljs-keyword">else <span class="hljs-keyword">if (flexMeta) {<span class="hljs-keyword">var flexMetaContent = flexMeta.getAttribute(<span class="hljs-string">"content");<span class="hljs-keyword">if (flexMetaContent) { <span class="hljs-keyword">var initial = flexMetaContent.match(<span class="hljs-regexp">/initial\-dpr=([\d\.]+)/), maximum = flexMetaContent.match(<span class="hljs-regexp">/maximum\-dpr=([\d\.]+)/); <span class="hljs-keyword">if (initial) { dpr = <span class="hljs-built_in">parseFloat(initial[<span class="hljs-number">1]); scale = <span class="hljs-built_in">parseFloat((<span class="hljs-number">1 / dpr).toFixed(<span class="hljs-number">2)); } <span class="hljs-keyword">if (maximum) { dpr = <span class="hljs-built_in">parseFloat(maximum[<span class="hljs-number">1]); scale = <span class="hljs-built_in">parseFloat((<span class="hljs-number">1 / dpr).toFixed(<span class="hljs-number">2)); } } } <span class="hljs-comment">// viewport 或 flexible<span class="hljs-comment">// meta 均未设置<span class="hljs-keyword">if (!dpr && !scale) {<span class="hljs-comment">// QST<span class="hljs-comment">// 这里的 第一句有什么用 ?<span class="hljs-comment">// 和 Android 有毛关系 ?<span class="hljs-keyword">var u = (win.navigator.appVersion.match(<span class="hljs-regexp">/android/gi), win.navigator.appVersion.match(<span class="hljs-regexp">/iphone/gi)), _dpr = win.devicePixelRatio; <span class="hljs-comment">// 所以这里似乎是将所有 Android 设备都设置为 1 了 dpr = u ? ( (_dpr >= <span class="hljs-number">3 && (!dpr || dpr >= <span class="hljs-number">3)) ? <span class="hljs-number">3 : (_dpr >= <span class="hljs-number">2 && (!dpr || dpr >= <span class="hljs-number">2)) ? <span class="hljs-number">2 : <span class="hljs-number">1 ) : <span class="hljs-number">1; scale = <span class="hljs-number">1 / dpr; } docElem.setAttribute(<span class="hljs-string">"data-dpr", dpr); <span class="hljs-comment">// 插入 viewport meta<span class="hljs-keyword">if (!vpMeta) { vpMeta = doc.createElement(<span class="hljs-string">"meta"); vpMeta.setAttribute(<span class="hljs-string">"name", <span class="hljs-string">"viewport"); vpMeta.setAttribute(<span class="hljs-string">"content",<span class="hljs-string">"initial-scale=" + scale + <span class="hljs-string">", maximum-scale=" + scale + <span class="hljs-string">", minimum-scale=" + scale + <span class="hljs-string">", user-scalable=no"); <span class="hljs-keyword">if (docElem.firstElementChild) { docElem.firstElementChild.appendChild(vpMeta) } <span class="hljs-keyword">else {<span class="hljs-keyword">var div = doc.createElement(<span class="hljs-string">"div"); div.appendChild(vpMeta); doc.write(div.innerHTML); } } <span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">setFontSize(<span class="hljs-params">) {<span class="hljs-keyword">var winWidth = docElem.getBoundingClientRect().width; <span class="hljs-keyword">if (winWidth / dpr > <span class="hljs-number">540) { (winWidth = <span class="hljs-number">540 * dpr); } <span class="hljs-comment">// 根节点 fontSize 根据宽度决定<span class="hljs-keyword">var baseSize = winWidth / <span class="hljs-number">10; docElem.style.fontSize = baseSize + <span class="hljs-string">"px"; flexible.rem = win.rem = baseSize; } <span class="hljs-comment">// 调整窗口时重置 win.addEventListener(<span class="hljs-string">"resize", <span class="hljs-function"><span class="hljs-keyword">function(<span class="hljs-params">) { clearTimeout(timer); timer = setTimeout(setFontSize, <span class="hljs-number">300); }, <span class="hljs-literal">false); <span class="hljs-comment">// 这一段是我自己加的<span class="hljs-comment">// orientationchange 时也需要重算下吧 win.addEventListener(<span class="hljs-string">"orientationchange", <span class="hljs-function"><span class="hljs-keyword">function(<span class="hljs-params">) { clearTimeout(timer); timer = setTimeout(setFontSize, <span class="hljs-number">300); }, <span class="hljs-literal">false); <span class="hljs-comment">// pageshow<span class="hljs-comment">// keyword: 倒退 缓存相关 win.addEventListener(<span class="hljs-string">"pageshow", <span class="hljs-function"><span class="hljs-keyword">function(<span class="hljs-params">e) {<span class="hljs-keyword">if (e.persisted) { clearTimeout(timer); timer = setTimeout(setFontSize, <span class="hljs-number">300); } }, <span class="hljs-literal">false); <span class="hljs-comment">// 设置基准字体<span class="hljs-keyword">if (<span class="hljs-string">"complete" === doc.readyState) { doc.body.style.fontSize = <span class="hljs-number">12 * dpr + <span class="hljs-string">"px"; } <span class="hljs-keyword">else { doc.addEventListener(<span class="hljs-string">"DOMContentLoaded", <span class="hljs-function"><span class="hljs-keyword">function(<span class="hljs-params">) { doc.body.style.fontSize = <span class="hljs-number">12 * dpr + <span class="hljs-string">"px"; }, <span class="hljs-literal">false); } setFontSize(); flexible.dpr = win.dpr = dpr; flexible.refreshRem = setFontSize; flexible.rem2px = <span class="hljs-function"><span class="hljs-keyword">function(<span class="hljs-params">d) {<span class="hljs-keyword">var c = <span class="hljs-built_in">parseFloat(d) * <span class="hljs-keyword">this.rem;<span class="hljs-keyword">if (<span class="hljs-string">"string" == <span class="hljs-keyword">typeof d && d.match(<span class="hljs-regexp">/rem$/)) { c += <span class="hljs-string">"px"; }<span class="hljs-keyword">return c; }; flexible.px2rem = <span class="hljs-function"><span class="hljs-keyword">function(<span class="hljs-params">d) {<span class="hljs-keyword">var c = <span class="hljs-built_in">parseFloat(d) / <span class="hljs-keyword">this.rem; <span class="hljs-keyword">if (<span class="hljs-string">"string" == <span class="hljs-keyword">typeof d && d.match(<span class="hljs-regexp">/px$/)) { c += <span class="hljs-string">"rem"; }<span class="hljs-keyword">return c; } }(<span class="hljs-built_in">window, <span class="hljs-built_in">window.lib || (<span class="hljs-built_in">window.lib = {}));<br/><br/></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>手机淘宝很多页面用的就是这种方法来适配终端的。<br/><br/><br/><br/></span>🎜 🎜2番目に、jsを使用して🎜🎜rrreee🎜🎜を動的に設定します。私が言いたいのは最後の方法です。現時点ではこれがより良い実装方法だと思います: 🎜🎜🎜JSを使用して現在のデバイスのDPRを計算します。それをHTMLタグに動的に設定し、HTMLの
font-size
を動的に設定し、CSSセレクターを使用してDPRに応じて異なるDPRでフォントサイズを設定します(この方法は非常に良いです〜)。 🎜🎜りー以上がモバイル端末でのフォントサイズの動的設定例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

HTMLは、Webページを構築するために使用される言語であり、タグと属性を使用してWebページの構造とコンテンツを定義します。 1)htmlは、などのタグを介してドキュメント構造を整理します。 2)ブラウザはHTMLを分析してDOMを構築し、Webページをレンダリングします。 3)マルチメディア関数を強化するなど、HTML5の新機能。 4)一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれます。 5)最適化の提案には、セマンティックタグの使用とファイルサイズの削減が含まれます。

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

HTMLの役割は、タグと属性を使用してWebページの構造とコンテンツを定義することです。 1。HTMLは、読みやすく理解しやすいようなタグを介してコンテンツを整理します。 2。アクセシビリティとSEOを強化するには、セマンティックタグなどを使用します。 3. HTMLコードの最適化により、Webページの読み込み速度とユーザーエクスペリエンスが向上する可能性があります。

HTML、CSS、およびJavaScriptは、Web開発の3つの柱です。 1。HTMLは、Webページ構造を定義し、などなどのタグを使用します。2。CSSは、色、フォントサイズなどのセレクターと属性を使用してWebページスタイルを制御します。

HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

HTMLは、簡単に学習しやすく、結果をすばやく見ることができるため、初心者に適しています。 1)HTMLの学習曲線はスムーズで簡単に開始できます。 2)基本タグをマスターして、Webページの作成を開始します。 3)柔軟性が高く、CSSおよびJavaScriptと組み合わせて使用できます。 4)豊富な学習リソースと最新のツールは、学習プロセスをサポートしています。

Anexampleapalofastartingtaginhtmlis、それはaperginsaparagraph.startingtagsaresentionentientiontheyinitiateelements、definetheirtypes、およびarecrucialforurturingwebpagesandcontingthomedomを構築します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
