【问题标题】:Line around <img></img> element<img></img> 元素周围的线条
【发布时间】:2019-09-12 20:55:01
【问题描述】:

我想要动画 3 .svg 图像:

<div class="sequence">
  <img src="assets/img/1.svg"/>
  <img src="assets/img/2.svg"/>
  <img src="assets/img/3.svg"/>
</div>

css:

.sequence {
  position: relative;
}

.sequence img {
  position: absolute;
  top: 0;
  opacity: 0;  
  animation: cycle 0.3s steps(1) infinite;
}

@keyframes cycle {
  0%  { opacity: 1; }
  33% { opacity: 0; }
}

.sequence img:nth-child(2) {
  animation-delay: 0.1s;
}

.sequence img:nth-child(3) {
  animation-delay: 0.2s;
}

但是这种方式在某些时候动画开始滑动和闪烁,在&lt;a class="sequence" id="anm"&gt; 中包含&lt;img src="assets/img/1.svg" alt="" alt=""/&gt; 不允许很好地将图像与元素中心对齐。

所以,从背景的另一种方式:

img{
  width: 60px;
  height: 60px;
  border: 0px;     
  border-style: none;  /*border-style: hidden;*/
  outline: none;
  animation:  rotateImages 0.3s infinite; 
}

@keyframes rotateImages {
  0%   { background: url("assets/img/1.svg"); }
  32%   { background: url("assets/img/1.svg"); }
  33%  { background: url("assets/img/2.svg"); }
  65%  { background: url("assets/img/2.svg"); }
  66% { background: url("assets/img/3.svg"); }
  100% { background: url("assets/img/3.svg"); }
}

&lt;img&gt;&lt;/img&gt; 没有这个缺陷,但我不知道如何删除创建元素周围的细黑线,粉红色 squire 周围的边框,如下所示,它与 .svg,.gif 一起出现, .png。我试过添加border-width: 0px;,以防万一border-color: white;,因为我的背景是白色的,但它看起来像是别的东西。我不确定如何删除它:

例子:

https://jsfiddle.net/3gxpbauo/

.png-s,是.svg的同一张图片:

正如我所指出的,我想将它与&lt;label&gt;&lt;h1&gt;&lt;p id="nameblock"&gt;Text&lt;/p&gt;&lt;/h1&gt;&lt;/label&gt; 对齐在一个文本中心行中。使用&lt;div id="container"&gt;&lt;/div&gt;,显示在Prajyot Tote 答案中,或者如上图所示使用&lt;a class="sequence" id="anm"&gt;,(也成功显示没有轮廓的标签),在这两种情况下都将元素对齐在不同的行上,或者在底部使用.inline{display:inline-block;}的文本。这是&lt;img&gt;&lt;div id="container"&gt;&lt;/div&gt;的区别:

解决方案:

因此,我在Prajyot Tote 的帮助下为我的特定任务找到的解决方案基于答案,使用#container 而不使用#imgborder: 0px; 用于.inline

#container {
  width: 72px;
  height: 73px;
  border: 0px;
  animation:  rotateImages 0.3s infinite; 
}

.inline{display:inline-block;vertical-align: middle; border: 0px;}

@keyframes rotateImages {
  0%   { background: url("https://i.stack.imgur.com/d0tnz.png"); }
  32%   { background: url("https://i.stack.imgur.com/d0tnz.png"); }
  33%  { background: url("https://i.stack.imgur.com/elROb.png"); }
  65%  { background: url("https://i.stack.imgur.com/elROb.png"); }
  66% { background: url("https://i.stack.imgur.com/O0fGg.png"); }
  100% { background: url("https://i.stack.imgur.com/O0fGg.png"); }
}
<div class="inline">
  <label><h1><p id="nameblock">Some text</p></h1></label>
</div>
<div id="container" class="inline"></div>

