將 SVG 特效應用於 HTML 內容
現代瀏覽器支援在 SVG 中使用 CSS 樣式來為 HTML 內容應用圖形效果。
您可以在同一文件或外部樣式表中指定樣式中的 SVG。您可以使用 3 個屬性:mask、clip-path 和 filter。
注意:對外部檔案中 SVG 的引用必須與引用文件具有相同的 源。
使用嵌入式 SVG
要使用 CSS 樣式應用 SVG 效果,您首先需要建立引用要應用的 SVG 的 CSS 樣式。
<style>
p {
mask: url(#my-mask);
}
</style>
在上面的示例中,所有段落都由具有 ID my-mask 的 SVG <mask> 蒙版。
示例:蒙版
例如,您可以使用 SVG 和類似於以下內容的 CSS 程式碼為 HTML 內容建立漸變蒙版,在您的 HTML 文件中
<svg height="0">
<mask id="mask-1">
<linearGradient id="gradient-1" y2="1">
<stop stop-color="white" offset="0" />
<stop stop-opacity="0" offset="1" />
</linearGradient>
<circle cx="0.25" cy="0.25" r="0.25" id="circle" fill="white" />
<rect x="0.5" y="0.2" width="300" height="100" fill="url(#gradient-1)" />
</mask>
</svg>
.target {
mask: url(#mask-1);
}
p {
width: 300px;
border: 1px solid #000;
display: inline-block;
}
請注意,在 CSS 中,蒙版是使用指向 ID #mask-1 的 URL 指定的,該 ID 是在其下方指定的 SVG 蒙版的 ID。其他所有內容都指定有關漸變蒙版本身的詳細資訊。
透過將上面定義的 target 類分配給元素(如下所示)來完成將 SVG 效果應用於 HTML。
<p class="target" style="background:lime;">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing
<em class="target"
>elit, sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua.</em
>
Ut enim ad minim veniam.
</p>
上面的示例將呈現應用了蒙版的 HTML 內容。
示例:剪裁
此示例演示如何使用 SVG 剪裁 HTML 內容。請注意,即使連結的可點選區域也被剪裁了。
<p class="target" style="background:lime;">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing
<em class="target"
>elit, sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua.</em
>
Ut enim ad minim veniam.
</p>
<button onclick="toggleRadius()">Toggle radius</button>
<svg height="0">
<clipPath id="clipping-path-1" clipPathUnits="objectBoundingBox">
<circle cx="0.25" cy="0.25" r="0.25" id="circle" />
<rect x="0.5" y="0.2" width="0.5" height="0.8" />
</clipPath>
</svg>
.target {
clip-path: url(#clipping-path-1);
}
p {
width: 300px;
border: 1px solid #000;
display: inline-block;
}
這建立了一個由圓形和矩形組成的剪裁區域,為其分配了 ID #clipping-path-1,然後在 CSS 中引用它。剪裁路徑可以分配給具有 target 類的任何元素。
您可以即時更改 SVG 並立即看到它們對 HTML 呈現的影響。例如,您可以調整上面建立的剪裁路徑中圓形的尺寸
function toggleRadius() {
const circle = document.getElementById("circle");
circle.r.baseVal.value = 0.4 - circle.r.baseVal.value;
}
示例:過濾
這演示瞭如何使用 SVG 對 HTML 內容應用濾鏡。它建立了幾個濾鏡,這些濾鏡使用 CSS 應用於三個元素,包括正常狀態和滑鼠 懸停 狀態。
<p class="target" style="background: lime;">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.
</p>
<pre class="target">lorem</pre>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing
<em class="target"
>elit, sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua.</em
>
Ut enim ad minim veniam.
</p>
任何 SVG 濾鏡都可以這樣應用。例如,要應用模糊效果,您可以使用
<svg height="0">
<filter id="f1">
<feGaussianBlur stdDeviation="3" />
</filter>
</svg>
您還可以應用顏色矩陣
<svg height="0">
<filter id="f2">
<feColorMatrix
values="0.3333 0.3333 0.3333 0 0
0.3333 0.3333 0.3333 0 0
0.3333 0.3333 0.3333 0 0
0 0 0 1 0" />
</filter>
</svg>
以及更多濾鏡
<svg height="0">
<filter id="f3">
<feConvolveMatrix
filterRes="100 100"
style="color-interpolation-filters:sRGB"
order="3"
kernelMatrix="0 -1 0 -1 4 -1 0 -1 0"
preserveAlpha="true" />
</filter>
<filter id="f4">
<feSpecularLighting
surfaceScale="5"
specularConstant="1"
specularExponent="10"
lighting-color="white">
<fePointLight x="-5000" y="-10000" z="20000" />
</feSpecularLighting>
</filter>
<filter id="f5">
<feColorMatrix
values="1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 1 0 0 0"
style="color-interpolation-filters:sRGB" />
</filter>
</svg>
五個濾鏡使用以下 CSS 應用
p.target {
filter: url(#f3);
}
p.target:hover {
filter: url(#f5);
}
em.target {
filter: url(#f1);
}
em.target:hover {
filter: url(#f4);
}
pre.target {
filter: url(#f2);
}
pre.target:hover {
filter: url(#f3);
}
示例:模糊文字
為了模糊文字,有一個名為 blur() 的 CSS 濾鏡函式。您可以使用 SVG 濾鏡實現相同的效果。
<p class="blur">Time to clean my glasses</p>
<svg height="0">
<defs>
<filter id="wherearemyglasses" x="0" y="0">
<feGaussianBlur in="SourceGraphic" stdDeviation="1" />
</filter>
</defs>
</svg>
您可以在同一個類中應用 SVG 和 CSS 濾鏡
.blur {
filter: url(#wherearemyglasses);
}
模糊計算量很大,因此請謹慎使用,尤其是在滾動或動畫的元素中。
示例:文字效果
與純 HTML 文字相比,SVG 效果也可用於為新增文字提供更動態和靈活的方法。
透過使用 SVG 元素結合 HTML 建立文字,您可以建立各種不同的文字效果。您可以旋轉文字
<svg height="60" width="200">
<text x="0" y="15" fill="blue" transform="rotate(30 20,50)">
Example text
</text>
</svg>
使用外部引用
用於剪裁、蒙版和過濾的 SVG 可以從外部源載入,只要該源與應用它的 HTML 文件具有相同的源。
例如,如果您的 CSS 位於名為 default.css 的檔案中,它可能如下所示
.target {
clip-path: url(resources.svg#c1);
}
然後,SVG 從名為 resources.svg 的檔案匯入,使用 ID 為 c1 的剪裁路徑。
另請參閱
- SVG
clip-path屬性mask屬性- 剪裁和蒙版中的形狀——以及如何使用它們