css像素px,物理像素(pt),设备像素比(dpr),1px边框问题,viewport自适应

article/2025/9/29 3:36:38

关于 css像素px,物理像素(pt),设备像素比(dpr),1px边框问题,viewport自适应等问题。

目录

    • **关于 css像素px,物理像素(pt),设备像素比(dpr),1px边框问题,viewport自适应等问题。** @[TOC](目录)
    • css像素
    • 物理像素(pt)
    • CSS像素(px)和物理像素(pt)
          • CSS 像素(CSS Pixel):
          • 设备像素(Device Pixels):
          • 设备像素比(DevicePixelRatio):DPR = 设备像素 / CSS 像素
      • 像素的物理(物理像素)和逻辑(CSS像素)之分:
        • ==1px边框问题==
        • 1px边框问题解决方式:
      • em
      • rem
      • rpx
    • viewport
    • 3个viewport
    • 用meta标签对viewport进行控制

css像素

1、PX(CSS pixels)(CSS像素)

  • CSS 像素(CSS Pixel):
    又称为虚拟像素设备独立像素逻辑像素,也可以理解为直觉像素。CSS 像素是 Web 编程的概念,指的是 CSS 样式代码中使用的逻辑像素。

虚拟像素,可以理解为“直觉”像素,CSS和JS使用的抽象单位,浏览器内的一切长度都是以CSS像素为单位的,CSS像素的单位是px。

在CSS规范中,长度单位可以分为两类,绝对(absolute)单位以及相对(relative)单位px是一个相对单位,相对的是设备像素(device pixel)。

同样一个设备上,每1个CSS像素所代表的物理像素是可以变化的(即CSS像素的第一方面的相对性);
不同的设备之间,每1个CSS像素所代表的物理像素是可以变化的(即CSS像素的第二方面的相对性);

px实际是pixel(像素)的缩写,它是图像显示的基本单元,既不是一个确定的物理量,也不是一个点或者小方块,而是一个抽象概念。

  • 例子:
    假设打开一个浏览器,浏览器窗口宽度为800px,浏览器显示一个400px的正方形。如果我们把页面放大(通过“Ctrl键”加上“+号键”),放大为200%,也就是原来的两倍。此时正方形则横向占满了整个浏览器。此时我们既没有调整浏览器窗口大小,也没有改变块状元素的css宽度,但是它看上去却变大了一倍——这是因为我们把CSS像素放大为了原来的两倍。
    也就是说默认情况下一个CSS像素应该是等于一个物理像素的宽度的,但是浏览器的放大操作让一个CSS像素等于了两个设备像素宽度。在高PPI的设备上,CSS像素甚至在默认状态下就相当于多个物理像素的尺寸。

从上面的例子可以看出,CSS像素从来都只是一个相对值。


物理像素(pt)

设备像素(物理像素),顾名思义,显示屏是由一个个物理像素点组成的,通过控制每个像素点的颜色,使屏幕显示出不同的图像,屏幕从工厂出来那天起,它上面的物理像素点就固定不变了,单位pt。
pt在css单位中属于真正的绝对单位,1pt = 1/72(inch),inch及英寸,而1英寸等于2.54厘米。

通常所说的显示器分辨率,其实是指桌面设定的分辨率,而不是显示器的物理分辨率。==只不过现在液晶显示器成为主流,由于液晶的显示原理与CRT不同,只有在桌面分辨率与物理分辨率一致的情况下,显示效果最佳,所以现在我们的桌面分辨率几乎总是与显示器的物理分辨率一致了。


CSS像素(px)和物理像素(pt)

CSS 像素(CSS Pixel):

又称为虚拟像素、设备独立像素或逻辑像素,也可以理解为直觉像素。CSS 像素是 Web 编程的概念,指的是 CSS 样式代码中使用的逻辑像素。比如 iPhone 6 的 CSS 像素数为 375 x 667px。

