Skip to content

Commit 43275ed

Browse files
authored
Merge pull request #12 from v-vibe/feat/css-class
feat(helper): [cssClass] add function to generate common class
2 parents 114ef17 + d3cc3dd commit 43275ed

File tree

8 files changed

+144
-2
lines changed

8 files changed

+144
-2
lines changed

core/helper/css.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { type ExpressionType, insertExpressions } from '@/utils'
22

3-
export function css<T>(strings: TemplateStringsArray, ...interpolations: ExpressionType<T>[]): ExpressionType<T>[] {
3+
export function css<T = any>(
4+
strings: TemplateStringsArray,
5+
...interpolations: (ExpressionType<T> | ExpressionType<T>[])[]
6+
): ExpressionType<T>[] {
47
return insertExpressions<T>(strings, interpolations)
58
}

core/helper/cssClass.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { ExpressionType, generateClassName, insertExpressions } from '@/utils'
2+
import { injectStyle } from '@/utils/injectStyle'
3+
4+
export function cssClass(cssStrings: TemplateStringsArray, ...interpolations: (ExpressionType<any> | ExpressionType<any>[])[]): string {
5+
const className = generateClassName()
6+
injectStyle(className, insertExpressions(cssStrings, interpolations), {})
7+
8+
return className
9+
}

core/helper/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export * from './is'
33
export * from './create-global-style'
44
export * from './keyframes'
55
export * from './css'
6+
export * from './cssClass'

docs/guide/advances/css-mixin.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,30 @@ Such as:
2929
</template>
3030
```
3131
:::
32+
33+
# Common CSS Class
34+
35+
You can also use `cssClass` to generate a common css class. The function will inject your css and return a class name
36+
37+
:::demo
38+
```vue
39+
<script setup lang="ts">
40+
import { css, cssClass } from '@vvibe/vue-styled-components'
41+
42+
const commonCSS = css`
43+
padding: 10px 20px;
44+
border-radius: 8px;
45+
`
46+
47+
const commonClass = cssClass`
48+
${commonCSS}
49+
color: #fff;
50+
background-color: red;
51+
`
52+
</script>
53+
54+
<template>
55+
<div :class="commonClass">Test</div>
56+
</template>
57+
```
58+
:::

docs/guide/api/helper.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,36 @@ A function to generate CSS from a template literal with interpolations.
105105
</template>
106106
```
107107

108+
## `cssClass`
109+
110+
A function generating css and return a class name.
111+
112+
**Augments**
113+
114+
- CSS,`TemplateStringsArray``必需`
115+
116+
**Return**
117+
118+
- Class name,`string`
119+
120+
**Usage**
121+
122+
```vue
123+
<script setup lang="ts">
124+
import { cssClass } from '@vvibe/vue-styled-components'
125+
126+
const commonClass = cssClass`
127+
padding: 20px;
128+
color: #fff;
129+
background-color: red;
130+
`
131+
</script>
132+
133+
<template>
134+
<div :class="commonClass">Test</div>
135+
</template>
136+
```
137+
108138
## `withAttrs`
109139

110140
A function to add attributes to a `ComponentInstance` or `HTMLElements`.

docs/zh/guide/advances/css-mixin.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,30 @@ Such as:
2929
</template>
3030
```
3131
:::
32+
33+
# 公共 CSS 类
34+
35+
你还可以使用 `cssClass` 来生成一个可公用的样式类,该函数会创建你传入的 CSS 并返回一个类名。
36+
37+
:::demo
38+
```vue
39+
<script setup lang="ts">
40+
import { css, cssClass } from '@vvibe/vue-styled-components'
41+
42+
const commonCSS = css`
43+
padding: 10px 20px;
44+
border-radius: 8px;
45+
`
46+
47+
const commonClass = cssClass`
48+
${commonCSS}
49+
color: #fff;
50+
background-color: red;
51+
`
52+
</script>
53+
54+
<template>
55+
<div :class="commonClass">Test</div>
56+
</template>
57+
```
58+
:::

docs/zh/guide/api/helper.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,39 @@ outline: deep
105105
</template>
106106
```
107107

108+
109+
110+
## `cssClass`
111+
112+
一个使用模板字符串生成 CSS 并返回 class 类名的函数。
113+
114+
**参数**
115+
116+
- 模板字符串,`TemplateStringsArray``必需`
117+
118+
**返回值**
119+
120+
- class 名称,`string`
121+
122+
**用法**
123+
124+
```vue
125+
126+
<script setup lang="ts">
127+
import { cssClass } from '@vvibe/vue-styled-components'
128+
129+
const commonClass = cssClass`
130+
padding: 20px;
131+
color: #fff;
132+
background-color: red;
133+
`
134+
</script>
135+
136+
<template>
137+
<div :class="commonClass">Test</div>
138+
</template>
139+
```
140+
108141
## `withAttrs`
109142

110143
一个用于向 `ComponentInstance``HTMLElements` 添加 `attributes` 的函数。

example/App.vue

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script setup lang="ts">
2-
import { styled, ThemeProvider, keyframes, withAttrs, css } from '@vvide/vue-styled-components'
2+
import { styled, ThemeProvider, keyframes, withAttrs, css, cssClass } from '@vvide/vue-styled-components'
33
import Component from './Component.vue'
44
import { ref } from 'vue'
55
@@ -86,6 +86,17 @@ const StyledLink = styled.a`
8686
const StyledBlueLink = styled(StyledLink, { color: String })`
8787
color: ${(props: any) => props.color};
8888
`
89+
90+
const commonCSS = css`
91+
padding: 10px 20px;
92+
border-radius: 8px;
93+
`
94+
95+
const commonClass = cssClass`
96+
${commonCSS}
97+
color: #fff;
98+
background-color: red;
99+
`
89100
</script>
90101

91102
<template>
@@ -97,6 +108,7 @@ const StyledBlueLink = styled(StyledLink, { color: String })`
97108
<StyledComp7 color="blue">123</StyledComp7>
98109
<LinkButton as="a" href="#">Link Button</LinkButton>
99110
<StyledBlueLink :color="color" href="#" @click="update">Styled Link</StyledBlueLink>
111+
<div :class="commonClass">test common class</div>
100112
</ThemeProvider>
101113
</template>
102114

0 commit comments

Comments
 (0)