px.em单位 rem适配

px(像素)单位

px:

    一个盒子是100px * 100px  px指的是逻辑像素,也叫css像素
    在适配时,使用px作为单位并不合适。

像素是图像的基本采样单位,它不是一个确定的物理量,也不是一个具体的点或小方块(尽管可以用点或小方块来呈现),而是一个抽象概念。

不同的设备,其图像基本单位是不同的,比如显示器的点距,可以认为是显示器的物理像素。现在的液晶显示器的点距一般在0.25mm到0.3mm之间。

注意,我们通常所说的显示器分辨率,其实是指桌面设定的分辨率,而不是显示器的物理分辨率。只不过现在液晶显示器成为主流,由于液晶的显示

原理与CRT不同,只有在桌面分辨率与物理分辨率一致的情况下,显示效果最佳,所以现在我们的桌面分辨率几乎总是与显示器的物理分辨率一致了。

一般来说,px就是对应设备的物理像素,然而如果输出设备的解析度与电脑显示器大不相同,输出效果就会有问题。 


em:
   

    指的是一个汉字的宽度,2em表示两个汉字的宽度
    1em = 1个font-size的大小
    如:font-size:20px; 1em = 20px   10em = 200px

    em不足:它是相对于父元素的font-size来说的。

    适配使用em也不合适,因为它一直是相对于父元素的font-size来说的

em的特性:

1. em的值并非静止的;

2. em会秉承父级元素的字体大小,会相关于父元素的字体大小而扭转。


rem适配:
   

r表示root   root是根的意思   指html标签  
    1rem ==> html标签中的font-size的大小  
    1em  ==> 父标签中的font-size的大小

如:html标签的font-size设置成了34px 
    1rem = 34px  
    2rem = 68px 
    3rem = 102px

---------------------------------------
适配:
    在大屏上显示大盒子,在小屏上显示小盒子。

什么是适配?
    如果是大屏,盒子或字体大上设置的大一点
    如果是小屏,盒子或字体大小设置的小一点

10个字,在不同的手机,都是撑满一行。
---------------------------------------
使用媒体查询,实现适配:
    媒体查询 类似于 编程语言中的if else 


---------------------------------------
我有一张设计图,一行文字,10个字,在750屏上,是撑满一行的。
    还有一张图片,占手机屏的一半。
---------------------------------------
需要利用媒体查询+rem来适配,步骤如下:
    1)得到设计稿  一般情况下,设计稿的尺寸是750px。
    2)通常我们把浏览器的模拟器也调整成750px
    3)严格按照设计稿,以rem为单位,把设计稿还原出来。
    4)开始写样式,需要确定html标签的font-size,通常我会把fontsize
        定成100px,叫rem的基准值。  

        有一个盒子,width是20px  1rem = 100px。 盒子是20px
        换成rem  换成0.2rem

        又量出一个盒子的宽度是55px,换成rem就是0.55rem。

        说白了,量设计稿,量出来的Px单位,只需要除于100,就成rem单位 

        到此,你先不要管适配,你就在750px的屏上,还原750的设计稿。

    5)最后一步,把写好的页面,迁移到其它屏上的,完成适配。
        在迁移时,也需要换算。 换算如下: 
            在750px的屏上,html的font-size的大小为100px。
            在375px的屏上,html的font-size的大小为50px。
            在320px的屏上,html的font-size的大小为42.6666666px。
            在414px的屏上,html的font-size的大小为55.2px。
如果我们写要适配的屏比较多,那么我们需要写大量的媒体查询的代码。


JS+rem来适配:

// 实现rem适配
// 适配的是屏幕,范围 1024 ~ 1920

var setFont = function () {
    // 获取设备屏幕的宽度
    var html = document.querySelector('html');
    var width = html.clientWidth; // 获取html的宽度   
    // 判断一下,width值是否小于1024;是否大于1920
    if (width < 1024) {
        width = 1024;
    }
    if (width > 1920) {
        width = 1920;
    }
    // 计算html的fontSize值
    var fontSize = width / 80 + 'px';
    // 设置html元素的font-size
    html.style.fontSize = fontSize;
}
setFont();   //自调用先生效

// 浏览器窗口大小改变的时候,重新设置html的fontSize
window.onresize = function () {   
    setFont();
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值