设备像素(Device Pixels):

又称为物理像素。指设备能控制显示的最小物理单位,意指显示器上一个个的点。从屏幕在工厂生产出的那天起,它上面设备像素点就固定不变了。比如 iPhone 6 的分辨率为 750 x 1334px

设备像素比(DevicePixelRatio):DPR = 设备像素 / CSS 像素

这里的 CSS 像素其实是理想视口
例如,iPhone 6 物理像素为 750 x 1334,理想视口 375 x 667 ,DPR = 2

像素的物理(物理像素)和逻辑(CSS像素)之分:

设备像素比(Device Pixel Ratio,DPR):一个设备的物理像素与逻辑像素之比。

其实在很久以前,的确是没区别的,CSS里写个1px,屏幕就给你渲染成1个实际的像素点,DPR=1,多么简单自然~
后来苹果公司为其产品mac、iPhone以及iPad的屏幕配置了Retina高清屏,也就是说这种屏幕拥有的物理像素点数比非高清屏多4倍甚至更多。如果还按照DPR=1进行展示,那么同一张图片在高清屏上面显示的区域面积会是非高清屏的1/4,这样的话由于图片在屏幕上的展示面积大大缩小,也会导致出现“看不清”的问题。
苹果公司既然推出了Retina技术,那么这种技术带来了高清展示福利的前提下也要解决“DPR=1”的问题。怎么解决呢?DPR!=1。苹果公司经过一系列技术使用4个乃至更多物理像素来渲染1个逻辑像素,这样一来,同样的CSS代码设置的尺寸,在Retina和非Retina屏幕上看起来大小是一样的,但在Retina屏幕上要精细得多。

在Retian屏上,DPR不再是1,而是大于1,比如2(iPhone 5 6 7 8)或3(iPhone 6 Plus等一系列Plus)或者为非整数(一些Android机),说不定还会涨。

举个例子,iPhone 6的物理像素上面已经说了,是750 * 1334,那它的逻辑像素呢?我们只需在iPhone 6的Safari里打印一下screen.width和screen.height就知道了,结果是 375 * 667,这就是它的逻辑像素,据此很容易计算出DRP为2。当然,我们还可以直接通过window.devicePixelRatio这个值来获取DRP,打印结果是2,符合我们的预期。


1px边框问题

产生:简单说,苹果公司采取了Retina技术,设置设备像素比,使其使用4个乃至更多物理像素来渲染1个逻辑像素,大多数公司效仿,
DPR不再是一比一。
在苹果的带动下,Retina技术在移动设备上已经成了标配,所以前端攻城狮必须直面如下事实

1. 你想画个1px的下边框,但屏幕硬是显示一条宽度为23个物理像素的线。
2. 你没法像安卓或iOS的同事那样直接操纵物理像素点。

1px边框问题解决方式:

  • border-image 图片
  • background-image 渐变
  • box-shadow 等
  • 比较好:https://segmentfault.com/a/1190000015736900
  • 伪元素+transform”对边框进行缩放;
  • 用JS根据屏幕尺寸和dpr精确地设置不同屏幕所应有的rem基准值和initial-scale缩放值

em

相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸

由于浏览器的默认字体大小是 16px,所以未经调整默认字体大小的浏览器都符合: 1em = 16px

em 会继承父级元素的字体大小。由此,只需要改变父元素的字体大小,就可以同步放大或缩小子元素的字体。

但是也因此需要注意几点:
1、body 选择器中声明 Font-size=62.5% (10 ÷ 16 × 100% = 62.5%);
2、将你的原来的 px 数值除以 10,然后换上 em 作为单位;
3、重新计算那些被放大的字体的 em 数值。避免字体大小的重复声明。


rem

由于 em 存在对父元素继承的问题,当改变字体大小时涉及的继承关系就变得复杂起来。

rem 是相对于根元素 字体尺寸的大小。如 文本大小设为 font-size: 10px,则 1rem = 10px。使用 rem 设置字体则简单了很多。


