Как использовать Tailwind для настройки темы Discourse

Сначала я думал, что мне придётся заменять целые шаблоны, чтобы добавить утилитарные классы Tailwind в HTML. Мне сообщили, что полная замена шаблонов Discourse — плохая идея. К счастью, Tailwind также позволяет применять свои стили CSS к произвольным именам классов.

Например, возможно следующее…

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

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

…что является хорошей новостью. Поэтому я создал новую тему, используя CLI discourse_theme. Я создал файл tailwind-input.css и попросил Tailwind обработать его и сгенерировать на его основе файл common/common.scss.

Однако Sass выдал ошибку. Он сообщил:

✘ Error in common scss: Error: Function rgb is missing argument $green.
        on line 477 of common.scss
>>   background-color: rgb(239 246 255 / var(--tw-bg-opacity));

Оказывается, не следует передавать сгенерированный Tailwind CSS в файл Sass. Рекомендуемое решение — настроить ваше Rails-приложение следующим образом:

config.assets.css_compressor = nil

Я не знаком с Rails и тем, как настроен бэкенд Discourse, к тому же я использую управляемый хостинг, поэтому не знаю, применимо ли это решение в моём случае.

Поэтому я продолжил поиски другого решения и узнал, что можно настроить Tailwind так, чтобы он не использовал проблемный синтаксис rgb.

Именно это я пока и применил, и пока всё работает… но это кажется скорее временным обходным путём, чем полноценным решением…

Хорошим решением было бы предоставить тему Discourse с обычным CSS-файлом, например common.css, вместо common.scss. Я попробовал это сделать, но Discourse проигнорировал мой CSS-файл.

Возможно ли указать Discourse использовать этот CSS-файл вместо файла Sass? Или есть другое хорошее решение этой проблемы?

Поднимаю эту тему. Мы используем Tailwind для обеспечения единообразия на нескольких веб-сайтах. Я согласен с @mksafi, что идеальным решением было бы включить сгенерированный CSS в тему Discourse.

Как можно включить обычный CSS, обходящий предварительную обработку?

Спасибо,
Андреас

Подход, который я использовал, можно найти в этом репозитории: GitHub - neo4j-contrib/discourse-theme-neo4j · GitHub

Ключевые моменты, касающиеся Tailwind:

  • Отдельная цель NPM собирает Tailwind с помощью postcss: "tailwind:dev": "postcss tailwind/global.scss -o assets/tailwind.css
  • Результат компиляции CSS размещается в папке assets для включения в тему. Обратите внимание, что about.json содержит путь к этому ресурсу.
  • SCSS-файлы Discourse не ссылаются напрямую на этот сгенерированный CSS.
  • Вместо этого используется инициализатор JavaScript по адресу javascripts/discourse/initializers/tailwind-init.js.es6, который добавляет ресурс в конец элемента discourse-assets-stylesheets в виде нового тега link.
  • Важно: префайл Tailwind отключен в файле tailwind.config.js, так как иначе он сбросит все предшествующие стили CSS. Вместо этого я хочу добавлять классы Tailwind и полагаться на собственный префайл Discourse.

Не очень элегантно, но для нас это работает. Используйте это для собственного вдохновения. :slight_smile:

С наилучшими пожеланиями,
Андреас

Это интересно. Мне любопытно, какие визуальные результаты получаются при наложении классов Tailwind поверх стилей, которые Discourse уже объявил в своих файлах scss.

Вы проходите по каждому элементу в инспекторе и переделываете многие элементы ядра, используя классы Tailwind?

Или вы используете это только для новых элементов, таких как компоненты тем или плагины?

Я бы с удовольствием увидел живой пример этого в действии.

Мы начали внедрять Tailwind во всей организации — от веб-сайтов до приложений — поэтому первоочередная задача — использовать Tailwind для применения цветов и шрифтов бренда на основе единого определения. Затем мы будем использовать его для создания пользовательских компонентов, таких как заголовки, навигация и hero-секции. Это работа, которую я начал ранее, и сейчас я снова к ней вернулся.

Эта тема уже работает на нашем сайте, пример поста доступен по ссылке: Neo4j Discourse 2021 Theme - General - Neo4j Online Community

Если это интересно, я буду публиковать обновления по мере того, как наши планы станут более амбициозными.

Привет, @abk,

Мы определённо заинтересованы. Хотелось бы узнать, как у вас продвигаются дела :slight_smile:

Я ищу информацию, так как мы хотели бы изменить тему по умолчанию в Discourse на Tailwind CSS. Я не являюсь опытным разработчиком, поэтому пытаюсь понять, что потребуется для реализации этой задачи, включая интеграцию Tailwind в экземпляр Discourse и его настройку в соответствии с нашими потребностями. У нас есть собственный разработчик, который может настраивать Tailwind CSS по мере необходимости, но он не знаком с его интеграцией в Discourse. Кроме того, нам не удалось найти весь HTML, используемый в теме по умолчанию Discourse, хотя мы предполагаем, что именно с него начнется наша кастомизация. Буду очень признателен за любые советы или рекомендации по тому, как действовать в этой ситуации. Спасибо за вашу помощь и поддержку.