草庐IT

html - CSS 盒子阴影动画像素艺术闪烁

coder 2023-08-11 原文

部分出于乐趣,部分出于我的设计理念,我正在尝试将动画 gif 转换为纯动画 CSS。

它几乎可以正常工作,但我遇到了一个障碍,我不确定是什么导致了我的问题,或者我该如何解决它。不幸的是,我怀疑我只是遇到了技术的限制。

我一直用于测试的 gif 是这样的:https://us.v-cdn.net/5018289/uploads/editor/yj/lcdjneh1yoxv.gif

至于实际的 CSS,我一直在尝试实现这里的方法(动画框阴影属性),因为它看起来是最可行的:https://codepen.io/andrewarchi/pen/OXEEgL

#ash::after {
  animation: ash-frames 0.4s steps(1) infinite;
}

@keyframes ash-frames {
    0% {box-shadow: 32px 8px #181818, 40px 8px #181818,...}
    ...
}

在给定的示例中,动画看起来相当无缝,因此我认为值得一试。明显的区别:我使用的 gif 有更多的帧更多的像素。

作为快速概述,我的 CSS(我使用的是供应商标签等,这只是一个示例):

.pixel-art-3940::after {
    animation: pixel-art-3940-frames 1s steps(5, end) infinite;
}

@keyframes pixel-art-3940-frames {
    0% {box-shadow: 112px 68px rgba(77, 69, 64, 1),...}
    16.666666666666668% {box-shadow:115px 65px rgba(77, 69, 64, 1),...}
    ...
}

动画看起来确实有效,但是动画中存在强烈的“闪烁”效果。见下文:

我已经尝试了 Chrome 中“闪烁转换”的常用解决方案 - 例如将 -webkit-backface-visibility 设置为 hidden - 但到目前为止还没有解决任何问题问题。

正如我所说,我担心我只是遇到了技术本身的限制。任何想法可能是什么问题,我是否可以解决它?

编辑:这个特定动画的完整源代码可以在这两个要点中找到。由于 CSS 文件的大小,我选择了 Gists。

最佳答案

正确答案

最后,都是animation-timing-function的功劳。 steps() 函数中的第一个参数不是关键帧数(或循环中的步数),而是关键帧之间渲染的步数。

所以将它更改为 steps(1,end) 修复了它,因为浏览器不再需要计算中间帧(由于大量的 box-shadow 它显然失败了 值 - 每个像素基本上有 1 个值 - 邪恶的技术,顺便说一句)。

查看它的工作情况:https://jsfiddle.net/websiter/wnrxmapu/2/


上一个答案::(部分不正确,导致上面的答案正确 - 我保留它是因为它可能对其他人调试类似动画有帮助):

最初我认为您的导出工具...完全错误。

为什么?因为将 animation-duration1s 增加到 100s 产生了 this result .

明显的结论是你的中间框架有问题。

但是,我单独测试了它们中的每一个,令我惊讶的是,它们呈现正确。

由此得出的结论是,每个关键帧的 box-shadow 计算数量有限,并且执行了某种聚类算法。

这是有道理的,因为我们在这里讨论的是 box-shadow,在 99.999999999% 的情况下(基本上所有除了你的) 不必必须准确。它应该(而且显然是)近似有利于渲染速度,原因很明显:我们正在谈论用户体验和“感觉”。大多数用户都不是技术人员,他们只是希望在任何和所有条件下都能流畅滚动。

我得出的结论是,在尽最大努力优化您的代码,将其减少到初始大小的一半以下之后,每个关键帧允许的计算量必须有限制:https://jsfiddle.net/websiter/wnrxmapu/1/

我找不到任何关于 box-shadow 的像素聚类技术的 Material ,而且我认为网上提供的资料不多 - 这应该是 secret 信息。

但是,恕我直言,除了吹牛的权利,与 gif 或 svg 相比,我认为您的技术在渲染性能方面没有机会。强调“恕我直言”。如果您坚持要完成此操作,则可能需要将图像切分并检查允许的计算限制是针对每个元素还是针对每个页面。

但我不会抱太大希望。就像您的代码所揭示的优化一样,它使 CSS 快如闪电。如果一定要准确,就不会这么快了。

关于html - CSS 盒子阴影动画像素艺术闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50559036/

有关html - CSS 盒子阴影动画像素艺术闪烁的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby - capybara field.has_css?匹配器 - 2

    我在MiniTest::Spec和Capybara中使用以下规范:find_field('Email').must_have_css('[autofocus]')检查名为“电子邮件”的字段是否具有autofocus属性。doc说如下:has_css?(path,options={})ChecksifagivenCSSselectorisonthepageorcurrentnode.据我了解,字段“Email”是一个节点,因此调用must_have_css绝对有效!我做错了什么? 最佳答案 通过JonasNicklas得到了答案:No

  3. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  4. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  5. ruby-on-rails - 如何在 Rails Controller Action 上触发 Facebook 像素 - 2

    我有一个ruby​​onrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素

  6. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  7. ruby-on-rails - capybara ::ElementNotFound:无法找到 xpath "/html" - 2

    我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'

  8. css - 用 watir 检查标签类? - 2

    我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes

  9. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  10. ruby - 如何使用 Ruby 将 CSV 文件读入 HTML 表格? - 2

    我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda

随机推荐