px单位html5响应式方案
移动端h5响应式方案最近这几年用得最多的最多的就是rem方案了。这个需要计算根元素的font-size来实现响应式。
但这种方案也有一个缺点,那就是font-size不为整数的时候一些字体使用rem单位会导致字体显示的有问题比如字体会产生锯齿,对视觉还原要求比较高的项目来说这还是令前端开发挺头疼的一件事的。
解决前端响应式无非就是在不同的设备下可以正常展示,这里介绍一种不需要rem方式的响应式方案。直接使用px,这里说的是基于750px的设计稿。设计稿中你量出来是多少px,样式中
直接写多少px。这样是不是很快捷,也不需要rem换算。
transform
transform-origin
这里其实就是用到了transform的scale缩放页面大小来实现响应式。
核心代码:
let screenMatch = () => {
document.body.style.setProperty('visibility', 'hidden')
let page = document.getElementById("page"); // id为page的跟节点
let _scale = (window.screen.width || document.documentElement.clientWidth || document.body.clientWidth || window.outerWidth) /750; //2018年12月10日17:51:21改动 具体下面详解 page.style.setProperty("transformOrigin", "0 0");
page.style.setProperty("transform", "scale("+ _scale + ")");
//兼容ios8
page.style.setProperty("-webkit-transform-origin", "0 0");
page.style.setProperty("-webkit-transfrom", "scale("+ _scale + ")");
setTimeout(() => { page.style.setProperty("transformOrigin", "0 0");
page.style.setProperty("transform", "scale("+ _scale + ")");
//兼容ios8
page.style.setProperty("-webkit-transform-origin", "0 0");
page.style.setProperty("-webkit-transfrom", "scale("+ _scale + ")");
document.body.style.setProperty('visibility', 'visible')
}, 100); }
screenMatch();
window.onresize = screenMatch;
上述代码中id为page的是整个页面元素开始的跟节点,body下的第一个元素。这里body/html要设置min-height:100%;height:100%;
其实我们在小程序中也可以使用px单位,但是小程序中使用transform的时候会有一些字体锯齿的bug,最后换了zoom属性就好了,同时使用-webkit-zoom做兼容。核心代码跟h5的差别不大同样放的是
缩放大小。
注意:楼主今天发现了一个问题,在最新12版iOS自带的Safari浏览器中 window.outerWidth获取值为0,导致计算出来的缩放为0,导致transform: scale(0)结果就是页面显示白屏而且页面没报错
为了兼容起见已经将本文修改。谨慎点的同学可以单独将屏幕宽度提取出来作为一个单独的变量。如:
let deviceWidth = window.screen.width || document.documentElement.clientWidth || document.body.clientWidth || window.outerWidth
let _scale = deviceWidth/750;
以上代码亲测有效欢迎大家指点意见。不胜感激!
px单位html5响应式方案的更多相关文章
- CSS 与 HTML5 响应式图片
什么是响应式图片? 响应式图片是指:用户代理根据输出设备的分辨率不同加载不同类型的图片,不会造成带宽的浪费.同时,在改变输出设备类型或分辨率时,能及时加载对应类型的图片. CSS3 响应式图片 对于很 ...
- CSS与HTML5响应式图片
随着 Retina 屏幕的逐渐普及,网页中对图片的适配要求也越来越高.如何让图片在放大了两倍的 Retina 屏幕显示依然清晰,曾经一度困扰着网页开发者,好在 CSS3 与 HTML5 已经着力在改变 ...
- Html5响应式设计与实现广场
由于提出的想法响应式设计,越来越多的网站使用这样的思想.各类大型网站如雨后春笋般涌了出来.例如:小米商城.天猫等. 至于响应式设计的概念等大家能够去百度百度,我这里就不相信解说了.直接为大家带来源代码 ...
- Lithium: HTML5 响应式的单页面模板
在线演示:http://www.gbtags.com/gb/demoviewer/2507/837ac02e-4963-46c9-83ee-a0a0bb867f7f/3.-Lithium|app|in ...
- 为何企业钟爱H5响应式网站? html5响应式网站的优势与特点
随着移动互联网时代的到来,H5响应式网站应运而生,并成功获得了商家.访客.搜索引擎等的青睐!越来越多的企业也选择了H5响应式建站,可为何企业钟爱H5响应式网站呢?难道传统网站不好吗?这个不能妄下结论, ...
- HTML5响应式模版Mocha
HTML5响应式模版Mocha,经典,html5,蓝色,扁平,HTML5响应式模版Mocha是一款宽屏大气的HTML5网站展示模板. http://www.huiyi8.com/moban/
- HTML5响应式导航
HTML5响应式导航HTML5,响应式,jQuery特效,HTML5导航,HTML5响应式导航是一款基于HTML5实现的深灰色响应式导航菜单. 地址:http://www.huiyi8.com/sc/ ...
- 浅谈html5 响应式布局
一.什么是响应式布局? 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本. 这个概念是为解决移动互联 ...
- html5 响应式布局
一.什么是响应式布局? 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本. 这个概念是为 ...
随机推荐
- 使用sed修改配置项的值
起先我的想法是根据等号来求得配置项所在的行号, sed -n '/aaa/=' config.ini 然后根据行号删除这一行,再增加一行比如行号是9 sed -i '9d' config.ini s ...
- JavaScript正则表达式函数总结
/* 测试环境:Chrome 63.0.3239.132 */ JS中正则对象修饰符可选值为:"i" "g" "m",即忽略大小写 进行全局 ...
- php复习整理1--位运算符
前言 子曰:"温故而知新,可以为师矣." php复习整理系列即是对已掌握的知识的温习,对久不使用的知识点进行重新学习,从而对php基础知识的掌握更加牢固.当然因为是重新温习, ...
- LeetCode - 307. Range Sum Query - Mutable
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...
- Phone文件备份
一 把照片导入到本地 连接手机和PC,插上数据线后PC上会自动检测并弹出对话框,提示导入 可以指定导入的目录.确定之后点击导入即可开始执行导入操作. 二 把语音备忘录导入到本地 需要借助iTunes联 ...
- MySQL建立外键(Foreign Key)
如果在最初建立表的时候就建立外键这样一般不会有什么问题,顺便说一下建立外键的时候,需要注意的地方. cascade方式在父表上update/delete记录时,同步update/delete掉子表的匹 ...
- ASP.NET Core Logging in Elasticsearch with Kibana
在微服务化盛行的今天,日志的收集.分析越来越重要.ASP.NET Core 提供了一个统一的,轻量级的Logining系统,并可以很方便的与第三方日志框架集成.我们也可以根据不同的场景进行扩展,因为A ...
- AJAX跨域完全讲解
AJAX跨域完全讲解 今天在慕课网上学习了AJAX跨域完全讲解:https://www.imooc.com/learn/947 我在收集AJAX面试题的时候其实就已经有过AJAX跨域的问题的了,当时候 ...
- MySql全国省市区SQL语句
CREATE TABLE IF NOT EXISTS `province` ( `id` int(11) NOT NULL auto_increment, `provinceID` int(1 ...
- ARC068E - Snuke Line
原题链接 题意简述 给出个区间和.求对于任意,有多少个区间包含的倍数. 题解 考虑怎样的区间不包含的倍数. 对于的倍数和,满足的区间不包含任何的倍数. 于是转化为二维数点问题,可以用可持久化线段树解决 ...