7

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

 3 years ago
source link: http://coding2live.com/detail/74/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8js%E5%9C%A8%E9%A1%B5%E9%9D%A2%E4%B8%AD%E5%8A%A0%E8%BD%BDcss%E6%96%87%E4%BB%B6%EF%BC%9F
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

coding2live 2021-01-26 09:27:38 0 106 javascript, html, css, dhtml

是否可以用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的重载有关系,建议读者自行搜索了解。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK