rem适配还原设计稿,合理的换算方式

      发布在:前端技术      评论:0 条评论
<p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal;"><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">假设设计妹妹给我们的设计稿尺寸为 750 * 1500 。结合网易移动端首页html元素上的动态font-size属性、设计稿尺寸、前端与设计之间协作流程一般分为下面两种:</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 18px;">1、网易做法</span></strong></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">引入:页面开头出引入下面这段代码,用于动态计算font-size</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;"></span></p><pre style="background-color:#262e37;color:#ffffff;font-family:&#39;Consolas&#39;;font-size:11.3pt;">(<span style="color:#f92672;">function</span>(<span style="color:#fd971f;font-style:italic;">doc</span>, <span style="color:#fd971f;font-style:italic;">win</span>) {<br/> <span style="color:#f92672;">var </span><span style="color:#64a2a2;">docEl </span><span style="color:#f92672;">= </span><span style="color:#fd971f;font-style:italic;">doc</span>.<span style="color:#660e7a;font-weight:bold;">documentElement</span>,<br/> <span style="color:#64a2a2;">isIOS </span><span style="color:#f92672;">= </span><span style="color:#660e7a;font-weight:bold;font-style:italic;">navigator</span>.<span style="color:#660e7a;font-weight:bold;">userAgent</span>.<span style="color:#4ac60a;">match</span>(<span style="color:#e6db74;">/\(i[^;]+;( U;)? CPU.+Mac OS X/</span>),<br/> <span style="color:#64a2a2;">dpr </span><span style="color:#f92672;">= </span><span style="color:#64a2a2;">isIOS </span><span style="color:#f92672;">? </span><span style="color:#660e7a;font-weight:bold;font-style:italic;">Math</span>.<span style="color:#4ac60a;">min</span>(<span style="color:#fd971f;font-style:italic;">win</span>.<span style="color:#660e7a;font-weight:bold;">devicePixelRatio</span>, <span style="color:#ae81ff;">3</span>) <span style="color:#f92672;">: </span><span style="color:#ae81ff;">1</span>,<br/> <span style="color:#64a2a2;">dpr </span><span style="color:#f92672;">= </span><span style="color:#660e7a;font-weight:bold;font-style:italic;">window</span>.<span style="color:#660e7a;font-weight:bold;">top </span><span style="color:#f92672;">=== </span><span style="color:#660e7a;font-weight:bold;font-style:italic;">window</span>.<span style="color:#660e7a;font-weight:bold;">self </span><span style="color:#f92672;">? </span><span style="color:#64a2a2;">dpr </span><span style="color:#f92672;">: </span><span style="color:#ae81ff;">1</span>, <span style="color:#5b7773;background-color:#191f26;">//</span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">被</span><span style="color:#5b7773;background-color:#191f26;">iframe</span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">引用时,禁止缩放</span><span style="color:#5b7773;font-family:&#39;宋体&#39;;"><br/></span><span style="color:#5b7773;font-family:&#39;宋体&#39;;"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color:#64a2a2;">dpr </span><span style="color:#f92672;">= </span><span style="color:#ae81ff;">1</span>,<br/> <span style="color:#64a2a2;">scale </span><span style="color:#f92672;">= </span><span style="color:#ae81ff;">1 </span><span style="color:#f92672;">/ </span><span style="color:#64a2a2;">dpr</span>,<br/> <span style="color:#64a2a2;">resizeEvt </span><span style="color:#f92672;">= </span><span style="color:#e6db74;">&#39;orientationchange&#39; </span><span style="color:#f92672;">in </span><span style="color:#660e7a;font-weight:bold;font-style:italic;">window </span><span style="color:#f92672;">? </span><span style="color:#e6db74;">&#39;orientationchange&#39; </span><span style="color:#f92672;">: </span><span style="color:#e6db74;">&#39;resize&#39;</span>;<br/> <span style="color:#64a2a2;">docEl</span>.<span style="color:#660e7a;font-weight:bold;">dataset</span>.dpr <span style="color:#f92672;">= </span><span style="color:#64a2a2;">dpr</span>;<br/> <span style="color:#f92672;">var </span><span style="color:#64a2a2;">metaEl </span><span style="color:#f92672;">= </span><span style="color:#fd971f;font-style:italic;">doc</span>.<span style="color:#4ac60a;">createElement</span>(<span style="color:#e6db74;">&#39;meta&#39;</span>);<br/> <span style="color:#64a2a2;">metaEl</span>.<span style="color:#660e7a;font-weight:bold;">name </span><span style="color:#f92672;">= </span><span style="color:#e6db74;">&#39;viewport&#39;</span>;<br/> <span style="color:#64a2a2;">metaEl</span>.<span style="color:#660e7a;font-weight:bold;">content </span><span style="color:#f92672;">= </span><span style="color:#e6db74;">&#39;initial-scale=&#39; </span><span style="color:#f92672;">+ </span><span style="color:#64a2a2;">scale </span><span style="color:#f92672;">+ </span><span style="color:#e6db74;">&#39;,maximum-scale=&#39; </span><span style="color:#f92672;">+ </span><span style="color:#64a2a2;">scale </span><span style="color:#f92672;">+ </span><span style="color:#e6db74;">&#39;, minimum-scale=&#39; </span><span style="color:#f92672;">+ </span><span style="color:#64a2a2;">scale</span>;<br/> <span style="color:#64a2a2;">docEl</span>.<span style="color:#660e7a;font-weight:bold;">firstElementChild</span>.<span style="color:#4ac60a;">appendChild</span>(<span style="color:#64a2a2;">metaEl</span>);<br/> <span style="color:#f92672;">var </span><span style="font-style:italic;">recalc </span><span style="color:#f92672;">= function</span>() {<br/> <span style="color:#f92672;">var </span><span style="color:#64a2a2;">width </span><span style="color:#f92672;">= </span><span style="color:#64a2a2;">docEl</span>.<span style="color:#660e7a;font-weight:bold;">clientWidth</span>;<br/> <span style="color:#f92672;">if </span>(<span style="color:#64a2a2;">width </span><span style="color:#f92672;">/ </span><span style="color:#64a2a2;">dpr </span><span style="color:#f92672;">&gt; </span><span style="color:#ae81ff;">750</span>) {<br/> <span style="color:#64a2a2;">width </span><span style="color:#f92672;">= </span><span style="color:#ae81ff;">750 </span><span style="color:#f92672;">* </span><span style="color:#64a2a2;">dpr</span>;<br/> }<br/> <span style="color:#5b7773;background-color:#191f26;">// </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">乘以</span><span style="color:#5b7773;background-color:#191f26;">100</span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">,</span><span style="color:#5b7773;background-color:#191f26;">px : rem = 100 : 1</span><span style="color:#5b7773;"><br/></span><span style="color:#5b7773;"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color:#64a2a2;">docEl</span>.<span style="color:#660e7a;font-weight:bold;">style</span>.<span style="color:#660e7a;font-weight:bold;">fontSize </span><span style="color:#f92672;">= </span><span style="color:#ae81ff;">100 </span><span style="color:#f92672;">* </span>(<span style="color:#64a2a2;">width </span><span style="color:#f92672;">/ </span><span style="color:#ae81ff;">750</span>) <span style="color:#f92672;">+ </span><span style="color:#e6db74;">&#39;px&#39;</span>;<br/> };<br/> <span style="font-style:italic;">recalc</span>()<br/> <span style="color:#f92672;">if </span>(<span style="color:#f92672;">!</span><span style="color:#fd971f;font-style:italic;">doc</span>.<span style="color:#660e7a;font-weight:bold;">addEventListener</span>) <span style="color:#f92672;">return</span>;<br/> <span style="color:#fd971f;font-style:italic;">win</span>.<span style="color:#4ac60a;">addEventListener</span>(<span style="color:#64a2a2;">resizeEvt</span>, <span style="font-style:italic;">recalc</span>, <span style="color:#f92672;">false</span>);<br/>})(<span style="color:#660e7a;font-weight:bold;font-style:italic;">document</span>, <span style="color:#660e7a;font-weight:bold;font-style:italic;">window</span>);</pre><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">使用:</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">未引入前:</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">body {</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">  width: 750px;</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">  height: 640px;</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">}</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">引入后:除以100并将px换成rem</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">body {</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">  width: 7.5rem;</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">  height: 6.4rem;</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">}</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;">换算的依据:</span></p><p style="margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; white-space: normal; "><span style="margin: 0px; padding: 0px; font-family: &quot;Microsoft YaHei&quot;; font-size: 16px;"></span></p><pre style="background-color:#262e37;color:#ffffff;font-family:&#39;Consolas&#39;;font-size:11.3pt;"><span style="color:#5b7773;background-color:#191f26;">// </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">乘以</span><span style="color:#5b7773;background-color:#191f26;">100</span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">,</span><span style="color:#5b7773;background-color:#191f26;">px : rem = 100 : 1</span><span style="color:#5b7773;"><br/></span><span style="color:#f92672;">var </span><span style="font-style:italic;">recalc </span><span style="color:#f92672;">= function</span>() {<br/> <span style="color:#f92672;">var </span><span style="color:#64a2a2;">width </span><span style="color:#f92672;">= </span>docEl.<span style="color:#660e7a;font-weight:bold;">clientWidth</span>;<br/> <span style="color:#f92672;">if </span>(<span style="color:#64a2a2;">width </span><span style="color:#f92672;">/ </span><span style="color:#660e7a;font-weight:bold;">dpr </span><span style="color:#f92672;">&gt; </span><span style="color:#ae81ff;">750</span>) {<br/> <span style="color:#64a2a2;">width </span><span style="color:#f92672;">= </span><span style="color:#ae81ff;">750 </span><span style="color:#f92672;">* </span><span style="color:#660e7a;font-weight:bold;">dpr</span>;<br/> }<br/> <span style="color:#5b7773;background-color:#191f26;">// </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">乘以</span><span style="color:#5b7773;background-color:#191f26;">100</span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">,</span><span style="color:#5b7773;background-color:#191f26;">px : rem = 100 : 1</span><span style="color:#5b7773;"><br/></span><span style="color:#5b7773;"> &nbsp; &nbsp;</span>docEl.<span style="color:#660e7a;font-weight:bold;">style</span>.<span style="color:#660e7a;font-weight:bold;">fontSize </span><span style="color:#f92672;">= </span><span style="color:#ae81ff;">100 </span><span style="color:#f92672;">* </span>(<span style="color:#64a2a2;">width </span><span style="color:#f92672;">/ </span><span style="color:#ae81ff;">750</span>) <span style="color:#f92672;">+ </span><span style="color:#e6db74;">&#39;px&#39;</span>;<br/>};</pre><div class="cnblogs_code" style="margin: 5px 0px; padding: 5px; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); overflow: auto; white-space: normal; font-family: &quot;Courier New&quot; !important; font-size: 12px !important;"><div class="cnblogs_code_toolbar" style="margin: 5px 0px 0px; padding: 0px;"><span style="font-family: sans-serif; font-size: 14px;">来源:</span><a href="https://www.cnblogs.com/haishen/p/10884679.html" style="font-family: sans-serif; font-size: 14px;">https://www.cnblogs.com/haishen/p/10884679.html</a><br/></div></div>
相关文章
热门推荐