移动端web页面适配

px、em、rem

px:
像素(px)是相对于显示器屏幕分辨率而言的,px是逻辑像素,也叫css像素。
如:10个汉字要撑满整行,行内没有剩余空间。代码如下:

<style>
    *{margin: 0px;padding: 0px;}
    /* 消除默认的margin和padding值 */
    @media only screen and (width:320px) { div{font-size: 32px;} }
    @media only screen and (width:414px) { div{font-size: 41.4px;}}
    @media only screen and (width:375px) {div{font-size: 37.5px;}}
</style>

】在适配时,每个媒体查询都需要计算,并且显示不同的内容计算方式和结果也不同,故使用px进行适配并不合适。

em:
名称为相对长度单位。相对于当前对象内文本的字体尺寸,如果文本是10个汉字,1em指的是一个汉字的宽度,2em表示两个汉字的宽度。如果当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。
1em = 1个font-size的宽度,其中font-size是父标签的font-size值
仍以10个汉字为例,代码如下:

<style>
    *{margin: 0px;padding: 0px;}
    body{font-size: 10px;}
    div{font-size: 2em;}
    span{font-size: 2em;}
</style>
<body>
  国破<div>山河在<span></span>春草木深</div>
</body>  

em的不足:em是相对于设置em的标签的父元素来说的,容易产生字体大小逐层复合的连锁反应。
故适配使用em也不合适,因为em一直相对于父元素。

rem:
其中r表示root , root是根的意思 , 指html标签。

rem与em的区别:在于使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是html根元素。
1em ==》 父元素中的font-size的大小
1rem ==》html 标签中的font-size的大小
如:html中font-size大小设置为34px
1rem = 34px ; 2rem = 68px

对于不支持它的浏览器,就多写一个绝对单位的声明。这些浏览器会忽略用rem设定的字体大小。代码如下:

p {font-size:14px; font-size:.875rem;}

适配:

达到在大屏上显示是大盒子,在小屏上显示是小盒子的效果。

如果是大屏,字体设置的大一点。

如果是小屏,字体设置的小一点。

在不同的屏幕大小里都可以保证样式。

如:10个汉字,在不同大小的屏幕中均显示撑满一行。


媒体查询+rem实现适配

例:一张设计图:一行文字,有10个字,在750px的屏上是撑满一行的,还有一张图片,占手机屏的一半。

利用媒体查询+rem来适配,步骤如下:

  1. 得到设计稿,一般情况下,设计稿的尺寸是750px

  2. 通常把浏览器的模拟器也调成750px

  3. 严格按照设计稿,以rem为单位,把设计稿还原出来

  4. 开始写样式,需要确定html标签的font-size,通常会把font-size设置成100px,叫做rem的基准值。

    量出一个盒子,width是20px 1rem是100px,换成rem是0.2rem

    到此,先不要管适配,就在750的屏上,还原750的设计稿,量设计稿量出的px单位,只需要除以100就成了rem单位

  5. 最后一步,把写好的页面,迁移到其他屏上,完成适配

    迁移时也需要换算,换算如下:

    ​ 750的屏上,html的font-size的大小为100px

    ​ 750的屏上,html的font-size的大小为50px

    ​ 320的屏上,html的font-size的大小为42.666666px

    ​ 414的屏上,html的font-size的大小为55.2px

使用媒体查询+rem来实现上述例子需要写如下代码:

<style>
    *{margin: 0px;padding: 0px;}
    @media only screen and (width:750.400px) { html{font-size: 100px;}}
    .title{font-size: 0.75rem;}
    img{width: 3.75rem;}
</style>  
<body>
  <div class="title">国破山河在<span></span>春草木深</div>
  <!-- 默认情况下,图片多大,手机上就显示多大 -->
  <img src="./photo.png" alt="">
</body>

以上代码完成了前四个步骤,将页面在750px的屏上完整实现。

<style>
	@media only screen and (width:375.200px) { html{font-size: 50px;}}
    @media only screen and (width:320px) { html{font-size: 42.6666px;}}
    @media only screen and (width:414.400px) { html{font-size: 55.2px;}}
</style> 

如果要写的适配的屏种类比较多,那么我们需要写大量的媒体查询的代码。
故可以采用JS+px的方式进行适配。


JS+px进行适配:
JS+rem的适配方法更加适合于,要适配的屏幕种类多的情况
代码如下:

<style>
    *{margin: 0px;padding: 0px;}
    .title{font-size: 0.75rem;}
    img{width: 3.75rem;}
</style>
<script>
    let docEle = window.document.documentElement;//获取窗口大小
    // 计算不同屏的html标签的font-size值
    function refresh(){
      let width = docEle.getBoundingClientRect().width;//获取一屏的大小
      if(width>750.400){width=750.400;}
      let fs = width / 7.5;
      document.querySelector("html").style.fontSize = fs + "px";
    }
    refresh();
    // 改变页面大小
    window.addEventListener("resize",()=>{
      refresh()
    })
    // 页面的显示和隐藏
    window.addEventListener("pageshow",()=>{
      refresh()
    })
  </script>

以上代码是通过JS和px进行适配,
其中,width是获取到的设备独立像素,假设要适配的设备对应的像素值为x,
那么,
在这里插入图片描述
从而可以得到:x=width/7.5

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值