feat(镂空效果): 感谢Cursor,550C太快了
This commit is contained in:
parent
278ea57617
commit
7785a99f99
BIN
test/background-test.jpg
Normal file
BIN
test/background-test.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 MiB |
224
test/镂空遮罩.html
Normal file
224
test/镂空遮罩.html
Normal file
@ -0,0 +1,224 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Video Background with Transparent Text Mask</title>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Arial, sans-serif;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.container {
|
||||
position: relative;
|
||||
background-image: url('./background-test.jpg');
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.overlay {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.overlay svg {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/* SVG文字样式 */
|
||||
.overlay text {
|
||||
font-family: "华文行楷", sans-serif;
|
||||
font-size: 15rem;
|
||||
font-weight: bold;
|
||||
/* font-style: italic; */
|
||||
letter-spacing: 0.1em;
|
||||
text-transform: uppercase;
|
||||
fill: black;
|
||||
}
|
||||
|
||||
/* 遮罩背景样式 */
|
||||
.overlay .mask-bg {
|
||||
fill: white;
|
||||
}
|
||||
|
||||
/* 遮罩层样式 */
|
||||
.overlay .overlay-bg {
|
||||
fill: rgba(0, 0, 0, 0.6);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="overlay">
|
||||
<svg>
|
||||
<defs>
|
||||
<mask id="textMask">
|
||||
<rect class="mask-bg" width="100%" height="100%"/>
|
||||
<text
|
||||
x="50%"
|
||||
y="50%"
|
||||
text-anchor="middle"
|
||||
dominant-baseline="middle"
|
||||
>星撰玉衡</text>
|
||||
</mask>
|
||||
</defs>
|
||||
<rect class="overlay-bg" width="100%" height="100%" mask="url(#textMask)"/>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script>
|
||||
const a = `
|
||||
让我详细解释一下SVG mask的工作原理:
|
||||
|
||||
1. **SVG Mask的基本原理**:
|
||||
- SVG的mask(遮罩)是一个灰度蒙版
|
||||
- 在mask中:
|
||||
- 白色(1.0)表示完全显示
|
||||
- 黑色(0.0)表示完全隐藏
|
||||
- 灰色(0-1之间)表示部分显示
|
||||
|
||||
2. **当前代码的具体工作流程**:
|
||||
```html
|
||||
<mask id="textMask">
|
||||
<!-- 白色背景,表示整个区域都会显示遮罩层 -->
|
||||
<rect width="100%" height="100%" fill="white"/>
|
||||
|
||||
<!-- 黑色文字,表示文字区域会隐藏遮罩层 -->
|
||||
<text x="50%" y="50%" text-anchor="middle" dominant-baseline="middle" fill="black" font-size="15rem" font-weight="bold">HELLO</text>
|
||||
</mask>
|
||||
|
||||
<!--应用遮罩的矩形 -->
|
||||
<rect width="100%" height="100%" fill="rgba(0, 0, 0, 0.3)" mask="url(#textMask)" />
|
||||
```
|
||||
|
||||
3. **渲染过程**:
|
||||
- 首先,mask中的白色背景(`fill = "white"`)表示整个区域都会显示遮罩层
|
||||
- 然后,mask中的黑色文字(`fill = "black"`)会"挖出"文字形状的区域,使这部分完全透明
|
||||
- 最后,这个mask被应用到一个半透明黑色背景上(`fill = "rgba(0, 0, 0, 0.3)"`)
|
||||
|
||||
4. **最终效果**:
|
||||
- 文字区域(mask中的黑色部分):
|
||||
- 遮罩层完全隐藏
|
||||
- 直接显示背景图片
|
||||
- 其他区域(mask中的白色部分):
|
||||
- 显示半透明黑色遮罩层
|
||||
- 背景图片被遮罩层覆盖
|
||||
|
||||
5. **为什么这样设计**:
|
||||
- 使用mask而不是直接设置透明度,可以更精确地控制显示区域
|
||||
- 文字区域完全透明,保证了背景图片的清晰显示
|
||||
- 周围区域保持半透明黑色,提供了良好的对比度
|
||||
|
||||
这种实现方式的优点是:
|
||||
- 精确控制:可以精确控制哪些区域显示遮罩,哪些区域透明
|
||||
- 性能好:不需要重复加载背景图片
|
||||
- 灵活性:可以轻松调整遮罩的透明度
|
||||
- 可维护性:SVG结构清晰,易于修改和维护
|
||||
|
||||
需要我解释得更详细或者有其他问题吗?
|
||||
`
|
||||
|
||||
|
||||
const b = `
|
||||
好的,让我详细解释一下SVG中各个标签的含义:
|
||||
|
||||
1. **`<svg>` 标签**:
|
||||
- SVG的根元素
|
||||
- 定义了一个SVG文档片段
|
||||
- 可以设置宽高、视口等属性
|
||||
|
||||
2. **`<defs>` 标签**:
|
||||
- 用于定义可重用的SVG元素
|
||||
- 这里用来定义mask,使其可以在其他地方引用
|
||||
- 相当于一个"定义区域",里面的元素不会直接显示
|
||||
|
||||
3. **`<mask>` 标签**:
|
||||
- 定义一个遮罩效果
|
||||
- `id="textMask"` 给遮罩一个唯一标识符,方便引用
|
||||
- 遮罩中的元素决定了哪些区域显示/隐藏
|
||||
|
||||
4. **`<rect>` 标签**:
|
||||
- 用于绘制矩形
|
||||
- 属性说明:
|
||||
- `width="100%"`:宽度占满容器
|
||||
- `height="100%"`:高度占满容器
|
||||
- `fill="white"`:填充颜色为白色
|
||||
|
||||
5. **`<text>` 标签**:
|
||||
- 用于绘制文本
|
||||
- 属性说明:
|
||||
- `x="50%"`:文本水平居中
|
||||
- `y="50%"`:文本垂直居中
|
||||
- `text-anchor="middle"`:文本水平对齐方式为居中
|
||||
- `dominant-baseline="middle"`:文本垂直对齐方式为居中
|
||||
- `font-size="15rem"`:字体大小
|
||||
- `font-weight="bold"`:字体粗细
|
||||
- `fill="black"`:文本颜色
|
||||
|
||||
6. **应用遮罩的 `<rect>`**:
|
||||
- 这是实际显示的矩形
|
||||
- `fill="rgba(0, 0, 0, 0.3)"`:半透明黑色
|
||||
- `mask="url(#textMask)"`:引用之前定义的遮罩
|
||||
|
||||
完整的SVG结构:
|
||||
```html
|
||||
<svg>
|
||||
<!-- 定义区域 -->
|
||||
<defs>
|
||||
<!-- 定义遮罩 -->
|
||||
<mask id="textMask">
|
||||
<!-- 遮罩背景 -->
|
||||
<rect width="100%" height="100%" fill="white"/>
|
||||
<!-- 遮罩文字 -->
|
||||
<text x="50%" y="50%" text-anchor="middle" dominant-baseline="middle" fill="black" font-size="15rem" font-weight="bold">HELLO</text>
|
||||
</mask>
|
||||
</defs>
|
||||
<!-- 实际显示的矩形(应用遮罩) -->
|
||||
<rect width="100%" height="100%" fill="rgba(0, 0, 0, 0.3)" mask="url(#textMask)"/>
|
||||
</svg>
|
||||
```
|
||||
|
||||
SVG的一些重要特性:
|
||||
1. **坐标系统**:
|
||||
- 左上角为(0,0)点
|
||||
- x轴向右增加
|
||||
- y轴向下增加
|
||||
|
||||
2. **单位**:
|
||||
- 可以使用像素(px)
|
||||
- 可以使用百分比(%)
|
||||
- 可以使用相对单位(rem, em)
|
||||
|
||||
3. **定位方式**:
|
||||
- 可以使用绝对定位(具体数值)
|
||||
- 可以使用相对定位(百分比)
|
||||
- 可以使用居中定位(50% + text-anchor)
|
||||
|
||||
4. **颜色表示**:
|
||||
- 可以使用颜色名称(如white, black)
|
||||
- 可以使用RGB值(如rgb(255,255,255))
|
||||
- 可以使用RGBA值(如rgba(0,0,0,0.3))
|
||||
- 可以使用十六进制(如#FFFFFF)
|
||||
|
||||
需要我详细解释某个具体的标签或属性吗?
|
||||
`
|
||||
</script>
|
||||
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user