如何使用js在页面中加载css文件?

coding2live 2021-01-26 09:27:38 100

是否可以用js向html中引入css文件?

如果可以的话,如何操作呢?

以下答案仅供参考

下面是一种比较“老”的方法,优点就是兼容性比较好。

理论上讲,你应该用setAttribute这个方法,但是IE6并不支持译者coding2live注:现在是2021年了,IE6已经被抛弃了,可以用了

var cssId = 'myCss';  // you could encode the css path itself to generate id..
if (!document.getElementById(cssId))
{
    var head  = document.getElementsByTagName('head')[0];
    var link  = document.createElement('link');
    link.id   = cssId;
    link.rel  = 'stylesheet';
    link.type = 'text/css';
    link.href = 'http://website.com/css/stylesheet.css';
    link.media = 'all';
    head.appendChild(link);
}

上面的示例会先检查CSS是否已经加载,进而防止重复加载。

把这段代码复制到js中,然后把css文件的路径写成绝对路径,这样就可以从你的服务器上加载指定的css文件了。

VanillaJS

下面的代码是用原生js,根据URL的文件名部分,在head标签中注入一个CSS链接:

<script type="text/javascript">
var file = location.pathname.split( "/" ).pop();

var link = document.createElement( "link" );
link.href = file.substr( 0, file.lastIndexOf( "." ) ) + ".css";
link.type = "text/css";
link.rel = "stylesheet";
link.media = "screen,print";

document.getElementsByTagName( "head" )[0].appendChild( link );
</script>

把上面的代码插入到head标签里面,这样CSS就会在页面渲染完成之前加载。

假如使用引入外部js文件的方法,页面可能会"闪"一下。

至于为何页面会闪,跟dom的重载有关系,建议读者自行搜索了解。