Open5

Tips: Tailwind CSS

bisquit_devbisquit_dev

クラス名の結合

  • classnames
  • clsx
  • tailwind-merge

最新バージョン3.3では、いずれのライブラリを使っていてもVSCodeで補完が効いた(外部要因の可能性はある)

tailwind-mergeは twMergetwJoin のAPIがあり、twJoinAPIドキュメントに書かれているようにclsxのサブセット(一部のAPIが削がれているがほぼ同等)

tailwindに依存したプロジェクトでは、固定でマージする(衝突が起きないことが保証できる)場合は twJoin を使って、外部からのクラス名を許容する(propsでclassnameを受け取る)場合は twMerge を使うのが良いと思われる

twJoinはclxsのサブセットのため、twJoin -> clxs/classnamesは置換で変更可能

bisquit_devbisquit_dev

2023/07/15 現在の設定

  • prettier 3.0+
  • prettier-plugin-tailwindcss 0.4.0+
  • eslint-plugin-tailwindcss 3.0+

.vscode/settings.json

  "tailwindCSS.experimental.classRegex": [
    "clsx`([^`]*)",
    ["clsx\\(([^)]*)\\)", "'([^']*)'"]
  ],

https://github.com/tailwindlabs/tailwindcss/discussions/7554#discussioncomment-6451513

prettier.config.cjs

/** @type {import("prettier").Options} */
module.exports = {
  plugins: ['prettier-plugin-tailwindcss'],
  tailwindFunctions: ['clsx'],
};

All of these works for autocomplete, lint, format

const foo = clsx`flex flex-col bg-primary-5`;
const bar = clsx('flex flex-col bg-primary-5');

<div className={clsx('flex flex-col bg-primary-5')}></div>