面试官:说一下 px、em、rem、vw/vh?em和rem的区别?

简介: 面试官:说一下 px、em、rem、vw/vh?em和rem的区别?

关于PX

CSS中有非常多的长度单位

整体可以分成两类:

绝对长度单位(Absolute length units);

相对长度单位(Relative length units);

px(绝对长度单位)

像素是影响显示的基本单位。(比如屏幕上看到的画面、一幅图片);

pix是英语单词picture的常用简写,加上英语单词“元素”element,就得到pixel;

“像素”表示“画像元素”之意,有时亦被称为pel(picture element);

我们经常说一个电脑的分辨率、手机的分辨率,还有CSS当中的像素又是什么关系呢?

像素单位常见的有三种像素名称:

  • 设备像素(也称之为物理像素);
  • 设备独立像素(也称之为逻辑像素);
  • CSS像素;

设备像素,也叫物理像素。

  • 设备像素指的是显示器上的真实像素,每个像素的大小是屏幕固有的属性,屏幕出厂以后就不会改变了;
  • 我们在购买显示器或者手机的时候,提到的设备分辨率就是设备像素的大小;
  • 比如iPhone X的分辨率 1125x2436,指的就是设备像素;

设备独立像素,也叫逻辑像素。

  • 如果面向开发者,使用设备像素显示一个100px的宽度,那么在不同屏幕上显示效果会是不同的
  • 开发者针对不同的屏幕很难进行较好的适配,编写程序必须了解用户的分辨率来进行开发;
  • 所以在设备像素之上,操作系统为开发者进行抽象,提供了逻辑像素的概念
  • 比如你购买了一台显示器,在操作系统上是以1920x1080设置的显示分辨率,那么无论你购买的是2k、4k的显示器,对于开发者来说,都是 1920x1080的大小。

CSS像素

  • CSS中我们经常使用的单位也是pixel,它在默认情况下等同于设备独立像素(也就是逻辑像素);
  • 逻辑像素面向开发者;

我们可以通过JavaScript中的screen.width和screen.height获取到电脑的逻辑分辨率:

DPR:device pixel ratio

2010年,iPhone4问世,不仅仅带来了移动互联网,还带来了Retina屏幕;

Retina屏幕翻译为视网膜显示屏,可以为用户带来更好的显示;

在Retina屏幕中,一个逻辑像素在长度上对应两个物理像素,这个比例称之为设备像素比(device pixel ratio);

可以通过window.devicePixelRatio获取到当前屏幕上的DPR值;

PPI:每英寸像素(英语:Pixels Per Inch,缩写:PPI)

通常用来表示一个打印图像或者显示器上像素的密度;

1英寸=2.54厘米,在工业领域被广泛应用;

问题考点——响应式

1.rem是什么?

em是一个相对长度单位,相对于父元素

rem也是一个相对长度单位,相对于根元素,常用于响应式布局

(rem:r’是“root”的缩写,相对于根元素<html>的字体大小。)

rem与其他长度单位的区别

  • px,绝对长度单位,最常用
  • em,相对长度单位,相对于父元素,不常用(相对于父元素,各个元素的父元素不一,没有统一标准)
  • rem,相对长度单位,相对于根元素,常用于响应式布局

2.响应式布局(移动端适配)的常用方案

  • media-query,根据不同的屏幕宽度设置根元素font-size
  • rem,基于根元素的相对单位

然后使用rem设置 总体字体大小 和 div1的宽度

在iphone6/7/8机型上(html {font-size: 100px;})可以看到,

div1盒子的字号为16px(0.16×100=16px)

宽度为100px(1×100=100px)

iPhone也一样,宽度为375px

在iphone6/7/8 Plus机型上(html {font-size: 110px;})

div1盒子的字号为17.6px(0.16×110=17.6px)

宽度为110px(1×110=110px)

接着就可以对任何元素的属性实现响应式,比如:line-height行高、padding内边距、margin外边距……

3.rem的弊端——“阶梯”性

有弊端,但还是能用

“阶梯”性 —— 在某一阶梯的整个跨度中无变化。

如果想要实现,376px比375px大一点?或者413px比375px大?(需要产生变化)

4.网页视口尺寸

  • window.screen.height      //屏幕宽度(手机点亮屏幕)
  • window.innerHeight          //网页视口高度(浏览器去除头尾,可以显示内容的部分)
  • document.body.clientHeight        //body高度(内容高度)

如图,667是window.screen.height;553是window.innerHeight;内容高度为浏览器头部底到红色矩形底

模拟器没有头和底部工具栏,与实际不同。

document.body.clientHeight为内容高度(随网页内容变化)

5.vw/vh

  • vh网页视口高度(window.innerHeight)的1/100
  • vw网页视口宽度(window.innerHeight)的1/100
  • vmax取两者最大值,vmin取两者最小值

把手机上能显示网页的区域的高度与宽度平均分成100份,1个vh/vw就是1份。——“阶梯”性就没有了。

10vw/10vh就是网页视口的宽度/高度 百分之十 即 十分之一

vmax取vw和vh的最大值(变成正方形)

再看看vmin

等式

相关文章
|
存储 算法 架构师
阿里面试:PS+PO、CMS、G1、ZGC区别在哪?什么是卡表、记忆集、联合表?问懵了,尼恩来一个 图解+秒懂+史上最全的答案
阿里面试:PS+PO、CMS、G1、ZGC区别在哪?什么是卡表、记忆集、联合表?问懵了,尼恩来一个 图解+秒懂+史上最全的答案
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
641 9
|
安全 Java 程序员
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
993 12
|
编译器 Android开发 开发者
Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
Lambda表达式和匿名函数都是Kotlin中强大的特性,帮助开发者编写简洁而高效的代码。理解它们的区别和适用场景,有助于选择最合适的方式来解决问题。希望本文的详细讲解和示例能够帮助你在Kotlin开发中更好地运用这些特性。
426 9
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
342 14
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
今日分享的主题是如何区分&和&&的区别,提高自身面试的能力。主要分为以下四部分。 1、自我面试经历 2、&amp和&amp&amp的不同之处 3、&对&&的不同用回答逻辑解释 4、彩蛋
|
Java 关系型数据库 数据库
京东面试:聊聊Spring事务?Spring事务的10种失效场景?加入型传播和嵌套型传播有什么区别?
45岁老架构师尼恩分享了Spring事务的核心知识点,包括事务的两种管理方式(编程式和声明式)、@Transactional注解的五大属性(transactionManager、propagation、isolation、timeout、readOnly、rollbackFor)、事务的七种传播行为、事务隔离级别及其与数据库隔离级别的关系,以及Spring事务的10种失效场景。尼恩还强调了面试中如何给出高质量答案,推荐阅读《尼恩Java面试宝典PDF》以提升面试表现。更多技术资料可在公众号【技术自由圈】获取。
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
4474 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
前端开发 小程序 JavaScript
面试官:px、em、rem、vw、rpx 之间有什么区别?
面试官:px、em、rem、vw、rpx 之间有什么区别?
534 0