feat(Watermark): add --van-watermark-z-index css var (#11734)

This commit is contained in:
neverland 2023-04-05 21:29:38 +08:00 committed by GitHub
parent c43a6406ea
commit 9008df9e90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 66 additions and 33 deletions

View File

@ -95,13 +95,13 @@ Use the `default slot` to pass HTML directly. Inline styles are supported, and s
| --- | --- | --- | --- | | --- | --- | --- | --- |
| width | Watermark width | _number_ | `100` | | width | Watermark width | _number_ | `100` |
| height | Watermark height | _number_ | `100` | | height | Watermark height | _number_ | `100` |
| zIndex | Watermark's z-index | _number_ | `100` | | z-index | Watermark's z-index | _number \| string_ | `100` |
| content | Text watermark content | _string_ | - | | content | Text watermark content | _string_ | - |
| image | Image watermark content. If `content` and `image` are passed at the same time, use the `image` watermark first | _string_ | - | | image | Image watermark content. If `content` and `image` are passed at the same time, use the `image` watermark first | _string_ | - |
| fullPage | Whether to display the watermark in full screen | _boolean_ | `true` | | full-page | Whether to display the watermark in full screen | _boolean_ | `true` |
| gapX | Horizontal spacing between watermarks | _number_ | `0` | | gapX | Horizontal spacing between watermarks | _number_ | `0` |
| gapY | Vertical spacing between watermarks | _number_ | `0` | | gapY | Vertical spacing between watermarks | _number_ | `0` |
| fontColor | Color of text watermark | _string_ | `#dcdee0` | | font-color | Color of text watermark | _string_ | `#dcdee0` |
| opacity | opacity of watermark | _number_ | `1` | | opacity | opacity of watermark | _number_ | `1` |
### Slots ### Slots
@ -117,3 +117,13 @@ The component exports the following type definitions:
```ts ```ts
import type { WaterProps } from 'vant'; import type { WaterProps } from 'vant';
``` ```
## Theming
### CSS Variables
The component provides the following CSS variables, which can be used to customize styles. Please refer to [ConfigProvider component](#/en-US/config-provider).
| Name | Default Value | Description |
| ----------------------- | ------------- | ----------------------- |
| --van-watermark-z-index | _100_ | z-index of root element |

View File

@ -95,13 +95,13 @@ app.use(Watermark);
| --- | --- | --- | --- | | --- | --- | --- | --- |
| width | 水印宽度 | _number_ | `100` | | width | 水印宽度 | _number_ | `100` |
| height | 水印高度 | _number_ | `100` | | height | 水印高度 | _number_ | `100` |
| zIndex | 水印的 z-index | _number_ | `100` | | z-index | 水印的 z-index | _number \| string_ | `100` |
| content | 文字水印的内容 | _string_ | - | | content | 文字水印的内容 | _string_ | - |
| image | 图片水印的内容,如果与 content 同时传入,优先使用图片水印 | _string_ | - | | image | 图片水印的内容,如果与 content 同时传入,优先使用图片水印 | _string_ | - |
| fullPage | 水印是否全屏显示 | _boolean_ | `false` | | full-page | 水印是否全屏显示 | _boolean_ | `false` |
| gapX | 水印水平间隔 | _number_ | `0` | | gapX | 水印之间的水平间隔 | _number_ | `0` |
| gapY | 水印垂直间隔 | _number_ | `0` | | gapY | 水印之间的垂直间隔 | _number_ | `0` |
| fontColor | 文字水印的颜色 | _string_ | `#dcdee0` | | font-color | 文字水印的颜色 | _string_ | `#dcdee0` |
| opacity | 水印的透明度 | _number_ | `1` | | opacity | 水印的透明度 | _number_ | `1` |
### Slots ### Slots
@ -117,3 +117,13 @@ app.use(Watermark);
```ts ```ts
import type { WaterProps } from 'vant'; import type { WaterProps } from 'vant';
``` ```
## 主题定制
### 样式变量
组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider 组件](#/zh-CN/config-provider)。
| 名称 | 默认值 | 描述 |
| ----------------------- | ------ | --------------------- |
| --van-watermark-z-index | _100_ | 根节点的 z-index 层级 |

View File

@ -8,11 +8,14 @@ import {
type ExtractPropTypes, type ExtractPropTypes,
} from 'vue'; } from 'vue';
import { import {
extend,
truthProp,
numericProp,
createNamespace, createNamespace,
getZIndexStyle,
makeNumberProp, makeNumberProp,
makeNumericProp, makeNumericProp,
makeStringProp, makeStringProp,
truthProp,
} from '../utils'; } from '../utils';
const [name, bem] = createNamespace('watermark'); const [name, bem] = createNamespace('watermark');
@ -21,7 +24,7 @@ export const watermarkProps = {
width: makeNumberProp(100), width: makeNumberProp(100),
height: makeNumberProp(100), height: makeNumberProp(100),
rotate: makeNumericProp(-22), rotate: makeNumericProp(-22),
zIndex: makeNumberProp(100), zIndex: numericProp,
content: String, content: String,
image: String, image: String,
fullPage: truthProp, fullPage: truthProp,
@ -166,19 +169,19 @@ export default defineComponent({
} }
}); });
return () => ( return () => {
<div const style = extend(
class={bem()} { backgroundImage: `url(${watermarkUrl.value})` },
style={{ getZIndexStyle(props.zIndex)
position: props.fullPage ? 'fixed' : 'absolute', );
backgroundImage: `url(${watermarkUrl.value})`,
zIndex: props.zIndex, return (
}} <div class={bem({ full: props.fullPage })} style={style}>
>
<div style={{ display: 'none' }} ref={svgElRef}> <div style={{ display: 'none' }} ref={svgElRef}>
{renderWatermark()} {renderWatermark()}
</div> </div>
</div> </div>
); );
};
}, },
}); });