【问题讨论】:

  • @Robert Longson 你好,它只是 3 个位置略有不同的粉红色正方形矢量图像,用 0.3s 进行摆动运动,只是快速循环图像动画(它不是 svg 动画,在我的使用 case .svg 是因为此类元素的矢量质量)。我的背景是白色的,我的 .css 不应包含来自其他地方的任何黑线
  • @Robert Longson 似乎不是.svg 问题,因为我与.gif 和.png 有相同的行,我用.png 编辑了问题,这与.svg 图像相同并且在 html 中的 周围也有这条不需要的线,请检查
  • 你有活生生的例子吗?小提琴或codepen?它可能是特定于浏览器的。
  • 没有看到你的代码,很难说,但看看这个。使用 src 和指定border:none 有一些细微差别,这可能会有所帮助:stackoverflow.com/questions/2153425/…
  • @Justin C 你好,我已经包含了所有代码,这是显示相同大纲结果的最小示例jsfiddle.net/3gxpbauo

标签: html css animation background


【解决方案1】:

问题不在于边框、svg 或 png,而在于您正在使用的标签。

background-image 可以与任何元素一起使用。将img标签改为div,一切都会好起来的。

#container,
img {
  width: 60px;
  height: 60px;
  animation: rotateImages 0.3s infinite;
}

h1 {
  margin: 0;
  line-height: 1;
  padding: 0 20px;
}

.inline {
  display: inline-block;
  vertical-align: middle;
  border: 1px solid #eee;
}

@keyframes rotateImages {
  0% {
    background: url("https://i.stack.imgur.com/d0tnz.png");
  }
  32% {
    background: url("https://i.stack.imgur.com/d0tnz.png");
  }
  33% {
    background: url("https://i.stack.imgur.com/elROb.png");
  }
  65% {
    background: url("https://i.stack.imgur.com/elROb.png");
  }
  66% {
    background: url("https://i.stack.imgur.com/O0fGg.png");
  }
  100% {
    background: url("https://i.stack.imgur.com/O0fGg.png");
  }
}
<div class="sequence">
  <div class="inline">
    <label><h1><p id="nameblock">Some text</p></h1></label>
  </div>
  <div id="container" class="inline"></div>
</div>

我们看到的边框是空的img 标签。无法处理那个空的img 标记渲染。

更新了代码以使元素正确内联。

注意:添加border,以便可以正确查看元素位置。而padding 是为了美观。

【讨论】:

  • 您好!是的,但是你如何将它与&lt;label&gt;&lt;h1&gt;&lt;p id="nameblock"&gt;Some text&lt;/p&gt;&lt;/h1&gt;&lt;/label&gt; &lt;div id="container"&gt;&lt;/div&gt; 对齐在一行中,它在元素下,与我在&lt;a class="sequence" id="anm"&gt; 的帖子中描述的css 示例相同,这也成功显示了没有轮廓的标签,但在不同的行上对齐元素
  • display:inline-block 添加到#container o.O?你能复制过去带标签的部分吗?我在你的问题中没有看到任何那种类型的 html。
  • 我已经添加了结果比较&lt;img&gt;&lt;div id="container"&gt;&lt;/div&gt;的区别,请检查。 &lt;img&gt; 直接与文本对齐,当 container 低于与 .inline{display:inline-block;} 的文本中心行时,不知道我可以使用什么来对齐它,就像 &lt;img&gt; 一样
  • 你试过vertical-align:middle 吗?这应该够了吧。尽管您必须小心将其添加到哪个元素。
  • 抱歉重播晚了。我已经在我的帖子中添加了解决方案,似乎一切都按要求工作,根据您的回答,几乎没有编辑。唯一对我来说不是很清楚,如何包含@keyframes 单独的mycss.css 以使其在&lt;head&gt; 中从&lt;link href="css/mycss.css" rel="stylesheet"&gt; 中工作,而不包括在html &lt;style&gt;
【解决方案2】:
border: 1px solid #FFFFFF;

使用此属性,希望它有效。如果它不起作用,则将边框大小增加到 2 或 3 px。或使用border: none; property

【讨论】:

  • 欢迎来到 Stack Overflow。我鼓励您阅读 Prajyot Tote 留下的答案。你看到那个答案有解释和示范了吗?
猜你喜欢
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
相关资源
最近更新 更多