努力增強ie8到ie9 polyfill水平 完全拋棄老舊瀏覽器ie8

不知道你們對ie8有什麼見解css

不少人在說ie8要兼容的理由的時候老是用百度的調查指數 其實有一個問題 百度中ie8有很大一部分多是360這類的瀏覽器android

ie8必須退出歷史舞臺 而且咱們還要和設計作出表態 不能無限制搞出新設計css3

長久以來web 有 展現頁面 也有企業應用頁面 可是都有一個問題 被限制了加載資源總數
有的時候我在想web開發者真牛 用比別人少得資源完成比別人多的功能
不要說android swift難web

你是說那個不停拖控件 不停加第三方服務 不用考慮安裝大小的開發嗎

這個模板隨時會改

<!-- 總共35k 提供了dom3 es5 大部分功能 -->
    <!--[if IE 8]>
    <script src="../../public/js/ie8-support/es5-shim.min.js"></script>
    <script src="../../public/js/ie8-support/es5-sham.min.js"></script>
    <script src="../../public/js/ie8-support/ie8.min.js"></script>
    <![endif]-->
    <!-- dom4級 功能 -->
    <script src="../../public/js/modren-browser/dom4.min.js"></script>

ie8 js增強的問題

es5

es5-shim
es5-shamjson

必須的swift

ie8 dom

感謝 webreflection瀏覽器

ie8
dom4sass

dom4中classlist必須啊dom

ie8 document.querySelector

ie8 document.querySelector 沒法使用css3 selector
爲了提供css :last-of-type 支持 其實css3大部分均可以改寫方法支持 不過不必 post

我寫了個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('([\\w\\s.#])+(?='+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]);
                }
            }
        }
相關文章
相關標籤/搜索