gpt4 book ai didi

html - svg 外部样式表不起作用

转载 作者:行者123 更新时间:2023-12-02 17:08:52 26 4
gpt4 key购买 nike

我是新的 svg 学习者,尝试使用外部样式表为 svg 文件设置动画,但未能为我的对象“立方体”设置样式。

[index.html 文件]

      <head>
<link rel="stylesheet" type="text/css" href="cube.css">
</head>
<body>
<img src="cube-motion.svg" height="350px" />
<div class="logo">
<h1>SVG Cube Animation</h>
</div>

[cube-motion.svg 文件]

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="cube.css" ?>

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">

<g>
<polygon id="l1" class="st0" points="105.3,92.7 86.3,103.3 67.3,92.9 67.1,71.9 86,61.2 105.1,71.6 "/>
<polyline id="l2" class="st1" points="67.1,71.9 86.2,82.5 86.3,103.3 67.1,93.1 66.9,71.9 "/>

<animateTransform
attributeName="transform"
type="translate"
from="0 0"
to="0 75"
begin="0s"
dur="3s"
repeatCount="indefinite"
/>
</g>

</svg>

[外部样式表文件 cube.css]

 .st0 {
fill:#FF00FF;
stroke:#000000;
stroke-miterlimit:10;
}

.st1 {
fill:#23D83C;
stroke:#000000;
stroke-miterlimit:10;
}

.logo {
position: absolute;
left: 400;
top: 150;
}

最佳答案

在 SVG 中包含外部样式表,您走在了正确的轨道上:

<?xml-stylesheet type="text/css" href="cube.css" ?>

它不起作用的原因是因为 SVG 在 HTML 中作为 <img> 加载这 - 理所当然 - 不允许处理额外的外部 Assets 。

如果您坚持从外部文件中获取 CSS,您有两个选择,将 SVG 嵌入到 html 中或使用 <object data=file.svg type=image/xml+svg></object> .

根据您的用例,您基本上可以通过三种方式使用 CSS 进行样式设置:

<img src="my.svg">

图像不是交互式的,并且不允许在其内部加载任何其他 Assets 。仅引用图像文件的简单介绍。它确实允许使用 CSS,但只能来自 <style> -SVG 中的元素。

<object data="my.svg" type="image/svg+xml"></object>

对象可以做的不仅仅是图像,例如加载额外的 Assets ,甚至包括独立的(在加载的 SVG 中)交互(例如 CSS :hover -pseudoclass)加载外部 CSS 文件是按照示例代码中的方式完成的,<?xml-stylesheet...?> -指令在 <svg> 之前-标签

<svg...>...</svg>

完全嵌入到 HTML 文档中,这允许在页面中完全集成(这可能对交互端有好处,对 CSS 端有不利影响,因为您随后必须考虑样式隔离),但是也是最少可重用的,因为您基本上必须重复整个 SVG,如果在页面上使用一次则无关紧要。请注意,为了将 SVG 嵌入到 HTML 文档中,您不能在 HTML 中放置任何 SVG 文档类型和/或 xml 声明(<?xml...?><!DOCTYPE svg...><?xml-stylesheet...?>)。使用嵌入式 SVG,您可以使用常用的 HTML 简单地导入(或内联)样式 <link><style>节点,其中 <style>元素也可能仍在 <svg> 中-元素。

这是一个 quick sample of the difference between <img> and <object>

关于html - svg 外部样式表不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50282060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com