移动端中,分为两个视口:css
移动设备的viewport默认是layout viewport
能够这两理解,有一个图片(layout viewport),宽度是:1090 1090,有一个画框(visual viewport),宽度是:320 460,用户经过画框来看画。当layout viewport与visual viewport彻底一致时,用户经过画框看到的就是整个画。若是layout viewport较大,用户须要经过移动画框来查看画面内容。html
viewport是meta中的一个值,经过设置viewport,能够控制浏览器如何规范的渲染Web页面
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
要把当前的viewport宽度设为ideal viewport的宽度,既能够设置 width=device-width,也能够设置 initial-scale=1,若是initial-scale和viewport有冲突,浏览器会取比较大的值。web
viewport值:编程
name | value | Description |
---|---|---|
width |
正整数或device-width | 定义视口(layout viewport)的宽度,单位为像素, |
height |
正整数或device-height | 定义视口的高度,单位为像素 |
initial-scale |
[0.0-10.0] | 定义初始缩放值 |
minimum-scale |
[0.0-10.0] | 定义缩小最小比例,它必须小于或等于maximum-scale设置 |
maximum-scale |
[0.0-10.0] | 定义放大最大比例,它必须大于或等于minimum-scale设置 |
user-scalable |
yes/no | 容许用户手动缩放页面,默认是yes |
以上所说的宽度,实际上是分辨率浏览器
屏幕上的像素。是物理像素。 设备像素可能不相同bash
物理像素不会改变,单位是pt。less
1pt = 1/72(inch),inch及英寸,而1英寸等于2.54厘米 iphone
举个🌰 : iphone5的像素:640*1136px, 表示:屏幕由640行,1136列像素组成。ide
CSS像素是Web编程的概念,指的是CSS样式代码中使用的像素。布局
举个🌰 :iphone5的像素:320px。
设置:zoom 100%的状况下,1个CSS像素才会等于1个设备像素
DPR = 设备像素/CSS像素。
理解:1px由多少个设备像素组成;
如何获取:
在移动端浏览器中以及某些桌面浏览器中,window对象有一个devicePixelRatio属性(有兼容问题),它的官方的定义为:设备物理像素和设备独立像素的比例,也就是 devicePixelRatio = 物理像素 / 独立像素。
CSS像素就能够看作是设备的独立像素,因此经过devicePixelRatio,咱们能够知道该设备上一个css像素表明多少个物理像素。
CSS像素 =设备独立像素 = 逻辑像素
一英寸中,像素个数
计算:
var 斜边尺寸 = V(1920^2+1080^2) V表明开根号 var ppi = 斜边尺寸/5.5 ppi = 401ppi
定义:
ps: px是一个相对单位,相对设备像素的。(css的像素是根据设备的分辨率计算出来的)。如何感觉这个相对值呢?当咱们缩放网页大小的时候,并无改变css像素,可是页面中内容变大了,这是由于css像素是相对的,其余因素的改变,影响了css像素的大小。
计算:
为了让相同的1px在不一样的设备上,视觉上看起来差很少,css像素是根据设备像素大小换算出来的。css中,根据参考像素进行换算
计算:使用em单位的元素的字体大小乘以em值,父元素大小会影响em,是由于继承的缘由,若是出现层级em嵌套,会影响比较大。
计算:取决于页面根元素大小,根据根元素字体大小乘以rem值。
retina视网屏幕:Retina显示器指的是在人体正常使用距离下,没法看到屏幕的像素。
设计师的px指的是物理像素,咱们设置的是css像素,物理像素和css像素不是彻底一致的。
小数
.border { border: 1px solid #999 } @media screen and (-webkit-min-device-pixel-ratio: 2) { .border { border: 0.5px solid #999 } } @media screen and (-webkit-min-device-pixel-ratio: 3) { .border { border: 0.333333px solid #999 } }
问题:兼容性不是很好
tranform加伪类标签
<span class="border-1px">1像素边框问题</span> // less .border-1px{ position: relative; &::before{ content: ""; position: absolute; left: 0; top: 0; width: 200%; border:1px solid red; color: red; height: 200%; -webkit-transform-origin: left top; transform-origin: left top; -webkit-transform: scale(0.5); transform: scale(0.5); pointer-events: none; /* 防止点击触发 */ box-sizing: border-box; @media screen and (min-device-pixel-ratio:3),(-webkit-min-device-pixel-ratio:3){ width: 300%; height: 300%; -webkit-transform: scale(0.33); transform: scale(0.33); } } }
优势: 其实不止是圆角, 其余的边框也能够这样作出来
缺点: 代码量也很大, 占据了伪元素, 容易引发冲突
阴影
.border-1px{ box-shadow: 0px 0px 1px 0px red inset; }