Cómo usar Tailwind para tematizar Discourse

Inicialmente pensé que tendría que reemplazar plantillas enteras para agregar las clases de utilidad de Tailwind al HTML. Me informaron que reemplazar las plantillas de Discourse por completo es una mala idea. Afortunadamente, Tailwind también te permite aplicar su CSS a nombres de clase arbitrarios.

Algo como lo siguiente es posible…

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

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

…lo cual es una buena noticia. Así que configuré un nuevo tema usando la CLI discourse_theme. Creé un archivo tailwind-input.css y le pedí a Tailwind que lo consumiera y generara un common/common.scss a partir de él.

Pero entonces Sass se quejó. Dijo

✘ Error in common scss: Error: A la función rgb le falta el argumento $green.
        en la línea 477 de common.scss
>   background-color: rgb(239 246 255 / var(--tw-bg-opacity));

Aparentemente, no se debe alimentar CSS generado por Tailwind a un archivo Sass. La solución recomendada es configurar tu aplicación Rails con esto

config.assets.css_compressor = nil

No sé de Rails ni cómo está configurado el backend de Discourse, y estoy en un hosting administrado, así que no sé si esa es una solución factible para mí.

Así que seguí buscando otra solución, y descubrí que podía decirle a Tailwind que no usara esa sintaxis rgb problemática.

Así que eso es lo que elegí por ahora, y las cosas parecen funcionar hasta ahora… pero esto se siente más como una solución temporal que una solución adecuada…

Una buena solución sería proporcionar al tema de Discourse un archivo CSS normal, como common.css en lugar de common.scss. Lo intenté, pero Discourse ignoró mi archivo CSS.

¿Es posible decirle a Discourse que use ese archivo CSS en lugar del archivo Sass? ¿O hay otra buena solución para este problema?

7 Me gusta

Reabriendo este tema. Estamos usando Tailwind para la consistencia en múltiples sitios web. Estoy de acuerdo con @mksafi en que la solución ideal sería incluir el CSS generado con el tema de Discourse.

¿Cómo podemos incluir CSS plano que omita el preprocesamiento?

Gracias,
Andreas

6 Me gusta

El enfoque que he adoptado se puede encontrar en este repositorio: GitHub - neo4j-contrib/discourse-theme-neo4j

Los puntos esenciales relacionados con Tailwind:

  • Un objetivo de NPM separado compila tailwind usando postcss: \"tailwind:dev\": \"postcss tailwind/global.scss -o assets/tailwind.css
  • La salida CSS se coloca en assets para incluirla con el tema. Observe que about.json incluye la ubicación del activo.
  • El SCSS de Discourse no hace referencia directa a este CSS producido.
  • En su lugar, hay un inicializador de javascript en javascripts/discourse/initializers/tailwind-init.js.es6 que agrega el activo al final del elemento discourse-assets-stylesheets como un nuevo elemento link.
  • Importante: el preflight de Tailwind está deshabilitado en tailwind.config.js, porque de lo contrario restablecería todo el CSS anterior. En su lugar, quiero agregar las clases de Tailwind y confiar en el preflight propio de Discourse.

No es elegante, pero nos funciona. Úselo para su propia inspiración. :slight_smile:

Saludos,
Andreas

4 Me gusta

Esto es intrigante. Tengo curiosidad sobre qué tipo de resultados visuales obtienes al emparejar clases de tailwind encima de lo que Discourse ya ha declarado en sus archivos scss.

¿Estás revisando línea por línea en el inspector y reestilizando muchos elementos del núcleo para usar clases de tailwind?

¿Solo estás usando esto para nuevas adiciones como componentes temáticos o plugins?

Me encantaría ver un ejemplo en vivo de esto en acción.

4 Me gusta

Hemos comenzado a adoptar Tailwind en toda nuestra organización, desde sitios web hasta aplicaciones, por lo que el objetivo inicial es usar Tailwind para aplicar colores y fuentes de marca a partir de una definición común. Luego lo usaremos para componentes personalizados como encabezados, navegación y héroes. Este es un trabajo que había comenzado y que ahora estoy retomando.

Este tema está activo en nuestro sitio, con una publicación de ejemplo en Neo4j Discourse 2021 Theme - General - Neo4j Online Community

Si es interesante, publicaré actualizaciones a medida que nos volvamos más ambiciosos.

7 Me gusta

Hola @abk,

Estamos totalmente interesados. Con ganas de saber cómo has progresado :slight_smile:

2 Me gusta

Estoy buscando aportes aquí, ya que nos gustaría cambiar el tema predeterminado de Discourse a Tailwind CSS. No soy un desarrollador experimentado, por lo que estoy tratando de entender qué se necesita para lograr esto, incluida la integración de Tailwind en la instancia de Discourse y la personalización según nuestras necesidades. Tenemos nuestro propio desarrollador que puede personalizar Tailwind CSS según sea necesario, pero no está familiarizado con la integración en Discourse. Además, no pudimos encontrar todo el HTML utilizado para el tema predeterminado de Discourse, y también suponemos que ese sería nuestro punto de partida para la personalización. Cualquier indicación o guía sobre cómo navegar esto sería muy apreciada. Gracias por su ayuda y apoyo.

1 me gusta