Skip to content

Attributify prednastavitev

To omogoča način attributify za druge prednastavitve.

Izvorna koda

Namestitev

bash
pnpm add -D @unocss/preset-attributify
bash
yarn add -D @unocss/preset-attributify
bash
npm install -D @unocss/preset-attributify
bash
bun add -D @unocss/preset-attributify
ts
import presetAttributify from '@unocss/preset-attributify'

export default defineConfig({
  presets: [
    presetAttributify({ /* možnosti prednastavitve */ }),
    // ...
  ],
})

TIP

Ta prednastavitev je vključena v paket unocss, lahko jo tudi uvozite od tam:

ts
import { presetAttributify } from 'unocss'

Način Attributify

Predstavljajte si, da imate ta gumb z uporabo pripomočkov Tailwind CSS. Ko seznam postane daljši, postane res težko berljiv in vzdrževan.

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>

Z načinom attributify lahko ločite pripomočke v atribute:

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>

Na primer, text-sm text-white bi lahko združili v text="sm white" brez podvajanja iste predpone.

Predpona samoreferenciranja

Za pripomočke, kot so flex, grid, border, ki imajo pripomočke enake kot predpona, je na voljo posebna vrednost ~.

Na primer:

html
<button class="border border-red">Button</button>

Lahko zapišete kot:

html
<button border="~ red">Button</button>

Brez vrednosti attributify

Poleg načina attributify Windi CSS, ta prednastavitev podpira tudi atribute brez vrednosti.

Na primer,

html
<div class="m-2 rounded text-teal-400" />

zdaj je lahko

html
<div m-2 rounded text-teal-400 />

INFO

Opomba: Če uporabljate JSX, je morda <div foo> transformirano v <div foo={true}>, kar lahko povzroči, da generirani CSS iz UnoCSS ne bo mogel ujemati atributov. Za rešitev tega lahko poskusite z transformer-attributify-jsx skupaj s to prednastavitvijo.

Konflikti lastnosti

Če se ime načina atributov kdaj spopade z lastnostmi elementov ali komponent, lahko dodate predpono un- za specifično UnoCSS način attributify.

Na primer:

html
<a text="red">To se spopade z lastnostjo `text` povezav</a>
<!-- na -->
<a un-text="red">Barva besedila rdeča</a>

Predpona je privzeto izbirna, če želite uveljaviti uporabo predpone, nastavite

ts
presetAttributify({
  prefix: 'un-',
  prefixedOnly: true, // <--
})

Prav tako lahko onemogočite iskanje za določene atribute z:

ts
presetAttributify({
  ignoreAttributes: [
    'text'
    // ...
  ]
})

Podpora TypeScript (JSX/TSX)

Ustvarite shims.d.ts z naslednjo vsebino:

Privzeto tip vključuje običajne atribute iz @unocss/preset-wind3. Če potrebujete atribute po meri, si oglejte vir tipov za implementacijo vašega lastnega tipa.

Vue

Od Volar 0.36, zdaj je strog do neznanih atributov. Za izklop lahko dodate naslednjo datoteko v vaš 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 s predpono

ts
import type { AttributifyNames } from '@unocss/preset-attributify'

type Prefix = 'uno:' // spremenite v vašo predpono

interface HTMLAttributes extends Partial<Record<AttributifyNames<Prefix>, string>> {}

Možnosti

strict

  • tip: boolean
  • privzeto: false

Generiraj CSS le za attributify ali class.

prefix

  • tip: string
  • privzeto: 'un-'

Predpona za način attributify.

prefixedOnly

  • tip: boolean
  • privzeto: false

Ujemaj le za atribute s predpono.

nonValuedAttribute

  • tip: boolean
  • privzeto: true

Podpora za ujemanje atributov brez vrednosti.

ignoreAttributes

  • tip: string[]

Seznam atributov, ki naj bodo izključeni iz ekstrakcije.

trueToNonValued

  • tip: boolean
  • privzeto: false

Atributi brez vrednosti se bodo ujemali tudi, če je dejanska vrednost, predstavljena v DOM, true. Ta možnost obstaja za podporo frameworkom, ki kodirajo atribute brez vrednosti kot true. Omogočanje te možnosti bo prekinilo pravila, ki se končajo s true.

Zahvale

Začetno idejo sta prispevala @Tahul in @antfu. Predhodna implementacija v Windi CSS od @voorjaar.

Released under the MIT License.