iframe在移动端的缩放
工作中碰到个奇怪的问题,折腾了大半天,终于算是解决了,这里把分析思路和解决办法记录下。
项目是做响应式的公司官网,前期的静态图页面切完后就提交给后台作为模板使用了,我也就基本退出项目。
在后端落地时发现在在移动端页面显示不太对劲,显得很模糊。第一想法是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移上去,殊不知人家自带这样的功能,只不过被我忽略了。学习还是不能囫囵吞枣啊,一个属性竟然可以浪费半天的时间,我大概不是个合格的前端......(逃
iframe在移动端的缩放的更多相关文章
- 阻止pc端浏览器缩放js代码
阻止pc端浏览器缩放js代码 众所周知:移动端页面禁止用户缩放界面只需加上<meta name="viewport" content="user-scalable= ...
- ion-scroll zooming="true" android端无法缩放的问题
很久很久没更新博客了,从今天开始决定以后陆续写一些博文,总结下自己在开发中碰到的问题. ionic项目.ion-scroll zooming="true" 在android端无法缩 ...
- 解决iframe在移动端(主要iPhone)上的问题
前言 才发现已经有一段时间没有写博客了,就简单的说了最近干了啥吧.前段时间忙了杂七杂八的事情,首先弄了个个人的小程序,对的,老早就写了篇从零入手微信小程序开发,然后到前段时间才弄了个简单的个人小程序, ...
- js实现禁止pc端浏览器缩放和获取当前页面浏览器的缩放大小
众所周知:移动端页面禁止用户缩放界面只需加上<meta name="viewport" content="user-scalable=0">即可,但 ...
- 基于iframe的移动端嵌套
需求描述 上上周接到了新的项目,移动端需要做一个底部有五个导航,点击不同的导航页面主体显示不同的页面,其中两个页面是自己做,而另外三个页面是引用另外三个网址,其中两个网址为内部项目,另外一个为外部(涉 ...
- 防止网页被别人的网站iframe,服务端如何设置HTTP头部中的X-Frame-Options信息?
一.现象:in a frame because it set 'X-Frame-Options' to 'deny'. 二.服务配置 因为,有时候为了防止网页被别人的网站iframe,我们可以通过在服 ...
- Web移动端 自适应缩放界面
在开发App端的网页时,要适配iphone.ipad.ipod.安卓等各种机型,一般是直接使用em.px转em.界面缩放. 本章是通过将界面缩放,等比例显示在各机型上.过程中遇到了些问题和大坑~ 然后 ...
- html5 在移动端的缩放控制
viewport 语法介绍: 01 <!-- html document --> 02 <meta name="viewport" 03 content= ...
- 移动端字体缩放问题解决方案-摘自《html5移动web开发实践》
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
随机推荐
- Oracle to_char的用法
The following are number examples for the to_char function. to_char(1210.73, '9999.9') would return ...
- Lucene7.4学习和简单使用
简述: 前面从新回顾学习了Solr,正好也借此机会顺便学习一下Lucene. 一.什么是Lucene? 全文检索的一个实现方式,也是非结构化数据查询的方法.应用场景:在数据量大,数据结构不固定的时候, ...
- 判断h5页面是小程序环境还是微信环境
1.话不多说直接上代码,已使用有效 <script type="text/javascript" src="https://res.wx.qq.com/open/j ...
- java防范跨站脚本攻击(XSS)
网络中心提示网站有数目众多的跨站脚本攻击(XSS)漏洞,经过查看代码,认为是JSP中绑定变量是未经处理直接写入的,而且整个项目中这样的做法太多,因为是多年前的,不好一个个更改,参照网上资料,通过加fi ...
- HttpClient 工具类
package com.sys.utils; import java.io.IOException; import java.net.URI; import java.util.ArrayList; ...
- Jexus高级功能设置
我们对服务器软件Jexus作了简单的介绍,同时我们也对Jexus的整体配置作了详细的讲解,介绍了Jexus的进程守护工具"jws.guard",相信各位读者对于Jexus应该已经有 ...
- ListView性能优化——convertView&viewHolder
ListView优化大致从以下几个角度:1.复用已经生成的convertView:2.添加viewHolder类:3.缓存数据(图片缓存):4.分页加载. 具体方案: 1.如果自定义适配器,那么在ge ...
- VMware Workstation中虚拟机的克隆
1 克隆虚拟机 首先需要准备好一个安装好的系统,这里以linux为例进行演示. 在需要克隆的机器上右键选择管理==>克隆 选择需要克隆的虚拟机的状态,如果你想要的就是当前的状态,就直接选择虚拟机 ...
- python解决处理中文的问题
脚本开头添加默认编码 python源码中出现了中文字符或要处理中文字符,运行时会出现错误,解决方法是,开头加入字符编码声明: #! /usr/bin/env python # -*- coding:u ...
- 非科班双非本科投的337家Java后台(励志)
考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默想起来一个声音:”乔戈里峰” 前言 文章出自h ...