After a neither long nor short time for developing Next.js + TailwindCSS app, it is so annoyed at writing TailwindCSS classnames more and more big.
A React example:
export const Demo = () => (
<div className='flex flex-col items-start justify-start md:mt-24 md:flex-row md:items-center md:justify-center md:space-x-6'>
<div className='space-x-2 pb-8 pt-6 md:space-y-5'>
<h1 className='text-6xl font-extrabold leading-9 tracking-tight text-gray-900 dark:text-gray-100 md:border-r-2 md:px-6 md:text-8xl md:leading-14'>
404
</h1>
</div>
<div className='max-w-md'>
<p className='mb-4 text-xl font-bold leading-normal md:text-2xl'>
{`Sorry we couldn't find this page.`}
</p>
<p className='mb-8'>
{`But don't worry, you can find plenty of other things on our homepage.`}
</p>
</div>
</div>
)
Question: How to make the code looks more nicer?
Answer: After use the new born package tagged-classnames-free:
import { cls } from 'tagged-classnames-free'
export const Demo = () => (
<div
className={cls`
flex flex-col items-start justify-start
md:mt-24 md:flex-row md:items-center md:justify-center md:space-x-6
`}
>
<div className='space-x-2 pb-8 pt-6 md:space-y-5'>
<h1
className={cls`
text-6xl font-extrabold leading-9 tracking-tight text-gray-900
dark:text-gray-100
md:border-r-2 md:px-6 md:text-8xl md:leading-14
`}
>
404
</h1>
</div>
<div className='max-w-md'>
<p
className={cls`
mb-4 text-xl font-bold leading-normal
md:text-2xl
`}
>
{`Sorry we couldn't find this page.`}
</p>
<p className='mb-8'>
{`But don't worry, you can find plenty of other things on our homepage.`}
</p>
</div>
</div>
)
cls
tag based on clsx, and tw
tag integrated tailwind-merge already.
Question: How to auto indent/dedent strings in tagged template if I want to wrap/unwrap tagged classnames by functions or html tags?
Answer: ESLint is a awesome tool, eslint-plugin-unicorn has a template-indent rule for us to auto indent/dedent.
It is also compatiable with prettier-plugin-tailwindcss even if write classnames by multiple lines.
Question: What is the impact on runtime performance, especially for what could have been wrote by pure strings?
Answer: There is also a new born unplugin-polish-tagged-templates for this, It can transform tagged templates without expressions into pure strings at compile time.
Try overall features on Gitpod.
Top comments (0)