DEV Community

Cover image for Como utilizar um `.css` hospedado no GitHub ou Codeberg em um projeto HTML?
Yuri Ximenes Martins
Yuri Ximenes Martins

Posted on

Como utilizar um `.css` hospedado no GitHub ou Codeberg em um projeto HTML?

Introdução

Considere a seguinte situação: você possui um arquivo .css (digamos style.css) e gostaria de utilizá-lo em vários projetos de desenvolvimento web. Como fazer isso de forma simples?

Naturalmente, a ideia é utilizar um import

<link rel="stylesheet" type="text/css" href="path/to/style.css">
Enter fullscreen mode Exit fullscreen mode

Por comodidade, seria interessante se o arquivo style.css estivesse hospedado em algum servidor externo para que não haja a necessidade de se mantê-lo na mesma máquina onde os projetos estão sendo desenvolvidos.

Algo baste útil seria manter um repositório no GitHub, ou em outra plataforma de manejo de repositórios git, como Codeberg ou Gitlab, contendo todos os arquivos .css a serem utilizados. Neste caso, poderíamos manter os arquivos organizados por versões e, quando necessitássemos de um deles, bastaria fazer um import como acima para sua correspondente url.

A questão é: qual url utilizar?.

A tentativa mais óbvia seria a url

https://github.com/user/repo/path/to/style.css`
Enter fullscreen mode Exit fullscreen mode

onde path/to/style.css é o caminho relativo ao repositório repo. No entanto, esta não é uma url válida.

Ao visitar o repositório pela plataforma (digamos o GitHub) e clicar no arquivo style.css, observa-se que a url indicada está no formato

https://github.com/user/repo/blob/branch/path/to/style.css
Enter fullscreen mode Exit fullscreen mode

Contudo, essa url não expõe o arquivo. Poderíamos, então, pensar na url que apresenta a versão raw de style.css, a qual é da forma

https://raw.githubusercontent.com/user/repo/branch/path/to/style.css
Enter fullscreen mode Exit fullscreen mode

Mas essa url expõe o conteúdo do arquivo style.css, e não o arquivo em si.

  • Poxa vida, como proceder?

Abordagem 1

Uma abordagem seria pegar o conteúdo exposto na url raw e incorporá-lo dentro da tag <style> do projeto no qual se deseja utilizar style.css.

Isso pode ser feito, por exemplo, adicionando o seguinte trecho dentro da tag <head> no index.html do projeto (veja aqui):

<script>
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "https://raw.githubusercontent.com/user/repo/branch/path/to/style.css", true);
xhttp.onreadystatechange = function() {
    if (xhttp.readyState === 4) {
        if (xhttp.status === 200) {
            var link = document.createElement('style');
            link.innerHTML=xhttp.responseText;
            document.getElementsByTagName('head')[0].appendChild(link);
        }
    }
}
xhttp.send(null);
</script>
Enter fullscreen mode Exit fullscreen mode
  • Caramba, mas não há uma forma mais direta de expor os arquivos .css?

Abordagem 2

Se a sua plataforma admite a criação de páginas estáticas (GitHub Pages, Codeberg Pages ou Gitlab Pages, por exemplo), então há uma forma imediata de expor arquivos em repositórios. A saber, transformando os repositórios em uma página estática.

Eu gosto muito do Codeberg para a hospedagem de sites estáticos. De fato, lá é muito simples: todos os repositórios podem ser vistos, por padrão, como sites estáticos. Com efeito, ao invés de utilizar a url

https://codeberg.org/user/repo
Enter fullscreen mode Exit fullscreen mode

basta utilizar a url

https://user.codeberg.page/repo/@branch
Enter fullscreen mode Exit fullscreen mode

Nesse caso, o arquivo style.css ficaria automaticamente exposto na url

https://user.codeberg.page/repo/@branch/path/to/style.css
Enter fullscreen mode Exit fullscreen mode

e bastaria importá-la no projeto desejado em uma tag <link>, como comentado no início do post.

Fim

A depender da plataforma, algumas configurações são necessárias para transformar um repositório em um site estático. Além disso, a url para acessar as páginas do site podem variar. No entanto, no fundo o processo é o mesmo.

Outra alternativa seria colocar seus arquivos .css num S3 Bucket na AWS ou em algum serviço similar em outros serviços de nuvem, que fornecem uma cota gratuita. Contudo, nessa abordagem perde-se a praticidade de se trabalhar com um repositório versionado.

Até mais,
Yuri.

Top comments (0)