rpx

微信小程序引入rpx(responsive pixel)这个新的尺寸单位

小程序编译后,rpx会做一次px换算。换算是以375个物理像素为基准,也就是在一个宽度为375物理像素的屏幕下,1rpx = 1px。

举个例子:iPhone6屏幕宽度为375px,共750个物理像素,那么1rpx = 375 / 750 px = 0.5px。


viewport

移动设备上的viewport是设备屏幕上用来显示网页的那部分区域,再具体一点就是浏览器上用来显示网页的那部分区域,但viewport又不局限于浏览器可视区域的大小,它可能比浏览器的可视区域大,也可能比浏览器的可视区域小。默认情况下,移动设备上的viewport都是大于浏览器可视区域的,这是因为移动设备的分辨率相对于PC来说都比较小,所以为了能在移动设备上正常显示那些为PC浏览器设计的网站,移动设备上的浏览器都会把自己默认的viewport设为980px或1024px(也可能是其它值,由设备本身决定),但后果是浏览器出现横向滚动条,因为浏览器可视区域的宽度比默认的viewport的宽度小。

3个viewport

  • layout viewport——布局视窗

如果把移动设备上浏览器的可视区域设为viewport的话,某些网站会因为viewport太窄而显示错乱,所以这些浏览器就默认会把viewport设为一个较宽的值,比如980px,使得即使是那些为PC浏览器设计的网站也能在移动设备浏览器上正常显示。这个浏览器默认的viewport叫做 layout viewport。layout viewport的宽度可以通过 document.documentElement.clientWidth来获取。

  • visual viewport ——视觉视窗

layout viewport的宽度是大于浏览器可视区域的宽度的,所以还需要一个viewport来代表浏览器可视区域的大小,这个viewport叫做 visual viewport。visual viewport的宽度可以通过 document.documentElement.innerWidth来获取。

  • ideal viewport—— 理想视窗

ideal viewport是一个能完美适配移动设备的viewport。首先,不需要缩放和横向滚动条就能正常查看网站的所有内容;其次,显示的文字、图片大小合适,如16px的文字不会因为在一个高密度像素的屏幕里显示得太小而无法看清,无论是在何种密度屏幕,何种分辨率下,显示出来的大小都差不多。这个viewport叫做 ideal viewport

ideal viewport并没有一个固定的尺寸,不同的设备有不同的ideal viewport。

ideal viewport 的意义在于,无论在何种分辨率的屏幕下,针对ideal viewport 而设计的网站,不需要缩放和横向滚动条都可以完美地呈现给用户。

用meta标签对viewport进行控制

移动设备默认的viewport是layout viewport,,但在进行移动设备网站的开发时,需要的是ideal viewport。要得到ideal viewport,需要用到meta标签。

  • head标签中加入:
  • viewport设置移动端自适应的方法:
<meta name="viewport" content="width=device-width, initial-scale=1">

该meta标签的作用是让当前viewport的宽度等于设备的宽度。device-width指的是设备的物理宽度,width是页面宽度
meta viewport 的6个属性:

width: viewport宽度
height: viewport高度
initial-scale: 初始缩放比例maximum-scale: 最大缩放比例
minimum-scale: 最小缩放比例
user-scalable: 是否允许用户缩放

在这里插入图片描述
要把当前的viewport宽度设为ideal viewport的宽度,既可以设置width=device-width,也可以设置initial-scale=1,但有一个小缺陷,就是width=device-width会导致iphone、ipad横竖屏不分initial-scale=1会导致IE横竖屏不分,都以竖屏的ideal viewport宽度为准。所以,最完美的写法两者都写上去,== initial-scale=1 解决 iphone、ipad的缺陷,width=device-width解决IE的缺陷。==


http://chatgpt.dhexx.cn/article/p64J05GP.shtml

相关文章

