Aqui está a maneira "antiga" de fazer isso, que, esperançosamente, funciona em todos os navegadores. Em teoria, você usaria setAttribute
infelizmente o IE6 não o suporta consistentemente.
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);
}
Este exemplo verifica se o CSS já foi adicionado e o adiciona apenas uma vez.
Coloque esse código em um arquivo javascript, faça com que o usuário final inclua o javascript e verifique se o caminho CSS é absoluto para que seja carregado nos seus servidores.
VanillaJS
Aqui está um exemplo que usa JavaScript simples para injetar um link CSS no head
elemento com base na parte do nome do arquivo da URL:
<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>
Insira o código imediatamente antes da head
tag de fechamento e o CSS será carregado antes da renderização da página. O uso de um .js
arquivo JavaScript ( ) externo fará com que um Flash de conteúdo não estilizado ( FOUC ) apareça.