老师好,这里我属实搞不懂设置那个font-size和dpr有什么意义了

老师好,这里我属实搞不懂设置那个font-size和dpr有什么意义了

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <script src="js/simple.js"></script>

    <link rel="stylesheet" href="css/grid-flex.css">

    <link rel="stylesheet" href="css/simplebase.css">

    <link rel="stylesheet" href="css/simpleindex.css">

</head>

<body>

    <header class="header_container">

        <div class="header_container_left">

            <div class="logo">

                <img src="img/logo.png" alt="logo">

            </div>

        </div>

        <div class="header_container_right">

            <div class="download">下载APP</div>

        </div>

    </header>

</body>

</html>

*{margin: 0px;box-sizing: border-box;padding: 0px;}


body{font-size: 12px;color: #5d655b;}

[data-dpr='2'] body{font-size: 24px;}

[data-dpr='3'] body{font-size: 36px;}


a{text-decoration: none;}


img{width: 100%;vertical-align: top;display: block;border: none;}

html,body{width: 100%;}


.header_container{position: fixed;left: 0;top: 0;display: flex;

            width: 100%;z-index: 1000;height: 2.5rem;align-items: center;

            background-color: gray;justify-content: space-around;}


.header_container_right,

.header_container_left

{height: 100%;display: flex;justify-content: center;align-items: center;}


.header_container_right{background-color: pink;border-radius: 0.5rem;

    color: white;height: 1.25rem;line-height: 1.25rem;width: 2.5rem;

    font-size: 0.5rem;}

这里我又重新看了一下老师写的那个js,dpr的部分我不是很明白,但是下面的font-size部分我还能理解,总之就是系数在js中已经固定死了,也就是html的font-size可以根据页面变化而变化,但是dpr的2,3情况我还是弄不清楚是怎么变化的,它跟普通的屏幕大小变化有什么区别?另外,根据dpr修改html font-size又是什么原理?请别跟我说回去看课间,这老师讲的我云里雾里,请在答案中再帮我讲解清楚一点

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
好帮手慕久久 2020-06-18 16:00:52

同学你好,给body设置rem可以实现适配,rem不就是为了适配各种屏幕嘛。如果body的字体设置成了rem,那可以不使用[data-dpr='2']这样的代码。但是也不能说[data-dpr='2']这样的代码,完全没用,比如你不想让文字大小成比例变化,就想让它在dpr等于2时,特别大,那可以写:[data-dpr='2'] body{font-size: 10rem},当然这样写没有多大意义。

祝学习愉快!



  • 提问者 慕雪9296518 #1
    谢谢老师,终于清楚了,感谢老师无限的耐心!!
    2020-06-18 16:08:48
  • 好帮手慕久久 回复 提问者 慕雪9296518 #2
    懂了就好,祝学习愉快!
    2020-06-18 16:20:11
好帮手慕久久 2020-06-18 15:28:42

同学你好,pc端可以使用rem,但是一般很少这样用。因为pc端可以使用媒体查询实现适配(简单些)。由于代码很灵活,所以使用哪种方式的都有,比如可以像老师那样写,也可以直接使用rem,甚至还可以在移动端使用媒体查询调整字体大小(字体使用px做单位),代码真的非常灵活。

同学就当扩展就好,毕竟见得多,知道的就越多。

祝学习愉快!


好帮手慕久久 2020-06-18 15:10:23

同学你好,问题解答如下:

1. 这几句代码是有作用的,只是效果变化不明显,如下:

http://img1.sycdn.imooc.com//climg/5eeb12d909bd0b4610640323.jpg

http://img1.sycdn.imooc.com//climg/5eeb12df09e2581319600244.jpg


2. 这三句代码,是给body设置默认字体大小,[data-dpr='2'] body{font-size: 24px;}这句的意思是,当屏幕的dpr为2时,body的默认字体大小为24px,如下:

http://img1.sycdn.imooc.com//climg/5eeb12ef0989ea4026080470.jpg

http://img1.sycdn.imooc.com//climg/5eeb12f509f1120922040349.jpg

这样写,也可以简单的实现,根据不同的dpr,来给元素设置不同的样式,同学可以理解成给大家扩展了一下。当然同学也可以把这几句代码去掉,使用rem设置body的字体,都可以,代码的实现方式不唯一。

祝学习愉快!

  • 提问者 慕雪9296518 #1
    那我想问问从美观上来说,pc端使用rem的方法也合适吗?我是说像有经验的人一般采取哪种字体大小的规定方式比较多?
    2020-06-18 15:15:26
  • 提问者 慕雪9296518 #2
    也就是说我如果这里给body设置的是rem比例值的话也一样能适配各种屏幕是吗,像[data-dpr='2']这样搞其实完全是没必要的?
    2020-06-18 15:35:54
好帮手慕久久 2020-06-18 13:27:04

同学你好,代码中的grid-flex.css可以去掉,不使用该css也可以实现效果。

问题解答如下:

1. dpr的问题:

在simple.js中已经实现了让元素的尺寸随着页面宽度变化而变化,但是如果页面上有个元素的尺寸是1px,那么就会出现一个问题:如果在css样式中,将其设置成1px,当屏幕的dpr为2时,在页面上它看起来会比设计稿上的1px粗。这是因为在dpr=2的屏幕下,比如iphone6(视口宽是375px),它的设计稿通常是750*1334(对应着iphone6的物理像素),所以设计稿上的1px,实际应该对应页面上的0.5px(页面是375px);而此时我们在css样式中,将其设置了1px,它实际是设计稿上的1px的两倍,所以看起来粗。如果直接将其设置成0.5px,某些机型的支持性并不好。为了解决该问题,就利用了dpr,当dpr=2时,我们设置页面缩放比为0.5,此时视口宽是750px(页面缩小了,但是视口变大了,二者相互作用,保证了页面上元素整体大小没有变):

http://img1.sycdn.imooc.com//climg/5eeaf956093e543209270315.jpg

即:视口宽刚好和设计稿的宽度相等,此时设计稿上的1px就等于页面上的1px,因此就解决了1px问题。其余dpr同理。

2. 以dpr=2为例,通过如下代码设置页面的缩放比:

http://img1.sycdn.imooc.com//climg/5eeaf973093639cf10830254.jpg

设置页面缩放比后,页面情况如下:

http://img1.sycdn.imooc.com//climg/5eeaf97c0987428c09740317.jpg

即此时页面的宽度变成了750px,可以打印看一下:

http://img1.sycdn.imooc.com//climg/5eeaf9850934e17c13100252.jpghttp://img1.sycdn.imooc.com//climg/5eeaf98b09cbe0ec07600214.jpg

由于系数ratio是18.75,所以此时的html的fontsize是40px:

http://img1.sycdn.imooc.com//climg/5eeaf99609fb971c16190256.jpg

而不考虑dpr时,html的fontsize是20px:

http://img1.sycdn.imooc.com//climg/5eeaf9cf0925320f12120251.jpg


这样就实现了html的fontsize随着dpr不同而变化。

同学再体会一下。

祝学习愉快!

  • 提问者 慕雪9296518 #1
    body{font-size: 12px;color: #5d655b;} [data-dpr='2'] body{font-size: 24px;} [data-dpr='3'] body{font-size: 36px;} 那我单独问问body这块,这块我完全是照虎画猫了,具体为什么这么写我也不清楚,看别人这么写我才这样写的,好像去掉也没啥区别,那这里设置dpr=3,dpr=2的目的到底是为什么。以及既然都实现了所有内容基于html的font-size来用rem实现缩放比例,那为什么这里又单独用一个固定的px来指定字体大小呢
    2020-06-18 14:45:24
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.WebAPP开发与小程序
  • 参与学习           人
  • 提交作业       622    份
  • 解答问题       6815    个

微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师