资讯专栏INFORMATION COLUMN

努力加强ie8到ie9 polyfill水平 彻底抛弃老旧浏览器ie8

wuyangnju / 1406人阅读

摘要:不知道大家对有什么看法很多人在说要兼容的理由的时候总是用百度的调查指数其实有一个问题百度中有很大一部分可能是这类的浏览器必须退出历史舞台并且我们还要和设计做出表态不能无限制搞出新设计长久以来有展示页面也有企业应用页面但是都有一个问题被限制了

不知道大家对ie8有什么看法

很多人在说ie8要兼容的理由的时候总是用百度的调查指数 其实有一个问题 百度中ie8有很大一部分可能是360这类的浏览器

ie8必须退出历史舞台 并且我们还要和设计做出表态 不能无限制搞出新设计

长久以来web 有 展示页面 也有企业应用页面 但是都有一个问题 被限制了加载资源总数
有的时候我在想web开发者真牛 用比别人少得资源完成比别人多的功能
不要说android swift难

你是说那个不停拖控件 不停加第三方服务 不用考虑安装大小的开发吗 这个模板随时会改
    
    
    
    
ie8 js加强的问题 es5

es5-shim
es5-sham

必须的

ie8 dom

感谢 webreflection

ie8
dom4

dom4中classlist必须啊

ie8 document.querySelector

ie8 document.querySelector 无法使用css3 selector
为了提供css :last-of-type 支持 其实css3大部分都可以改写方法支持 不过没必要

我写了个polyfill 用来支持 :last-of-type

我可以保证绝对没测试过 目前只确保我用的几个格式可以 只是提供思路
(function () {
    "use strict";
    var _querySelector = document.querySelector;

    try {
        // Can"t be used with css3 selector in IE < 9
        _querySelector.call(document, "head *:last-child");
    } catch (e) { // Fails in IE < 9
        var preSelector = "";
        var afterSelector = "";
        document.querySelector = function(selector) {
            var par = ":last-of-type";
            if (selector.indexOf(par) > -1) {
                var selRex = new RegExp("([ws.#])+(?="+par+")", "g");
                preSelector = selector.match(selRex);

                if (!preSelector) {
                    return null;
                }
                var allList = document.querySelectorAll(preSelector);
                if (!allList || allList.length < 1) {
                    return null;
                }
                var lastEle = allList.item(allList.length - 1);

                afterSelector = selector.replace(preSelector, "").replace(par, "").trim();
                if (afterSelector != "") {
                    return lastEle.querySelector(afterSelector);
                }
                return lastEle;
            }
            return _querySelector.call(document, selector);
        }
    }
}());
ie8 css加强问题

如果你有个css预处理器 完全可以在处理的时候 把内容以json字符串的格式统一放到一个元素的font-family里吗

postcss 还是实现简单点 sass有点玩的花了 然而postcss没时间写具体实现

比如我喜欢使用sass

我自己就用这种方案解决了vw vh的问题 而且几乎不用什么等待 只会闪一下

$polyfill: () !global;

@mixin set-value($selector, $map: ()) {
    $polyfill: map-deep-set($polyfill, $selector, $map) !global;
    @each $key, $value in $map {
        #{$key}: #{$value}
    }
}

@mixin easy-set($map) {
    @include set-value("#{&}", $map);
}

$setUnit-debug: false !global;

@function setUnit($val, $parentWidth, $unit) {
    @if $setUnit-debug {
        @return $val + px;
    } @else {
        @return ($val / $parentWidth) * 100 + $unit;
    }
}

@function vw($unit) {
    @return setUnit($unit, $designWidth, vw);
}

@function vh($unit) {
    @return setUnit($unit, $designHeight, vh);
}

@mixin polyfill() {
    .item14 {
        .p {
            @include easy-set((
                    padding-left: vw(91),
                    padding-right: vw(91),
                    margin-bottom: vh(69)
            ));
        }
        .intro1 {
            @include easy-set((
                    margin-top: vh(201)
            ));
        }
        input {
            @include easy-set((
                    height: vw(80),
                    line-height: vw(80),
                    font-size: vw(33),
                    padding: vw(20),
                    border-radius: vw(20)
            ));
        }
        textarea {
            @include easy-set((
                    height: vw(220),
                    line-height: vw(60),
                    font-size: vw(33),
                    padding: vw(20),
                    border-radius: vw(20)
            ));
        }
        .btn {
            @include easy-set((
                    width: vw(306),
                    height: vw(83),
                    font-size: vw(40),
                    border-radius: vw(20),
                    margin-top: vh(136)
            ));
        }
    }
}

