iframe在移动端的缩放的示例代码


Posted in HTML / CSS onOctober 12, 2018

工作中碰到个奇怪的问题,折腾了大半天,终于算是解决了,这里把分析思路和解决办法记录下。

项目是做响应式的公司官网,前期的静态图页面切完后就提交给后台作为模板使用了,我也就基本退出项目。

在后端落地时发现在在移动端页面显示不太对劲,显得很模糊。第一想法是meta的头部被覆盖了,查看源代码果然发现是被覆盖了。

这是我习惯用的meta头部,使页面宽度根据设备宽度自适应变化

<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />

可是后端落地的框架是按模板直接引入的,有部分的公共资源竟然也包含了设置viewport的meta。后端引入的是这个样子的:

<meta name="viewport" id="viewport" content="width=640px, user-scalable=no">

这一头部是被一段不得不被加入的js文件所append进入的,而且被明确告知,该js文件不可以被修改!所以这一设置宽度为固定640px的将我原本设置随设备宽度变化的meta覆盖了!

问题就来了,静态页面已经完成,且由于历史代码因素,有相当部分的代码在当初并没有使用rem单位,已经无法大规模修改css效果了。只有通过js重置设置viewport宽度再次进行覆盖了......这倒是挺简单的,无非就是代码相当的丑陋而已。

但又一个问题来了,这个官网页面还动态引入了iframe页面,这些iframe页面是固定的640px宽度。这就很崩溃了!我加了随设备宽度变化的mata,那么这些iframe就不能看了;我不再次加meta,那么官网本身就不能看了!

好在这些iframe是通过统一的方法引入,虽然不能更改引入方法的js文件,但在业务代码中再次监听倒也还可以。所以再次这个绑定点击事件,判断iframe是否被引入后,就是使用某些特殊方法的时候了!

css3有个transform: scale()的方法,可以对元素进行缩放,虽然真正占位的宽高并没有变化,但在显示效果上还是不错的。

通过计算缩放比例 = 设备宽度 / 640 可以得出对应的缩放比例,再对引入的iframe设置transform: scale(缩放比例)就可以实现漂亮的缩放了!

事情到这里就结束了吗?不!还没有!iframe是缩放了,可高度也被缩放了,内容显示不完整了。这里设置height: 设备高度 / 缩放比例可以还原原本的iframe高度。

以为结束了?并没有!还有问题存在!iframe层被scale()属性缩放后,默认的向下和向右也移动了一段距离,这是因为scale()默认是按中心进行缩放的!这里花了大量时间去寻找合适的方法解决,比如负margin、translate()等,但是由于难以计算合适的移动比例系数,恕本人算法辣鸡,这一方法尝试很久终于决定还是放弃......

翻看css手册发现了一个熟悉又陌生的属性
设置旋转元素的基点位置:

transform-origin: x-axis y-axis z-axis;

它有3个属性值,分别代表定义视图被置于X、Y、Z轴的何处。

他乡遇故知,久旱逢甘霖!要的就是你啊!设置transform-origin: 0 top 0 解决~

其实吧,这个属性很早就被用到了,只不过我最开始写的是缩写transform-origin: 0,被浏览器解析之后的就是transform-origin: 0 center 0......当时的感受就是左右解决了,一直想的都是把iframe移上去,殊不知人家自带这样的功能,只不过被我忽略了。学习还是不能囫囵吞枣啊,一个属性竟然可以浪费半天的时间,我大概不是个合格的前端......(逃

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
详解css3 object-fit属性
Jul 27 HTML / CSS
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
Feb 10 HTML / CSS
简单介绍CSS3中Media Query的使用
Jul 07 HTML / CSS
使用HTML和CSS3绘制基本卡通图案的示例分享
Nov 06 HTML / CSS
10分钟理解CSS3 Grid布局
Dec 20 HTML / CSS
浅谈CSS3 动画卡顿解决方案
Jan 02 HTML / CSS
HTML5混合开发二维码扫描以及调用本地摄像头
Dec 27 HTML / CSS
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
Oct 08 HTML / CSS
HTML5 画布canvas使用方法
Mar 18 HTML / CSS
Html5获取高德地图定位天气的方法
Dec 26 HTML / CSS
CSS3常见动画的实现方式
Apr 14 HTML / CSS
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
Apr 29 HTML / CSS
详解HTML5将footer置于页面最底部的方法(CSS+JS)
Oct 11 #HTML / CSS
HTML5实现签到 功能
Oct 09 #HTML / CSS
HTML5 视频播放(video),JavaScript控制视频的实例代码
Oct 08 #HTML / CSS
移动端html5模拟长按事件的实现方法
Sep 30 #HTML / CSS
HTML5视频播放插件 video.js介绍
Sep 29 #HTML / CSS
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
Sep 19 #HTML / CSS
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
Sep 19 #HTML / CSS
You might like
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
ThinkPHP模板Switch标签用法示例
2014/06/30 PHP
PHP中echo和print的区别
2014/08/28 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
关于js中for in的缺陷浅析
2013/12/02 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
全面解析JavaScript中apply和call以及bind(推荐)
2016/06/15 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
详解Vue依赖收集引发的问题
2019/04/22 Javascript
如何在项目中使用log4.js的方法步骤
2019/07/16 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
Python常见内置高效率函数用法示例
2018/07/31 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
在Django中实现添加user到group并查看
2019/11/18 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
高清安全摄像头系统:Lorex Technology
2018/07/20 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
Beach Bunny Swimwear官网:设计师泳装和性感比基尼
2019/03/13 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
应届毕业生求职信范文分享
2013/12/26 职场文书
小学数学教学反思
2014/02/02 职场文书
医院标语大全
2014/06/23 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
公司搬迁通知
2015/04/20 职场文书