HTML5 内联 SVG

HTML5 内联 SVG

SVG 是可缩放矢量图形,可以通过 XML 语言来描述。SVG 文档可以使用 <svg> 元素定义一个 SVG 画布。SVG 文件可以在浏览器中展示,是一种常用的图形绘制方式。HTML5 中,内联 SVG 可以在 HTML 元素中嵌入 SVG 图形,以此替代传统的位图图像,实现更好的可扩展性和清晰度。

内联 SVG 的基本用法

在 HTML5 中,内联 SVG 可以通过 <svg> 标签在 HTML 网页中嵌入 SVG 图形。

<!DOCTYPE html>

<html>

<head>

<title>内联 SVG</title>

</head>

<body>

<svg width="100" height="100">

<circle cx="50" cy="50" r="40" stroke="black"

stroke-width="2" fill="white" />

</svg>

</body>

</html>

以上代码实现一个简单的 SVG 圆形。在 SVG 中,cx 和 cy 为圆心坐标,r 为半径,stroke 为边框颜色,fill 为填充颜色,以上属性都可以按需设置。

内联 SVG 与 HTML5

内联 SVG 可以在 HTML5 中实现许多优秀的特性,例如响应式设计、动画效果、交互性等。

响应式设计

在 HTML5 中,内联 SVG 可以通过 CSS 和 JavaScript 实现响应式设计。下面的例子展示了如何通过 JavaScript 监听窗口大小,使得 SVG 图形具有响应式的设计效果。

<!DOCTYPE html>

<html>

<head>

<title>响应式设计</title>

<style>

svg {

width: 100%;

height: auto;

}

</style>

<script>

window.onresize = function() {

var svg = document.getElementsByTagName('svg')[0];

svg.setAttribute('viewBox', '0 0 ' + window.innerWidth + ' ' + window.innerHeight);

}

</script>

</head>

<body>

<svg viewBox="0 0 800 600">

<rect x="50" y="50" width="700" height="500"

stroke="black" stroke-width="5" fill="#FFCC00" />

</svg>

</body>

</html>

以上代码展示了一个简单的 SVG 矩形,而 viewBox 属性可以使得 SVG 可被缩放,可以在 viewBox 中设置内容可以在网页上占用的视口大小。JavaScript 的函数则实现在浏览器窗口调整大小的变化下将 viewBox 与窗口大小相适应,实现响应式设计。

动画效果

内联 SVG 可以使用 CSS 和 JavaScript 实现许多优秀的动画效果。下面来看一个简单的 SVG 动画。

<!DOCTYPE html>

<html>

<head>

<title>SVG 动画</title>

<style>

@keyframes move {

0% {

transform: translate(0, 0);

}

50% {

transform: translate(200px, 0);

}

100% {

transform: translate(0, 0);

}

}

svg {

height: 300px;

width: 300px;

}

.circle {

animation: move 2s ease infinite;

}

</style>

</head>

<body>

<svg>

<circle class="circle" cx="50" cy="50" r="40" fill="green" />

</svg>

</body>

</html>

上述代码展示了一个 SVG 圆形动画,通过为 SVG 元素的 .circle 类设置 CSS 属性,实现了一个简单的动画效果。

交互性

内联 SVG 带来的最大的好处之一是其对于交互性处理的优秀性能。可以通过在 SVG 中添加 JavaScript 代码,使得 SVG 元素可与浏览器进行交互。

以下例子给出一个 SVG 元素的变化效果,展现了通过 JavaScript 替换 SVG 元素内容来实现交互性。

<!DOCTYPE html>

<html>

<head>

<title>SVG 交互</title>

</head>

<body>

<svg width="100" height="100">

<circle id="circle" cx="50" cy="50" r="40" stroke="black"

stroke-width="2" fill="white" />

</svg>

<p><button onclick=changeCircle()">变化</button></p>

<script>

function changeCircle() {

var circle = document.getElementById('circle');

if (circle.getAttribute('fill') === 'blue') {

circle.setAttribute('fill', 'white');

} else {

circle.setAttribute('fill', 'blue');

}

}

</script>

</body>

</html>

上述代码通过包含 <svg> 元素与 JavaScript 互动,实现了一个简单的填充颜色变化功能。

总结

HTML5 内联 SVG 提供了一种更灵活、可扩展和高精度的图形绘制方式,可以通过 CSS 、 JavaScript 和 HTML5 的其他功能实现许多优秀的特性,包括响应式设计、动画效果、交互性等。在实际应用中,内联 SVG 的强大和优势就会变得更加明显。