Attributify preset
Detta aktiverar attributify-läge för andra presets.
Installation
bash
pnpm add -D @unocss/preset-attributifybash
yarn add -D @unocss/preset-attributifybash
npm install -D @unocss/preset-attributifybash
bun add -D @unocss/preset-attributifyts
import presetAttributify from '@unocss/preset-attributify'
export default defineConfig({
presets: [
presetAttributify({ /* preset-alternativ */ }),
// ...
],
})TIP
Denna preset ingår i unocss-paketet, du kan också importera den därifrån:
ts
import { presetAttributify } from 'unocss'Attributify-läge
Tänk dig att du har denna knapp med Tailwind CSS:s verktyg. När listan blir längre blir den verkligen svår att läsa och underhålla.
html
<button
class="bg-blue-400 hover:bg-blue-500 text-sm text-white font-mono font-light py-2 px-4 rounded border-2 border-blue-200 dark:bg-blue-500 dark:hover:bg-blue-600"
>
Button
</button>Med attributify-läge kan du separera verktyg i attribut:
html
<button
bg="blue-400 hover:blue-500 dark:blue-500 dark:hover:blue-600"
text="sm white"
font="mono light"
p="y-2 x-4"
border="2 rounded blue-200"
>
Button
</button>Till exempel kan text-sm text-white grupperas till text="sm white" utan att duplicera samma prefix.
Prefix självrefererande
För verktyg som flex, grid, border, som har samma verktyg som prefix, tillhandahålls ett speciellt ~-värde.
Till exempel:
html
<button class="border border-red">Button</button>Kan skrivas som:
html
<button border="~ red">Button</button>Värdelösa attribut
Utöver Windi CSS:s attributify-läge stöder denna preset också värdelösa attribut.
Till exempel,
html
<div class="m-2 rounded text-teal-400" />kan nu bli
html
<div m-2 rounded text-teal-400 />INFO
Obs: Om du använder JSX kan <div foo> transformeras till <div foo={true}> vilket gör att den genererade CSS:en från UnoCSS inte kan matcha attributen. För att lösa detta kan du prova transformer-attributify-jsx tillsammans med denna preset.
Egenskapskonflikter
Om namnet på attributläget någonsin kolliderar med elementens eller komponenternas egenskaper kan du lägga till un--prefix för att vara specifik för UnoCSS:s attributify-läge.
Till exempel:
html
<a text="red">Detta kolliderar med länkars `text`-egenskap</a>
<!-- till -->
<a un-text="red">Textfärg till röd</a>Prefix är valfritt som standard, om du vill tvinga användningen av prefix, ställ in
ts
presetAttributify({
prefix: 'un-',
prefixedOnly: true, // <--
})Du kan också inaktivera skanning för vissa attribut genom:
ts
presetAttributify({
ignoreAttributes: [
'text'
// ...
]
})TypeScript-stöd (JSX/TSX)
Skapa shims.d.ts med följande innehåll:
Som standard inkluderar typen vanliga attribut från
@unocss/preset-wind3. Om du behöver anpassade attribut, se till typkällan för att implementera din egen typ.
Vue
Sedan Volar 0.36 är det nu strikt med okända attribut. För att välja bort kan du lägga till följande fil i ditt projekt:
ts
declare module '@vue/runtime-dom' {
interface HTMLAttributes {
[key: string]: any
}
}
declare module '@vue/runtime-core' {
interface AllowedComponentProps {
[key: string]: any
}
}
export {}React
ts
import type { AttributifyAttributes } from '@unocss/preset-attributify'
declare module 'react' {
interface HTMLAttributes<T> extends AttributifyAttributes {}
}Vue 3
ts
import type { AttributifyAttributes } from '@unocss/preset-attributify'
declare module '@vue/runtime-dom' {
interface HTMLAttributes extends AttributifyAttributes {}
}SolidJS
ts
import type { AttributifyAttributes } from '@unocss/preset-attributify'
declare module 'solid-js' {
namespace JSX {
interface HTMLAttributes<T> extends AttributifyAttributes {}
}
}Svelte & SvelteKit
ts
declare namespace svelteHTML {
import type { AttributifyAttributes } from '@unocss/preset-attributify'
type HTMLAttributes = AttributifyAttributes
}Astro
ts
import type { AttributifyAttributes } from '@unocss/preset-attributify'
declare global {
namespace astroHTML.JSX {
interface HTMLAttributes extends AttributifyAttributes { }
}
}Preact
ts
import type { AttributifyAttributes } from '@unocss/preset-attributify'
declare module 'preact' {
namespace JSX {
interface HTMLAttributes extends AttributifyAttributes {}
}
}Attributify med prefix
ts
import type { AttributifyNames } from '@unocss/preset-attributify'
type Prefix = 'uno:' // ändra det till ditt prefix
interface HTMLAttributes extends Partial<Record<AttributifyNames<Prefix>, string>> {}Alternativ
strict
- typ:
boolean - standard:
false
Generera endast CSS för attributify eller class.
prefix
- typ:
string - standard:
'un-'
Prefix för attributify-läge.
prefixedOnly
- typ:
boolean - standard:
false
Matcha endast prefixade attribut.
nonValuedAttribute
- typ:
boolean - standard:
true
Stöd matchning av icke-värderade attribut.
ignoreAttributes
- typ:
string[]
En lista över attribut som ska ignoreras vid extrahering.
trueToNonValued
- typ:
boolean - standard:
false
Icke-värderade attribut kommer också att matchas om det faktiska värdet som representeras i DOM är true. Detta alternativ finns för att stödja ramverk som kodar icke-värderade attribut som true. Att aktivera detta alternativ kommer att bryta regler som slutar med true.
Erkännanden
Ursprunglig idé av @Tahul och @antfu. Tidigare implementation i Windi CSS av @voorjaar.