Cross-browser (IE8-) getComputedStyle with Javascript?

后端 未结 5 1380
太阳男子
太阳男子 2020-11-28 10:58

Since IE8 does not support getComputedStyle, we can only use currentStyle. However, it does not return the real \"computed\" value

5条回答
  •  粉色の甜心
    2020-11-28 11:00

    This will not work for all styles but will work for dimensions (which is what I needed).

    Instead of trying to guess what styles are applied, simply use the position in pixels of each of the four sides of a box-like element to calculate the dimensions. This will also work back to IE 5 and FF 3.

    height = elem.getBoundingClientRect().bottom - elem.getBoundingClientRect().top;
    width = elem.getBoundingClientRect().right - elem.getBoundingClientRect().left;
    

    See also: getBoundingClientRect is awesome

    If this still doesn't work for you, check out this fiddle I put together for calculating the inside width of a box. It uses the following as a shim for getComputedStyle:

    /**
     * getComputedStyle function for IE8
     * borrowed from:
     * http://missouristate.info/scripts/2013/common.js
     */
    "getComputedStyle" in window || function() {
      function c(a, b, g, e) {
        var h = b[g];
        b = parseFloat(h);
        h = h.split(/\d/)[0];
        e = null !== e ? e : /%|em/.test(h) && a.parentElement ? c(a.parentElement, a.parentElement.currentStyle, "fontSize", null) : 16;
        a = "fontSize" == g ? e : /width/i.test(g) ? a.clientWidth : a.clientHeight;
        return "em" == h ? b * e : "in" == h ? 96 * b : "pt" == h ? 96 * b / 72 : "%" == h ? b / 100 * a : b;
      }
      function a(a, c) {
        var b = "border" == c ? "Width" : "", e = c + "Top" + b, h = c + "Right" + b, l = c + "Bottom" + b, b = c + "Left" + b;
        a[c] = (a[e] == a[h] == a[l] == a[b] ? [a[e]] : a[e] == a[l] && a[b] == a[h] ? [a[e], a[h]] : a[b] == a[h] ? [a[e], a[h], a[l]] : [a[e], a[h], a[l], a[b]]).join(" ");
      }
      function b(b) {
        var d, g = b.currentStyle, e = c(b, g, "fontSize", null);
        for (d in g) {
          /width|height|margin.|padding.|border.+W/.test(d) && "auto" !== this[d] ? this[d] = c(b, g, d, e) + "px" : "styleFloat" === d ? this["float"] = g[d] : this[d] = g[d];
        }
        a(this, "margin");
        a(this, "padding");
        a(this, "border");
        this.fontSize = e + "px";
        return this;
      }
      b.prototype = {};
      window.getComputedStyle = function(a) {
        return new b(a);
      };
    }();
    

提交回复
热议问题