【原创】最有效解决IE8 position兼容性问题

看了网上的的帖子真是水的一塌糊涂,完全没有解决我和广大网友们的关于ie8下position兼容性问题。

网上有的技术我就不说了 ,大家自行搜索,我想说的重点是 ie8不支持html5的新标签。这是重点。因此有的童鞋怎么搜索网上再怎么实现也不会成功解决这个问题。

就比如html5的<header></header>标签。

现在解决办法有两种:

        一、你将那些新标签全改成div(费事费时,还得从新规划css样式 )

    推荐: 二、用js代码让ie8可以识别那些新标签。

          详解+步骤:

              1、在head中我们加上判断

<!--[if lte IE 8]>
    <script src="script/html5shiv.min.js"></script>
    <script src="script/selectivizr.min.js"></script>
<![endif]-->

              判断如果是ie8的情况下我们引入这两个文件

              2、理所当然地我们在你们放js文件的文件夹下放入这两个文件


            html5shiv.min.js文件的内容为:
/* HTML5 Shiv v3.7.2 https://github.com/aFarkas/html5shiv */
; (function(window, document) {
    var version = '3.7.2';
    var options = window.html5 || {};
    var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
    var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
    var supportsHtml5Styles;
    var expando = '_html5shiv';
    var expanID = 0;
    var expandoData = {};
    var supportsUnknownElements; (function() {
        try {
            var a = document.createElement('a');
            a.innerHTML = '<xyz></xyz>';
            supportsHtml5Styles = ('hidden' in a);
            supportsUnknownElements = a.childNodes.length == 1 || (function() { (document.createElement)('a');
                var frag = document.createDocumentFragment();
                return (typeof frag.cloneNode == 'undefined' || typeof frag.createDocumentFragment == 'undefined' || typeof frag.createElement == 'undefined')
            } ())
        } catch(e) {
            supportsHtml5Styles = true;
            supportsUnknownElements = true
        }
    } ());
    function addStyleSheet(ownerDocument, cssText) {
        var p = ownerDocument.createElement('p'),
        parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
        p.innerHTML = 'x<style>' + cssText + '</style>';
        return parent.insertBefore(p.lastChild, parent.firstChild)
    }
    function getElements() {
        var elements = html5.elements;
        return typeof elements == 'string' ? elements.split(' ') : elements
    }
    function addElements(newElements, ownerDocument) {
        var elements = html5.elements;
        if (typeof elements != 'string') {
            elements = elements.join(' ')
        }
        if (typeof newElements != 'string') {
            newElements = newElements.join(' ')
        }
        html5.elements = elements + ' ' + newElements;
        shivDocument(ownerDocument)
    }
    function getExpandoData(ownerDocument) {
        var data = expandoData[ownerDocument[expando]];
        if (!data) {
            data = {};
            expanID++;
            ownerDocument[expando] = expanID;
            expandoData[expanID] = data
        }
        return data
    }
    function createElement(nodeName, ownerDocument, data) {
        if (!ownerDocument) {
            ownerDocument = document
        }
        if (supportsUnknownElements) {
            return ownerDocument.createElement(nodeName)
        }
        if (!data) {
            data = getExpandoData(ownerDocument)
        }
        var node;
        if (data.cache[nodeName]) {
            node = data.cache[nodeName].cloneNode()
        } else if (saveClones.test(nodeName)) {
            node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode()
        } else {
            node = data.createElem(nodeName)
        }
        return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node
    }
    function createDocumentFragment(ownerDocument, data) {
        if (!ownerDocument) {
            ownerDocument = document
        }
        if (supportsUnknownElements) {
            return ownerDocument.createDocumentFragment()
        }
        data = data || getExpandoData(ownerDocument);
        var clone = data.frag.cloneNode(),
        i = 0,
        elems = getElements(),
        l = elems.length;
        for (; i < l; i++) {
            clone.createElement(elems[i])
        }
        return clone
    }
    function shivMethods(ownerDocument, data) {
        if (!data.cache) {
            data.cache = {};
            data.createElem = ownerDocument.createElement;
            data.createFrag = ownerDocument.createDocumentFragment;
            data.frag = data.createFrag()
        }
        ownerDocument.createElement = function(nodeName) {
            if (!html5.shivMethods) {
                return data.createElem(nodeName)
            }
            return createElement(nodeName, ownerDocument, data)
        };
        ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' + 'var n=f.cloneNode(),c=n.createElement;' + 'h.shivMethods&&(' + getElements().join().replace(/[\w\-:]+/g,
        function(nodeName) {
            data.createElem(nodeName);
            data.frag.createElement(nodeName);
            return 'c("' + nodeName + '")'
        }) + ');return n}')(html5, data.frag)
    }
    function shivDocument(ownerDocument) {
        if (!ownerDocument) {
            ownerDocument = document
        }
        var data = getExpandoData(ownerDocument);
        if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
            data.hasCSS = !!addStyleSheet(ownerDocument, 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' + 'mark{background:#FF0;color:#000}' + 'template{display:none}')
        }
        if (!supportsUnknownElements) {
            shivMethods(ownerDocument, data)
        }
        return ownerDocument
    }
    var html5 = {
        'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video',
        'version': version,
        'shivCSS': (options.shivCSS !== false),
        'supportsUnknownElements': supportsUnknownElements,
        'shivMethods': (options.shivMethods !== false),
        'type': 'default',
        'shivDocument': shivDocument,
        createElement: createElement,
        createDocumentFragment: createDocumentFragment,
        addElements: addElements
    };
    window.html5 = html5;
    shivDocument(document)
} (this, document));

 

     

      selectivizr.min.js文件的内容为:
