有个需求是要层叠两张图,就像你现在看到的:整个浏览器和html页面,内层图片要水平居中,等比例与源UI图适配不同设备

本来很简单的使用 vw vh了(

核心代码

            top: 13.25vh;
            left: 50%;
            margin-left: -32.31vw;
            width: 64.62vw;
            height: 61.56vh;

),但是发觉不太居中,而且考虑到移植的兼容性,还是用jq搞了一遍:

        (function () {
            var size = {
                uiImage: [530, 830],
                widthHeight: [340, 510],
                leftTop: [94, 110]
            };
            $('.top').css(getCss(size));
            function getCss(sizeSrc) {
                function ratio(arrTop, arrBottom) {
                    var arr = [];
                    for (var i = 0, j = arrTop.length; i < j; i++) {
                        arr[i] = arrTop[i] / arrBottom[i];
                    }
                    return arr;
                }
                var realSize, ratios, outSize, outLeftTop, ops;
                realSize = [$(window).width(), $(window).height()];
                ratios = ratio(sizeSrc.uiImage, realSize);
                outSize = ratio(sizeSrc.widthHeight, ratios);
                outLeftTop = ratio(sizeSrc.leftTop, ratios);
                ops = {
                    width: outSize[0],
                    height: outSize[1],
                    left: outLeftTop[0],
                    top: outLeftTop[1]
                };
                return ops;
            }
        }())

考虑到不想再新建一个js文件,再次包装下:

<div class="top-image" ui-image="530,830" width-height="340,510" left-top="94,110" ></div>
 
(function () {
  var obj = $('.top-image');
  obj.css(getCss({
    uiImage: obj.attr('ui-image').split(','),
    widthHeight: obj.attr('width-height').split(','),
    leftTop: obj.attr('left-top').split(',')
  }));
  function getCss(sizeSrc) {
    function ratio(arrTop, arrBottom) {
      var arr = [];
      for (var i = 0, j = arrTop.length; i < j; i++) {
        arr[i] = arrTop[i] / arrBottom[i];
      }
      return arr;
    }
    var realSize, ratios, outSize, outLeftTop, ops;
    realSize = [$(window).width(), $(window).height()];
    ratios = ratio(sizeSrc.uiImage, realSize);
    outSize = ratio(sizeSrc.widthHeight, ratios);
    outLeftTop = ratio(sizeSrc.leftTop, ratios);
    ops = {
      width: outSize[0],
      height: outSize[1],
      left: outLeftTop[0],
      top: outLeftTop[1]
    };
    return ops;
  }
}())

还是 js 替代 vw vh 了的更多相关文章

  1. 视区相关单位vw, vh..简介以及可实际应用场景

    这篇文章发布于 2012年09月24日,星期一,01:15,归类于 css相关. 阅读 37012 次, 今日 12 次 by zhangxinxu from http://www.zhangxinx ...

  2. CSS3自适应字体大小(vw vh)

    viewpoint css3提供了一些与当前viewpoint相关的元素,vw,vh,vmin, vmax等. “viewpoint” = window size vw = 1% of viewpor ...

  3. 视区相关单位vw, vh..简介以及可实际应用场景——张鑫旭

    一.N多的唠哩唠叨 CSS3中一些新的单位早在去年春暖花开的时候就介绍了,参见:CSS长度值及时间.频率.角度单位.显然,其中就提到了本文要感叹的单位vw, vh,见下图: 不过“我看见你”和“我触碰 ...

  4. 【学习笔记】响应式布局的常用解决方案(媒体查询、百分比、rem、和vw/vh)

    原文转载:https://blog.csdn.net/sinat_17775997/article/details/81020417 一.媒体查询 不同物理分辨率的设备,在还原设计稿时,css中设置的 ...

  5. 关于将px转换为vw vh的解决方案

    什么是vw(Viewport Width)和vh(Viewport Height)? vw和vh是前端开发中的一个动态单位,是一个相对于网页视口的单位. 系统会将视口的宽度和高度分为100份,1vw占 ...

  6. css中vw,vh单位对于UC的兼容性问题

    vw,vh单位在移动端浏览器不兼容,在网上找半天也没找到什么官方的解决方法:我就试了一下在使用到vh的单位之前添加一个用px定义的样式: 如: 当浏览器不是别100vw单位的时候 就会赋给px单位的样 ...

  7. css3自适应布局单位vw,vh你知道多少?

    视口单位(Viewport units) 什么是视口? 在桌面端,视口指的是在桌面端,指的是浏览器的可视区域:而在移动端,它涉及3个视口:Layout Viewport(布局视口),Visual Vi ...

  8. css中px em rem vw vh vmax vmin等单位的区别--转载

    px:绝对单位,页面按精确像素展示 em:相对单位,基准点为父节点字体的大小,如果自身定义了font-size按自身来计算(浏览器默认字体是16px),整个页面内1em不是一个固定的值. rem:相对 ...

  9. vw+vh+rem响应式布局

    科普下: 平时很少用的css单位: 1.长度单位: rem:相对长度单位.相对于根元素(即html元素)font-size计算值的倍数; vw:相对于视口的宽度.视口被均分为100单位的vw; vh: ...

随机推荐

  1. 微信小程序 --- 设置app.js/page.js参数的方法

    设置 app.js 文件: //app.js App({ globalData: { is_login:false, userInfo:{} } }) 设置gloabalData的方法: // 定义a ...

  2. 微信小程序 --- model弹框

    model弹框:在屏幕中间弹出,让你进行选择: 效果: 代码: <button type="primary" bindtap="btnclick"> ...

  3. scikit_learn 中文说明入门

    原文:http://www.cnblogs.com/taceywong/p/4568806.html 原文地址:http://scikit-learn.org/stable/tutorial/basi ...

  4. IIS7设置IP地址和域名限制

    在IIS中可以通过IP地址域名设置来控制拒绝或允许特定范围内的IP对网站的访问权限,下面简单介绍如何在IIS7.5中设置,如下图,是IIS7.5的主界面 一.安装“IP地址和域限制”功能 选定一个网站 ...

  5. poj1952 BUY LOW, BUY LOWER【线性DP】【输出方案数】

    BUY LOW, BUY LOWER Time Limit: 1000MS   Memory Limit: 30000K Total Submissions:11148   Accepted: 392 ...

  6. ios开发 内测包添加测试UDID

    内侧包添加 UDID: 1.蒲公英获取设备UDID  https://www.pgyer.com/udid 2. 登录开发者中心   --> Certificates, Identifiers ...

  7. 数字签名中公钥和私钥是什么?对称加密与非对称加密,以及RSA的原理

    http://baijiahao.baidu.com/s?id=1581684919791448393&wfr=spider&for=pc https://blog.csdn.net/ ...

  8. Python开发【数据结构】:排序练习

    排序练习 问题一: 现在有一个列表,列表中的数范围都在0到100之间,列表长度大约为100万.设计算法在O(n)时间复杂度内将列表进行排序. import random data = [random. ...

  9. Git学习-->GitLab如何修改时区?

    一.背景 今天有同事在GitLab上查看时间的时候,发现GitLab上显示的时间和提交的时间不一致. 本地时间现在为:2017-11-28 11:43 查看本地代码提交的时间为:2017-11-28 ...

  10. DBA-常用到的动态视图分析语句

    --语句1:获取前20逻辑读取次数或逻辑写入次数或CPU 时间 ), ((CASE qs.statement_end_offset THEN DATALENGTH(qt.TEXT) ELSE qs.s ...