Dopo aver ripreso a giocare con Svelte, TypeScript e Construct 3 è arrivato il momento di aggiungere al mio progetto di test anche Tailwind CSS. È un argomento che ho già affrontato nel 2021 (Tailwind CSS & Svelte) ma sono passati, per l’appunto, un po’ di anni. C’è un tutorial di LogRocket (How to use Tailwind CSS with Svelte) aggiornato a Luglio 2023 ma non presenta, a mio avviso, la soluzione migliore. Di conseguenza, ecco qui i miei appunti su come aggiungere Tailwind CSS a un progetto Svelte.

Riprendo il progetto del post di qualche giorno fa (questo) e mi porto con il terminale nella cartella con il codice di Svelte. Inserisco a terminale il seguente comando:

npm install -D tailwindcss@latest postcss@latest

In questo modo aggiungo a Svelte i pacchetti di Tailwind e PostCSS. Poi aggiungo Autoprefixer:

npm install -D autoprefixer@latest

E finalmente posso inizializzare Tailwind con il comando:

npx tailwindcss init -p
npx-tailwind-init

Questo comando crea due file:

  • tailwind.config.js
  • postcss.config.js

Comincio con il modificare tailwind.config.js:

/** @type {import('tailwindcss').Config} */
export default {
  content: [],
  theme: {
    extend: {},
  },
  plugins: [],
  content: ["./index.html", "./src/**/*.{svelte,js,ts}"], //for unused css
};

Aggiungo alcuni elementi a content per permettere a Tailwind di rimuovere gli stili CSS non usati dal progetto.

Modifico anche il file postcss.config.js:

import tailwind from "tailwindcss";
import tailwindConfig from "./tailwind.config.js";
import autoprefixer from "autoprefixer";

export default {
  plugins: [tailwind(tailwindConfig), autoprefixer],
};

Ho due modi per permettere a Svelte di usare gli stili di Tailwind. Il primo è di creare un componente TailwindCSS.svelte:

<style>
  @tailwind base;
  @tailwind components;
  @tailwind utilities;
</style>

e di importarlo in App.svelte:

<script>
  import TailwindCss from "./lib/TailwindCSS.svelte";
</script>

<TailwindCss />

Ma per quanto efficace non è il mio metodo preferito. Preferisco creare un file separato e importarlo direttamente come foglio di stile. Per farlo creo il file tailwind.pcss (per comodità lo salvo nella cartella css).

@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";

Poi importo il file in App.svelte:

<script lang="ts">
  import "./css/tailwind.pcss";
</script>
svelte-app-and-tailwind

Non è necessario importare nulla nei vari componenti. Posso aggiungere gli stili direttamente nel componente:

counter

Per vedere l’anteprima della pagina uso il comando

npm run dev

c3 gif

Invece per ottenere i file compilati uso il comando:

npm run build

Posso anche eliminare il file app.css e togliere il riferimento da main.ts:

import App from "./App.svelte";

const app = new App({
  target: document.getElementById("app"),
});

export default app;