/*! selectivizr v1.0.2 http://selectivizr.com */
(function(j) {
    function A(a) {
        return a.replace(B, h).replace(C,
        function(a, d, b) {
            for (var a = b.split(","), b = 0, e = a.length; b < e; b++) {
                var s = D(a[b].replace(E, h).replace(F, h)) + o,
                l = [];
                a[b] = s.replace(G,
                function(a, b, c, d, e) {
                    if (b) {
                        if (l.length > 0) {
                            var a = l,
                            f, e = s.substring(0, e).replace(H, i);
                            if (e == i || e.charAt(e.length - 1) == o) e += "*";
                            try {
                                f = t(e)
                            } catch(k) {}
                            if (f) {
                                e = 0;
                                for (c = f.length; e < c; e++) {
                                    for (var d = f[e], h = d.className, j = 0, m = a.length; j < m; j++) {
                                        var g = a[j];
                                        if (!RegExp("(^|\\s)" + g.className + "(\\s|$)").test(d.className) && g.b && (g.b === !0 || g.b(d) === !0)) h = u(h, g.className, !0)
                                    }
                                    d.className = h
                                }
                            }
                            l = []
                        }
                        return b
                    } else {
                        if (b = c ? I(c) : !v || v.test(d) ? {
                            className: w(d),
                            b: !0
                        }: null) return l.push(b),
                        "." + b.className;
                        return a
                    }
                })
            }
            return d + a.join(",")
        })
    }
    function I(a) {
        var c = !0,
        d = w(a.slice(1)),
        b = a.substring(0, 5) == ":not(",
        e,
        f;
        b && (a = a.slice(5, -1));
        var l = a.indexOf("(");
        l > -1 && (a = a.substring(0, l));
        if (a.charAt(0) == ":") switch (a.slice(1)) {
        case "root":
            c = function(a) {
                return b ? a != p: a == p
            };
            break;
        case "target":
            if (m == 8) {
                c = function(a) {
                    function c() {
                        var d = location.hash,
                        e = d.slice(1);
                        return b ? d == i || a.id != e: d != i && a.id == e
                    }
                    k(j, "hashchange",
                    function() {
                        g(a, d, c())
                    });
                    return c()
                };
                break
            }
            return ! 1;
        case "checked":
            c = function(a) {
                J.test(a.type) && k(a, "propertychange",
                function() {
                    event.propertyName == "checked" && g(a, d, a.checked !== b)
                });
                return a.checked !== b
            };
            break;
        case "disabled":
            b = !b;
        case "enabled":
            c = function(c) {
                if (K.test(c.tagName)) return k(c, "propertychange",
                function() {
                    event.propertyName == "$disabled" && g(c, d, c.a === b)
                }),
                q.push(c),
                c.a = c.disabled,
                c.disabled === b;
                return a == ":enabled" ? b: !b
            };
            break;
        case "focus":
            e = "focus",
            f = "blur";
        case "hover":
            e || (e = "mouseenter", f = "mouseleave");
            c = function(a) {
                k(a, b ? f: e,
                function() {
                    g(a, d, !0)
                });
                k(a, b ? e: f,
                function() {
                    g(a, d, !1)
                });
                return b
            };
            break;
        default:
            if (!L.test(a)) return ! 1
        }
        return {
            className: d,
            b: c
        }
    }
    function w(a) {
        return M + "-" + (m == 6 && N ? O++:a.replace(P,
        function(a) {
            return a.charCodeAt(0)
        }))
    }
    function D(a) {
        return a.replace(x, h).replace(Q, o)
    }
    function g(a, c, d) {
        var b = a.className,
        c = u(b, c, d);
        if (c != b) a.className = c,
        a.parentNode.className += i
    }
    function u(a, c, d) {
        var b = RegExp("(^|\\s)" + c + "(\\s|$)"),
        e = b.test(a);
        return d ? e ? a: a + o + c: e ? a.replace(b, h).replace(x, h) : a
    }
    function k(a, c, d) {
        a.attachEvent("on" + c, d)
    }
    function r(a, c) {
        if (/^https?:\/\//i.test(a)) return c.substring(0, c.indexOf("/", 8)) == a.substring(0, a.indexOf("/", 8)) ? a: null;
        if (a.charAt(0) == "/") return c.substring(0, c.indexOf("/", 8)) + a;
        var d = c.split(/[?#]/)[0];
        a.charAt(0) != "?" && d.charAt(d.length - 1) != "/" && (d = d.substring(0, d.lastIndexOf("/") + 1));
        return d + a
    }
    function y(a) {
        if (a) return n.open("GET", a, !1),
        n.send(),
        (n.status == 200 ? n.responseText: i).replace(R, i).replace(S,
        function(c, d, b, e, f) {
            return y(r(b || f, a))
        }).replace(T,
        function(c, d, b) {
            d = d || i;
            return " url(" + d + r(b, a) + d + ") "
        });
        return i
    }
    function U() {
        var a, c;
        a = f.getElementsByTagName("BASE");
        for (var d = a.length > 0 ? a[0].href: f.location.href, b = 0; b < f.styleSheets.length; b++) if (c = f.styleSheets[b], c.href != i && (a = r(c.href, d))) c.cssText = A(y(a));
        q.length > 0 && setInterval(function() {
            for (var a = 0,
            c = q.length; a < c; a++) {
                var b = q[a];
                if (b.disabled !== b.a) b.disabled ? (b.disabled = !1, b.a = !0, b.disabled = !0) : b.a = b.disabled
            }
        },
        250)
    }
    if (!
    /*@cc_on!@*/
    true) {
        var f = document,
        p = f.documentElement,
        n = function() {
            if (j.XMLHttpRequest) return new XMLHttpRequest;
            try {
                return new ActiveXObject("Microsoft.XMLHTTP")
            } catch(a) {
                return null
            }
        } (),
        m = /MSIE (\d+)/.exec(navigator.userAgent)[1];
        if (! (f.compatMode != "CSS1Compat" || m < 6 || m > 8 || !n)) {
            var z = {
                NW: "*.Dom.select",
                MooTools: "$$",
                DOMAssistant: "*.$",
                Prototype: "$$",
                YAHOO: "*.util.Selector.query",
                Sizzle: "*",
                jQuery: "*",
                dojo: "*.query"
            },
            t,
            q = [],
            O = 0,
            N = !0,
            M = "slvzr",
            R = /(\/\*[^*]*\*+([^\/][^*]*\*+)*\/)\s*/g,
            S = /@import\s*(?:(?:(?:url\(\s*(['"]?)(.*)\1)\s*\))|(?:(['"])(.*)\3))[^;]*;/g,
            T = /\burl\(\s*(["']?)(?!data:)([^"')]+)\1\s*\)/g,
            L = /^:(empty|(first|last|only|nth(-last)?)-(child|of-type))$/,
            B = /:(:first-(?:line|letter))/g,
            C = /(^|})\s*([^\{]*?[\[:][^{]+)/g,
            G = /([ +~>])|(:[a-z-]+(?:\(.*?\)+)?)|(\[.*?\])/g,
            H = /(:not\()?:(hover|enabled|disabled|focus|checked|target|active|visited|first-line|first-letter)\)?/g,
            P = /[^\w-]/g,
            K = /^(INPUT|SELECT|TEXTAREA|BUTTON)$/,
            J = /^(checkbox|radio)$/,
            v = m > 6 ? /[\$\^*]=(['"])\1/: null,
            E = /([(\[+~])\s+/g,
            F = /\s+([)\]+~])/g,
            Q = /\s+/g,
            x = /^\s*((?:[\S\s]*\S)?)\s*$/,
            i = "",
            o = " ",
            h = "$1"; (function(a, c) {
                function d() {
                    try {
                        p.doScroll("left")
                    } catch(a) {
                        setTimeout(d, 50);
                        return
                    }
                    b("poll")
                }
                function b(d) {
                    if (! (d.type == "readystatechange" && f.readyState != "complete") && ((d.type == "load" ? a: f).detachEvent("on" + d.type, b, !1), !e && (e = !0))) c.call(a, d.type || d)
                }
                var e = !1,
                g = !0;
                if (f.readyState == "complete") c.call(a, i);
                else {
                    if (f.createEventObject && p.doScroll) {
                        try {
                            g = !a.frameElement
                        } catch(h) {}
                        g && d()
                    }
                    k(f, "readystatechange", b);
                    k(a, "load", b)
                }
            })(j,
            function() {
                for (var a in z) {
                    var c, d, b = j;
                    if (j[a]) {
                        for (c = z[a].replace("*", a).split("."); (d = c.shift()) && (b = b[d]););
                        if (typeof b == "function") {
                            t = b;
                            U();
                            break
                        }
                    }
                }
            })
        }
    }
})(this);

 

  大家只要创建这两个文件,将其正确引用就可以了。

  ps:前端的兄弟们,我有一句话不知当讲不当讲,人这一辈子,烟可以抽,酒可以喝,架可以打,有事说事,我能帮就帮!!但是你要是碰这个???对不起,我们不认识。

    前面是瞎扯淡,主要是让大家更有更好的交互体验,提醒一下用户们更显一下浏览器吧(在body的开头中加入如下提示性代码):

      

<!--[if lte IE 8]><div class="browsehappy" role="dialog">当前网页 <strong>不支持</strong> 你正在使用的浏览器。为了正常的访问,请 <a href="http://browsehappy.com/" target="_blank">升级你的浏览器</a>!</div><![endif]-->

 

路漫漫其修远兮吾将上下而求索。

 

posted @ 2017-02-20 09:29  东南篱  阅读(6496)  评论(0编辑  收藏  举报