@include polyfill();

@include json-encode($polyfill);

大概思路就是使用sass将需要更改的selector信息组成json字符串放置到head font-family里
这样可以随时保持更新 加快速度 js读取相关json 再一个一个添加上去 不限定什么selector 目前我使用querySelectorAll 速度还是有点慢 不过只需要一闪一下就可以转变

        var content = window.getComputedStyle(
                document.querySelector("head")
        ).fontFamily.replace(//g, "").replace(/"/g, "");

        var viewportwidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
        var viewportheight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);

        function rel(propval, unit) {
            return parseFloat(propval.replace(unit, ""));
        }

        function cal(propval) {
            if (typeof propval != "string") {
                return propval;
            }

            if (propval.indexOf("vw") > -1) {
                return viewportwidth * rel(propval, "vw") / 100 + "px";
            } else if (propval.indexOf("vh") > -1) {
                return viewportheight * rel(propval, "vh") / 100 + "px";
            } else {
                return propval;
            }
        }

        function setVwStyle(ele, cssprops) {
            for (var csspropkey in cssprops) {
                ele.style[csspropkey] = cal(cssprops[csspropkey]);
            }
        }

        var parseobj = ( new Function( "return (" + content + ");" ) )();

        for (var key in parseobj) {
            var elements = Array.prototype.slice.call(document.querySelectorAll(key));
            if (elements) {
                for (var i = 0; i < elements.length; i++) {
                    console.dir(elements[i]);
                    setVwStyle(elements[i], parseobj[key]);
                }
            }
        }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78270.html

相关文章

  • Vue 兼容 ie9 的全面解决方案

    摘要:本文将针对使用生态开发完成的网站,以版本为基础兼容目标,实现全功能正常使用的全面兼容解决方案。这样做的目的,是逐步减少全局性方法,使得语言逐步模块化。此外,使用这个,一旦页面不处于浏览器的当前标签,就会自动停止刷新。 前言 背景情况 vue - 2.5.11 vue-cli 使用模板 webpack-simple http请求:axios Vue 官方对于 ie 浏览器版本兼容情...

    codeKK 评论0 收藏0
  • vue2.0 兼容ie9及其以上

    摘要:官方的意思是项目可以在以上的版本中运行但其实使用构建的项目也还是不能在以上的版本中运行下面就来讲如何在以上版本中运行安装在项目入口文件,如本项目中的文件中引用修改配置文件到此编译项目之后该项目就可以成功在以上的浏览器中打开 showImg(https://segmentfault.com/img/bVbkQJ9?w=662&h=172);vue官方的意思是vue项目可以在ie8以上的i...

    sunny5541 评论0 收藏0
  • 编写大型项目web页面 样式基础搭建

    摘要:文中的一些方法来源于我的有出售请大家自行拷贝粘贴颜色要使用代词加数字大小形式数字规格颜色变量不许由或者方法计算得出项目颜色基于配色基础色库设计师都会配出来项目色库需要项目去改变设计师文字和前端页面开发者文字必须为同一类 文中sass的一些方法 来源于我的sassstd zhilizhili-mei zhilizhili-ui npm 有出售 请大家自行拷贝粘贴 showImg(ht...

    smartlion 评论0 收藏0
  • 编写大型项目web页面 样式基础搭建

    摘要:文中的一些方法来源于我的有出售请大家自行拷贝粘贴颜色要使用代词加数字大小形式数字规格颜色变量不许由或者方法计算得出项目颜色基于配色基础色库设计师都会配出来项目色库需要项目去改变设计师文字和前端页面开发者文字必须为同一类 文中sass的一些方法 来源于我的sassstd zhilizhili-mei zhilizhili-ui npm 有出售 请大家自行拷贝粘贴 showImg(ht...

    Dean 评论0 收藏0
  • 编写大型项目web页面 样式基础搭建

    摘要:文中的一些方法来源于我的有出售请大家自行拷贝粘贴颜色要使用代词加数字大小形式数字规格颜色变量不许由或者方法计算得出项目颜色基于配色基础色库设计师都会配出来项目色库需要项目去改变设计师文字和前端页面开发者文字必须为同一类 文中sass的一些方法 来源于我的sassstd zhilizhili-mei zhilizhili-ui npm 有出售 请大家自行拷贝粘贴 showImg(ht...

    cppprimer 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<