Como usar Tailwind para personalizar o tema do Discourse

Inicialmente, pensei que teria que substituir modelos inteiros para adicionar as classes de utilitário do Tailwind ao HTML. Substituir modelos do Discourse por completo é uma má ideia, fui informado. Felizmente, o Tailwind também permite aplicar seu CSS a nomes de classe arbitrários.

Algo como o seguinte é possível…

@layer components {
  .d-header {
    @apply bg-blue-100;
  }

  #main-outlet.wrap {
    @apply bg-yellow-200;
  }
}

…o que é uma boa notícia. Então, configurei um novo tema usando a CLI discourse_theme. Criei um arquivo tailwind-input.css e pedi ao Tailwind para consumi-lo e gerar um common/common.scss a partir dele.

Mas então o Sass reclamou. Ele disse

✘ Error in common scss: Error: Function rgb está faltando o argumento $green.
        on line 477 of common.scss
>>   background-color: rgb(239 246 255 / var(--tw-bg-opacity));

Aparentemente, você não deve alimentar CSS gerado pelo Tailwind em um arquivo Sass. A solução recomendada é configurar seu aplicativo Rails com isso

config.assets.css_compressor = nil

Eu não conheço Rails nem como o backend do Discourse é configurado, e estou em hospedagem gerenciada, então não sei se essa é uma solução viável para mim.

Então continuei procurando outra solução e descobri que poderia dizer ao Tailwind para não usar essa sintaxe rgb problemática.

Então foi com isso que fiquei por enquanto, e as coisas parecem funcionar até agora… mas isso parece mais uma solução temporária do que uma solução adequada…

Uma boa solução seria fornecer ao tema do Discourse um arquivo CSS simples, como common.css em vez de common.scss. Tentei isso, mas o Discourse ignorou meu arquivo CSS.

É possível dizer ao Discourse para usar esse arquivo CSS em vez do arquivo Sass? Ou existe outra boa solução para este problema?

7 curtidas

Tópico sendo reativado. Estamos usando Tailwind para consistência em vários sites. Concordo com @mksafi que a solução ideal seria incluir o CSS gerado com o tema do Discourse.

Como podemos incluir CSS puro que ignore o pré-processamento?

Obrigado,
Andreas

6 curtidas

A abordagem que adotei pode ser encontrada neste repositório: GitHub - neo4j-contrib/discourse-theme-neo4j

Os pontos essenciais relacionados ao Tailwind:

  • Um alvo NPM separado compila o Tailwind usando postcss: \"tailwind:dev\": \"postcss tailwind/global.scss -o assets/tailwind.css
  • A saída CSS é colocada em assets para ser incluída com o tema. Observe que about.json inclui a localização do asset.
  • O SCSS do Discourse não referencia diretamente este CSS produzido
  • Em vez disso, há um inicializador javascript em javascripts/discourse/initializers/tailwind-init.js.es6 que anexa o asset ao final do elemento discourse-assets-stylesheets como um novo elemento link
  • Importante: o preflight do Tailwind está desabilitado em tailwind.config.js, pois caso contrário, redefiniria todo o CSS precedente. Em vez disso, quero adicionar as classes do Tailwind e confiar no próprio preflight do Discourse.

Não é elegante, mas funciona para nós. Use para sua própria inspiração. :slight_smile:

Atenciosamente,
Andreas

4 curtidas

Isso é intrigante. Estou curioso sobre que tipo de resultados visuais você obtém ao emparelhar classes tailwind sobre o que o Discourse já declarou em seus arquivos scss.

Você está passando linha por linha no inspetor e reestilizando muitos elementos principais para usar classes tailwind?

Você está usando isso apenas para novas adições, como componentes de tema ou plugins?

Eu adoraria ver um exemplo ao vivo disso em ação.

4 curtidas

Começamos a adotar o Tailwind em toda a nossa organização – de sites a aplicativos --, então o objetivo inicial é usar o Tailwind para aplicar cores e fontes da marca a partir de uma definição comum. Em seguida, o usaremos para componentes personalizados, como cabeçalhos, navegação e seções principais. Este é um trabalho que eu havia iniciado e estou retomando agora.

Este tema está ativo em nosso site, com uma postagem de exemplo em Neo4j Discourse 2021 Theme - General - Neo4j Online Community

Se for interessante, postarei atualizações à medida que nos tornarmos mais ambiciosos.

7 curtidas

Olá @abk,

Estamos definitivamente interessados. Ansiosos para saber como você progrediu :slight_smile:

2 curtidas

Estou buscando opiniões aqui, pois gostaríamos de mudar o tema padrão do Discourse para Tailwind CSS. Não sou um desenvolvedor experiente, então estou tentando entender o que é preciso para fazer isso, incluindo a integração do Tailwind à instância do Discourse e a personalização de acordo com nossas necessidades. Temos nosso próprio desenvolvedor que pode personalizar o Tailwind CSS conforme necessário, mas ele não está familiarizado com a integração dele ao Discourse. Além disso, não conseguimos encontrar todo o HTML usado para o tema padrão do Discourse e também presumimos que esse seria nosso ponto de partida para a personalização. Quaisquer dicas ou orientações sobre como navegar nisso seriam muito apreciadas. Obrigado pela sua ajuda e apoio.

1 curtida