unplugin-attributify-to-class

English | 简体中文

[![Version](https://img.shields.io/npm/v/unplugin-attributify-to-class.svg?style=flat-square&logo=npm) ![Downloads](https://img.shields.io/npm/dm/unplugin-unocss-attributify-wechat.svg?style=flat-square&logo=npm)](https://www.npmjs.com/package/unplugin-attributify-to-class) 将原子化css [attributify mode](https://github.com/unocss/unocss/tree/main/packages/preset-attributify#attributify-mode) 收集并添加到 class 中, 以支持在小程序中使用 attributify mode 为了贴合功能语义,`unplugin-unocss-attributify-wechat` 改名为 `unplugin-attributify-to-class` --- ## 为什么使用 使用 `@unocss/preset-attributify` ```html ``` 生成后的css ```css [bg~="blue-400"] { --un-bg-opacity: 1; background-color: rgba(96,165,250,var(--un-bg-opacity)); } ``` 小程序不支持属性选择器 [bg~="blue-400"] ,[微信文档](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html#%E7%BB%84%E4%BB%B6%E6%A0%B7%E5%BC%8F) --- 使用该插件 ```html ``` 转换后 ```html ``` --- ## 安装 ```shell npm i -D unplugin-attributify-to-class ```
vite
```ts import { defineConfig } from 'vite' import { attributifyToClass, defaultAttributes, defaultIgnoreNonValuedAttributes } from 'unplugin-attributify-to-class/vite' export default defineConfig({ plugins: [ // https://github.com/MellowCo/unplugin-attributify-to-class attributifyToClass(), ], }) ```
webpack
```js const { defaultAttributes, defaultIgnoreNonValuedAttributes, attributifyToClass } = require('unplugin-attributify-to-class/webpack') module.exports = { configureWebpack: { plugins: [ // https://github.com/MellowCo/unplugin-attributify-to-class attributifyToClass(), ], }, } ```
## 如何使用 ### options ```ts export interface Options { /** * @default 'un-' */ prefix?: string /** * 仅匹配前缀属性 * @default false */ prefixedOnly?: boolean /** * 需要转换的属性列表 * @default ['bg', 'flex', 'grid', 'border', 'text', 'font', 'class', 'className', 'p', 'm', 'animate'] */ attributes?: string[] /** * 忽略的非值属性列表 * @default ['class'] */ ignoreNonValuedAttributes?: string[] /** * 支持匹配非值属性 * * For example * ```html *
* ``` * * @default true */ nonValuedAttribute?: boolean /** * 转换转义字符 [ # $ * @default true */ transformEscape?: boolean /** * 自定义转义字符转换规则 * @default https://github.com/MellowCo/unplugin-transform-class#options */ transformRules?: Record /** * 排除转换目标 * @default [/[\\/]node_modules[\\/]/, /[\\/]\.git[\\/]/] */ exclude?: FilterPattern /** * 需要转换的目标 * @default [/\.vue$/, /\.vue\?vue/] */ include?: FilterPattern /** * 为生成的class选择器添加前缀 * @default '' */ classPrefix?: string } ``` ### Attributify Mode 相关介绍见 [attributify-mode](https://github.com/unocss/unocss/tree/main/packages/preset-attributify#attributify-mode) ```html ``` 默认转换的属性列表为 ['bg', 'flex', 'grid', 'border', 'text', 'font', 'class', 'className', 'p', 'm', 'animate'] ```html ``` ```html ``` 使用 `attributes` , 添加新的属性 ```ts import { attributifyToClass, defaultAttributes } from 'unplugin-attributify-to-class/vite' // import { attributifyToClass, defaultAttributes } from 'unplugin-attributify-to-class/webpack' attributifyToClass({ attributes: [...defaultAttributes, 'my-attr'] }) ``` ```html ``` ### 前缀自参照 对于 `flex`、`grid`、`border` 等具有与前缀相同的实用程序,将提供一个特殊的 `~` 值 ```html ``` 可以写成 ```html ``` ### Valueless Attributify ```html ``` * 设置 `classPrefix`,生成的class选择器会加上前缀 ```ts const classPrefixExtract = extractorAttributify({ nonValuedAttribute: true, classPrefix: 'li-', }) ``` 转换后,会在生成的 `class` 中,添加前缀,bg-green => class="li-bg-green" ```html ``` --- ### utils 导出 ```ts import { extractorAttributify } from 'unplugin-attributify-to-class/utils' const options = { // ... } const extractor = extractorAttributify(options) const code = 'xxxxx' const newCode = extractor(code) ``` 相关链接 * [unocss-preset-weapp](https://github.com/MellowCo/unocss-preset-weapp) - UnoCSS 小程序预设