有个需求是要层叠两张图,就像你现在看到的:整个浏览器和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. R的替换sub和gsub

    sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE) gsu ...

  2. python range函数与numpy arange函数

    1.range()返回的是range object,而np.arange()返回的是numpy.ndarray() range尽可用于迭代,而np.arange作用远不止于此,它是一个序列,可被当做向 ...

  3. xp系统报错 windows explorer has encountered a problem and needs to close.We are sorry for the inconvenience

    xp系统遇到问题: 打开某个软件提示报错信息, windows explorer has encountered a problem and needs to close.We are sorry f ...

  4. js常用的几个验证

    /// <summary> ///1. 使用正则表达式验证 参数 是否 为数值 /// </summary> /// <param name="trNumber ...

  5. 徐州网络赛F-Feature Trace【暴力】

    Morgana is learning computer vision, and he likes cats, too. One day he wants to find the cat moveme ...

  6. UIWebView中加载的网页尺寸太大,如何让网页适应屏幕大小 WebView加载HTML图片大小自适应与文章自动换行

    webview.scalesPageToFit = YES; http://www.cnblogs.com/yujidewu/p/5740934.html 若需要根据图片原本大小,宽度小于320px的 ...

  7. Python实现进程同步和通信

    转自:https://blog.csdn.net/u014556057/article/details/66974452

  8. Lightoj 1003 - Drunk(拓扑排序判断是否有环 Map离散化)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1003 题意是有m个关系格式是a b:表示想要和b必须喝a,问一个人是否喝醉就看一个人是 ...

  9. Python开发【Tornado】:异步Web服务(一)

    异步Web服务 前言: 到目前为止,我们已经看到了许多使Tornado成为一个Web应用强有力框架的功能.它的简单性.易用性和便捷性使其有足够的理由成为许多Web项目的不错的选择.然而,Tornado ...

  10. OpenStack功能简介

    为什要用云? 一.简单的说就是对资源更加合理的分配,使用,比如硬件的数量,带宽等等这些,因为你不能机器买来不需要了再卖掉(当然也可以),带宽跟机房签合同得来一年的,中间不够了也不能加,超了也不退钱 二 ...