← Polyfill CSS Variables Download

/*-----------------------------------------------------------------------------\ | CSS Variables Polyfill | | | | Enables support for browsers which do not support CSS variables. | +------------------------------------------------------------------------------+ | Author: Jon Hawks | | Version: 1.3 | \-----------------------------------------------------------------------------*/ window.cssVars = function(){ if( typeof window.CSS !== "function" || typeof window.CSS.supports !== "function" || !window.CSS.supports("(--property: value)") || navigator.userAgent.indexOf("Edge/") > -1 || navigator.userAgent.indexOf("MSIE ") > -1 || navigator.userAgent.indexOf("Trident/") > -1 ){ /* Convert external stylesheets to inline. */ var linkElements = document.querySelectorAll("link[rel='stylesheet']"); for(var i = 0; i < linkElements.length; i++){ if( typeof linkElements[i].sheet !== "object" || linkElements[i].sheet === null || typeof linkElements[i].sheet.cssText !== "string" ) continue; var replacement = document.createElement("style"); //replacement.innerHTML = linkElements[i].sheet.cssText; replacement.sheet.cssText = linkElements[i].sheet.cssText; linkElements[i].parentNode.replaceChild(replacement, linkElements[i]); } /* Get all of the inline stylesheets. */ var styleElements = document.getElementsByTagName("style"); /* Find CSS variables. */ var foundVars = {}; for(var i = styleElements.length - 1; i >= 0; i--){ if(typeof styleElements[i].innerHTML !== "string") continue; foundVars[i] = styleElements[i].innerHTML.match(/((--([\w-]+)\s*):\s*([^;}]+|(?:.*\)[^;]*))\s*;(?![^(]*\)))/g); } /* Parse CSS variables. */ if(typeof cssVars.parsedVars !== "object") cssVars.parsedVars = {}; var parsedVars = cssVars.parsedVars; for(var i in foundVars){ if(typeof foundVars[i] !== "object" || !foundVars[i]) continue; for(var j = foundVars[i].length - 1; j >= 0; j--){ var curVar = foundVars[i][j].split(/:(?![^(]*\))/); if(typeof curVar[1] === "string"){ parsedVars[curVar[0]] = curVar[1].split(/;(?![^(]*\))/)[0].trim(); } } } /* Replace CSS variables. */ for(var i in styleElements){ if(typeof styleElements[i].innerHTML !== "string") continue; for(var j in parsedVars){ if(typeof parsedVars[j] !== "string") continue; var regex = new RegExp("var\\(\\s*" + j + "\\s*\\)", "g"); styleElements[i].innerHTML = styleElements[i].innerHTML.replace(regex, parsedVars[j]); } } } } /* Page load events. */ if(window.addEventListener) window.addEventListener("load", cssVars); else if(window.attachEvent) window.attachEvent("onload", cssVars);