html怎么设置页面最小像素,html px像素单位

html长度尺寸单位px像素 设置字体大小以像素单位 笼统设置装备摆设宽度width、高度height、border边框等花式数字单位px。 一、px引见 px是html长度单元像素。譬如咱们电脑、手机显示屏均使用因而像素为单元&#xff0c;也即是px为单位。透露表现屏区分率1200*800其实便是指120…

【CSS】物理像素 DP(device pixels)、物理像素比(DPR)、px 逻辑像素(CSS像素)、DPI、PPI 的概念解析 以及1px问题解决方法

物理像素 、物理像素比、物理像素比、px 逻辑像素概念解析 前言一、前提概念1.分辨率与物理尺寸关系目前绝大部分显示器都是基于点阵的同样的分辨率下&#xff0c;每个小点的尺寸仍然是可以大可以小的DPI&#xff08;点每英寸&#xff09;PPI&#xff08;像素每英寸&#xff09…

pixel(css pixel device pixel)resolutioncss pixel(像素和分辨率)

文章目录 pixel&resolution(像素和分辨率)reference像素和分辨率分辨率屏幕像素像素&分辨率示例图像像素小结css 像素 开发中遇到的像素问题使用密度无关像素(android)将 dp 单位转换为像素单位 css pixel & device pixelreferencespx&dpi(device pixel & …

区别css单位px、em、rem

在对页面进行自适应时&#xff0c;查阅相关资料了解到&#xff0c;通常有两种方式将px转换为em或者rem&#xff0c;下面就上述三者之间的联系进行讲解&#xff1a; em与px转换 一般浏览器默认1em16px&#xff0c;通过设置font-size大小来代表如&#xff1a;16px*0.62510px&am…

移动端1px像素问题及解决办法

在移动端web开发中&#xff0c;UI设计稿中设置边框为1像素&#xff0c;前端在开发过程中如果出现border:1px&#xff0c;测试会发现在某些机型上&#xff0c;1px会比较粗&#xff0c;即是较经典的移动端1px像素问题。首选先看一下&#xff0c;pc时代和移动端时代对1px的对比。 …

响应式设计:理解设备像素,CSS像素和屏幕分辨率

概述 屏幕分辨率、设备像素&#xff08;device-width&#xff09;和CSS像素&#xff08;width&#xff09;这些术语&#xff0c;在很多语境下&#xff0c;是可互换的&#xff0c;但也因此容易在有差异的地方引起混淆&#xff0c;实际上它们是不同的概念。 屏幕分辨率和设备像…

【移动端适配】为什么根元素font-size设置成100px或625%?

rem&#xff1a;是一个相对单位&#xff0c;相对根元素字体大小的单位&#xff0c;再直白点就是相对于html元素字体大小的单位。 优点&#xff1a;这样在计算子元素有关的尺寸时&#xff0c;只要根据html元素字体大小计算就好。不再像使用em时&#xff0c;得来回的找父元素字体…

解决适配375像素宽度667像素高度移动端方法:推荐一款非常好用的px转rem单位的VSCode插件px to rem rpx (cssrem)

px to rem & rpx (cssrem) - Visual Studio MarketplaceExtension for Visual Studio Code - Converts between px and rem & rpx units in VSCodehttps://marketplace.visualstudio.com/items?itemNamecipchk.cssrem 在CSS文件中输入px就会自动计算rem了

移动端布局介绍——css像素/物理像素/设备像素比

我们在网页后台看到的不同手机的分辨率是&#xff1a;css像素&#xff0c;设备的独立像素&#xff1b;见下图的红色框里的东西&#xff1a; 如果我们把这个页面截图下来在属性里看它的分辨率&#xff0c; 如下图所示&#xff1a; 发现这个分辨率其实是css分辨率的二倍&#xf…

CSS 中的像素(px)

CSS 中的像素(px) px 是一个我们经常在开发中使用的一个单元; 它表示在屏幕上展示的最小单元; 但是, 在 CSS 中像素可能和我们想象的不太一样. CSS 中的 px 是逻辑距离还是物理距离 答: 是逻辑距离; 像素(pixel)在浏览器中是一个表示距离的绝对单位(absolute unit); 同时,…

一文搞懂像素(px)、分辨率、CSS长度单位

博主目前在蚂蚁集团-体验技术部&#xff0c;AntV/S2 是博主所在团队的开源项目——多维交叉分析表格&#xff0c;欢迎使用&#xff0c;感谢到 S2 github 仓库点赞 star&#xff0c;有任何关于前端面试、就业、技术问题都可给在文章后留言。 对于做前端的朋友&#xff0c;相信看…

获取浏览器高度

获取浏览器高度 获取浏览器可视区域的高度 $(window).height(); //Cross browser gets the size of Visual area window,Have nothing to do with scroll bars /**** 仅获取可视区域的大小*/ var getInner(function() {// alert(typeof window.innerWidth ! undefined);if (…

js获取浏览器高度和宽度值(多浏览器)

IE中&#xff1a; document.body.clientWidth > BODY对象宽度 document.body.clientHeight > BODY对象高度 document.documentElement.clientWidth > 可见区域宽度 document.documentElement.clientHeight > 可见区域高度 FireFox中&#xff1a; document.bo…

JS 获取浏览器高度和宽度

JS获取浏览器高度和宽度 IE中&#xff1a; document.body.clientWidth > BODY对象宽度 document.body.clientHeight > BODY对象高度 document.documentElement.clientWidth > 可见区域宽度 document.documentElement.clientHeight > 可见区域高度 FireFox中&#x…

javascript获取浏览器宽度和高度

测试浏览器及版本&#xff1a;IE8、FF5、Chrome12 屏幕分辨率&#xff1a;1366 x 768 文档声明&#xff1a;<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ht…

Vue.js动态获取浏览器高度并进行实时修改DOM元素高度

项目中有高度自适应需求&#xff0c;div的高度始终需要一个浏览器的高度&#xff0c;在此做个记录&#xff0c;以便之后迅速搭建 <template> <div class"content" :style"contentStyleObj"></div> </template> <script> …

Vue,JS获取屏幕,浏览器高度宽度

Vue&#xff0c;JS获取屏幕&#xff0c;浏览器高度宽度 一、介绍 1. 容器 一个页面的展示&#xff0c;从外到内的容器为&#xff1a;屏幕、浏览器以及页面本身。 HTML元素展现在页面内&#xff0c;页面展现在浏览器内&#xff0c;而浏览器展现在屏幕内。 通过Js的一些对象…

JS -获取屏幕/浏览器高度

一、展示图 二、屏幕信息 window.screen.height&#xff1a;设备显示屏的高度 这个是设备显示屏的高度&#xff0c;各个机型的显示屏高度都不一样&#xff0c;可以在系统设置中看window.screen.availHeight&#xff1a;屏幕的可用高度 一般是显示屏高度减去显示屏工具栏的高度 …

【已解决】依赖包后出现Failed to resolve:com.github.xxx错误

【已解决】依赖包后出现Failed to resolve:com.github.xxx错误 问题 AndroidStudio常常需要引入第三方Library开源库&#xff0c;然后可能会遇到下面这样的问题&#xff1a; 原因 引入maven { url “xxx” }的时候&#xff0c;位置添加错了。 错误&#xff1a;添加到了bui…

webview添加参数与修改请求头的user-agent

前言 最近公司项目需求&#xff0c;在项目中嵌入h5页面&#xff0c;一般原生&#xff0c;看着感觉跟往常一样&#xff0c;一个地址就完全ok了&#xff0c;如果是这样那就没有这个博文的必要了&#xff01; 项目的登录使用的token登录&#xff0c;在移动端的登录是原生的&…