Px(CSS pixels)css
emhtml
ex, ch前端
remvue
vw,vhhtml5
百分比web
rem 和 vw 兼容对比vue-cli
rem
api
vw
浏览器
mdndom
那么什么是设备的物理像素?
物理像素(physical pixel):设备能控制显示的最小单位。设备独立像素(DIP,device-independent pixel,density-independent pixel):独立于设备的用于逻辑上衡量像素的单位
对于前端来讲,能够理解成在设备上能设置的最小值。如在dpr = 1 最小值1px; dpr = 2 最小值为0.5px
PPI(pixel per inch)
公式
// w: 横向pixel // h: 纵向pixel // inch: 屏幕尺寸 PPI = Math.sqrt(w * w + h * h) / inch console.log(Math.ceil(Math.sqrt(1920 * 1920 + 1080 * 1080) / 5.5)) // 然而我并不明白怎么要这样算 不是应该是 w * h / inch ?????
具有足够高像素密度而使得人体肉眼没法分辨其中单独像素点的液晶屏
// vue指令 // 1. 先获取dpr 2获取每一个文档对象的字体大小 乘以dpr Vue.directive('richtext', (el, binding) => { Vue.nextTick(() => { let dpr = document.querySelector('html').getAttribute('data-dpr') let f = (dom) => { let fontPx = dom.style && dom.style.fontSize if (fontPx) { fontPx = fontPx.substr(0, fontPx.length - 2) * parseInt(dpr) dom.style.fontSize = fontPx + 'px' } if (dom.childNodes.length > 0) { for (let i = 0; i < dom.childNodes.length; i++) { f(dom.childNodes[i]) } } } f(el) }) }) // 使用方法 .richtext(v-html="content" v-richtext='')
三、高清方案存在的误区
dpr越高越清晰 是源自设备自己和缩放关系不大或者说当dpr为1时清晰度已经足够了,不须要再经过缩放来是网页显示更清晰(实践总结,未找到资料支持)
四、兼容问题
https://juejin.im/post/5b9cb9d26fb9a05d1b2e44a3
设置html根font-size的值
// 设计稿 750 * 1334
html { height: 100%; font-size: 50px; // 向下兼容 不止vw时候 写死font-size font-size: 13.33333333vw; // 7.5rem === 100vw margin: 0 auto; } @media (min-width: 560px) { // pc兼容 html,body { font-size: 54px; max-width: 540px; } } @media (max-width: 1024px) { // ipad兼容:ipad最大1024px html,body { max-width: 1024px; } }
1px显示问题 物理像素 dpr>=2 取2倍
.border-bottom { position: relative; &::after { content: ''; position: absolute; z-index: 1; pointer-events: none; background-color: red; height: 1px; left: 0; right: 0; bottom: 0; @media only screen and (min-resolution: 2dppx) { // 非标准的 -webkit-transform: scaleY(0.5); -webkit-transform-origin: 50% 0%; } } } // only操做符仅在媒体查询匹配成功的状况下被用于应用一个样式,这对于防止让选中的样式在老式浏览器中被应用到 // -webkit-device-pixel-ratio 是一个非标准的布尔类型CSS媒体类型,是标准 // resolution 媒体类型的一个替代方案.
单位要怎么写
方法一:postcss-px2rem(vue-cli3)
这里不推荐 由于px2rem: 写px时须要加上 /*no*/ 感受比较麻烦
const px2rem = require('postcss-px2rem') const postcssPx2rem = new px2rem({ remUnit: 50 // 基准大小 }) css: { loaderOptions: { postcss: { plugins: [postcssPx2rem] }, } },
方法二:目前方案是直接写 7.5rem=100vw 设计稿除以100便可
方法三:px2rem的编辑器插件如vscode的cssrem
除不尽的问题 (calc)
涉及到兼容问题