移动适配(rem/px)
来源:互联网 发布:刷机用什么软件最好 编辑:程序博客网 时间:2024/06/05 16:59
适配
流式布局
.flexlab (@display: flex,@justify:center,@align:center) { display: @display; justify-content: @justify; align-items: @align;}
Sass(使用Sass的函数、混合宏这些功能来实现):
写一个函数px2em传入参数px及基础字体
因为字体实际的rem为
(原始px字体大小/跟字体大小)*1rem
@function px2em($px, $base-font-size: 16px) { @if (unitless($px)) { @warn "Assuming #{$px} to be in pixels, attempting to convert it into pixels for you"; @return px2em($px + 0px); // That may fail. } @else if (unit($px) == em) { @return $px; } @return ($px / $base-font-size) * 1em;
混合宏px2rem
@mixin px2rem($property,$px-values,$baseline-px:16px,$support-for-ie:false){ //Conver the baseline into rems $baseline-rem: $baseline-px / 1rem * 1; //Print the first line in pixel values @if $support-for-ie { #{$property}: $px-values; } //if there is only one (numeric) value, return the property/value line for it. @if type-of($px-values) == "number"{ #{$property}: $px-values / $baseline-rem; } @else { //Create an empty list that we can dump values into $rem-values:(); @each $value in $px-values{ // If the value is zero or not a number, return it @if $value == 0 or type-of($value) != "number"{ $rem-values: append($rem-values, $value / $baseline-rem); } } // Return the property and its list of converted values #{$property}: $rem-values; }}
cssRem
在编辑器插件中配置好(一般用sublime)
{ "px_to_rem": 40, //px转rem的单位比例,默认为40 "max_rem_fraction_length": 6, //px转rem的小数部分的最大长度。默认为6。 "available_file_types": [".css", ".less", ".sass",".html"] //启用此插件的文件类型。默认为:[".css", ".less", ".sass"]}
less中
.px2rem(@name, @px) { @{name}: @px / 100 * 1rem;}
与response.js(设置dpr)结合使用
// function browserRedirect() {// var sUserAgent = navigator.userAgent.toLowerCase()// var bIsIpad = sUserAgent.match(/ipad/i) === 'ipad'// var bIsIphoneOs = sUserAgent.match(/iphone os/i) === 'iphone os'// var bIsMidp = sUserAgent.match(/midp/i) === 'midp'// var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) === 'rv:1.2.3.4'// var bIsUc = sUserAgent.match(/ucweb/i) === 'ucweb'// var bIsAndroid = sUserAgent.match(/android/i) === 'android'// var bIsCE = sUserAgent.match(/windows ce/i) === 'windows ce'// var bIsWM = sUserAgent.match(/windows mobile/i) === 'windows mobile'// // console.log('您的浏览设备为:')// if (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) {// return 'phone'// } else {// return 'pc'// }// }if (typeof window !== 'undefined') { // We are in the browser (function (win) { var doc = win.document var docEl = doc.documentElement var metaEl = doc.querySelector('meta[name="viewport"]') // var tid var dpr = 0 var rem var scale = 0 var clientWidth = docEl.clientWidth if (clientWidth === undefined) return // console.log(window.devicePixelRatio) // console.log(docEl.clientWidth) if (!dpr && !scale) { // var isAndroid = win.navigator.appVersion.match(/android/gi) var isIPhone = win.navigator.appVersion.match(/iphone/gi) var devicePixelRatio = win.devicePixelRatio if (isIPhone) { // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案 if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) { dpr = 3 } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) { dpr = 2 } else { dpr = 1 } } else { // 其他设备下,仍旧使用1倍的方案 dpr = 1 } scale = 1 / dpr } rem = clientWidth * dpr / 7.5 // 设置viewport,进行缩放,达到高清效果 metaEl.setAttribute('content', 'width=' + dpr * clientWidth + ',initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale + ',user-scalable=no') // 设置data-dpr属性,留作的css hack之用 docEl.setAttribute('data-dpr', dpr) // 动态写入样式 // docEl.firstElementChild.appendChild(fontEl) // fontEl.innerHTML = 'html{font-size:' + rem + 'px!important}' docEl.style.fontSize = rem + 'px' // 给js调用的,某一dpr下rem和px之间的转换函数 win.rem2px = function (v) { v = parseFloat(v) return v * rem } win.px2rem = function (v) { v = parseFloat(v) return v / rem } win.dpr = dpr win.rem = rem })(window)}
转换的比例(跟路径)
Rem = rem = clientWidth * dpr / 7.5
1、先引入设置dpr和font-size的js
- 动态改写标签
- 给元素添加data-dpr属性,并且动态改写data-dpr的值
- 给元素添加font-size属性,并且动态改写font-size的值
2、美化工作——视觉稿中的px转换成rem
视觉设计师给到前端开发人员手中的视觉稿尺寸一般是基于640px、750px以及1125px宽度为准
Flexible会将视觉稿分成100份(主要为了以后能更好的兼容vh和vw),而每一份被称为一个单位a。同时1rem单位被认定为10a
快速计算
CSSREM是一个CSS的px值转rem值的Sublime Text3自动完成插件
除了插件之外
使用sass混合宏
文本又将如何处理适配
不希望文本在Retina屏幕下变小,另外,我们希望在大屏手机上看到更多文本,以及,现在绝大多数的字体文件都自带一些点阵尺寸,通常是16px和24px,所以我们不希望出现13px和15px这样的奇葩尺寸
只不过使用[data-dpr]属性来区分不同dpr下的文本字号大小。
mixin font-dpr($font-size){ font-size: $font-size; [data-dpr="2"] & { font-size: $font-size * 2; } [data-dpr="3"] & { font-size: $font-size * 3; }}@include font-dpr(16px);
3、丈量设计稿
设计稿是750x1500的应该怎么办?其实这个还好,750刚好就是375的2倍,iPhone6的宽度。因此量出来的尺寸直接除以2就行了。如果是1080x1920等很大很大的尺寸呢?1.首先保存整张设计稿.jpg 2.新建一个psd,宽度375px,高度1000px(高度可以高一点,无所谓) 3.将保存的设计稿.jpg丢进去。这样量出来的页面元素的尺寸,就是你需要的尺寸。
ps:最好的方法,就是让设计师用sketch出设计稿。
4
自己只是用来放在移动端的页面,别人却在pc上打开了,因此可以设置一个html的最大宽度与最小宽度。580px就是手机上浏览器的最大宽度。
5、一、rem的适用性很有局限,仅仅只能够用于只在移动端展示的页面。如果你的页面还需要适配到pc端,那么就老老实实的使用px吧。
参考链接:http://www.jianshu.com/p/d0fe770b07ae
https://juejin.im/post/588192872f301e0069858c4a
- 移动适配(rem/px)
- rem移动适配
- 移动端mixin的px转rem
- 字体大小(px,em,rem)
- 移动web适配之rem
- 移动web适配利器-rem
- 移动端屏幕适配rem
- 移动web适配利器-rem
- 关于rem适配移动端
- 移动web适配之rem
- 关于移动端rem适配问题
- 移动web适配利器-rem
- 自使用移动端rem适配--并且vscode-px自动转化成rem
- 设计稿750px移动端字体自适应,1rem=100px
- html移动端页面适配js(采用rem+百分比形式)
- 移动端(三)—— rem适配和flex适配
- rem与media标签实现移动端屏幕适配
- 移动端的适配问题之REM
- android+python 原生和webview元素定位
- 复制复杂链表,返回复制后复杂链表的head
- linux两个不常用的两个有用的命令ulimit和xargs
- eclipse中使用svn导出项目,并运行
- Tensorflow一些常用基本概念与函数(1)
- 移动适配(rem/px)
- Java String、StringBuilder和StringBuffer的区别
- redis 在ubuntu安装与Windows安装
- iOS--MD5加密封装
- JVM调优常见配置汇总
- 一分钟学会JavaMail(假)__手动滑稽
- Ubuntu下Sqlite数据库图形化管理工具
- eclipse如何卸载不需要额插件
- Mac Q&A