View File

@ -1,8 +1,18 @@
:root {
--van-watermark-z-index: 100;
}
.van-watermark { .van-watermark {
background-repeat: repeat; position: absolute;
height: 100%; height: 100%;
width: 100%; width: 100%;
left: 0; left: 0;
top: 0; top: 0;
z-index: var(--van-watermark-z-index);
background-repeat: repeat;
pointer-events: none; pointer-events: none;
&--full {
position: fixed;
}
} }

View File

@ -1,8 +1,8 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP // Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`watermark should render content 1`] = ` exports[`watermark should render content 1`] = `
<div class="van-watermark" <div class="van-watermark van-watermark--full"
style="position: fixed; background-image: url(); z-index: 100;" style="background-image: url();"
> >
<div style="display: none;"> <div style="display: none;">
<svg viewbox="0 0 100 100" <svg viewbox="0 0 100 100"
@ -30,8 +30,8 @@ exports[`watermark should render content 1`] = `
`; `;
exports[`watermark should render html 1`] = ` exports[`watermark should render html 1`] = `
<div class="van-watermark" <div class="van-watermark van-watermark--full"
style="position: fixed; background-image: url(); z-index: 100;" style="background-image: url();"
> >
<div style="display: none;"> <div style="display: none;">
<svg viewbox="0 0 100 100" <svg viewbox="0 0 100 100"
@ -57,8 +57,8 @@ exports[`watermark should render html 1`] = `
`; `;
exports[`watermark should render image 1`] = ` exports[`watermark should render image 1`] = `
<div class="van-watermark" <div class="van-watermark van-watermark--full"
style="position: fixed; background-image: url(); z-index: 100;" style="background-image: url();"
> >
<div style="display: none;"> <div style="display: none;">
<svg viewbox="0 0 100 100" <svg viewbox="0 0 100 100"
@ -82,7 +82,7 @@ exports[`watermark should render image 1`] = `
exports[`watermark test false value fullPage 1`] = ` exports[`watermark test false value fullPage 1`] = `
<div class="van-watermark" <div class="van-watermark"
style="position: absolute; background-image: url(); z-index: 100;" style="background-image: url();"
> >
<div style="display: none;"> <div style="display: none;">
<svg viewbox="0 0 100 100" <svg viewbox="0 0 100 100"
@ -108,8 +108,8 @@ exports[`watermark test false value fullPage 1`] = `
`; `;
exports[`watermark test width, height, rotate, zIndex 1`] = ` exports[`watermark test width, height, rotate, zIndex 1`] = `
<div class="van-watermark" <div class="van-watermark van-watermark--full"
style="position: fixed; background-image: url(); z-index: 200;" style="background-image: url(); z-index: 200;"
> >
<div style="display: none;"> <div style="display: none;">
<svg viewbox="0 0 20 20" <svg viewbox="0 0 20 20"