- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
在过去的一周里,我一直在帮助一位 friend 在浏览器中试验基于 SVG 的 Sprite 表。我们想提出一个理想的工作流程来在浏览器中准备、发布和运行高质量的动画图形。因此,理想情况下,拥有适用于小型智能手机屏幕、平板电脑、视网膜显示器和桌面浏览器的单一动画数据源。
理论上,(基于矢量的)SVG 应该是理想的选择,但由于 SVG 通常使用不多 - 我们决定对其进行测试。这个想法不是使用 SMIL SVG(因此没有基于 SVG 的动画),而是创建一个动画 Sprite 表(就像您通常使用光栅数据 PNG/JPG 那样),但是使用纯矢量(即 SVG)来做到这一点。它有点大,但如果它能这样工作——它甚至可以使用更优化的东西。
此外,逐帧矢量动画可以为我们的工作流程做很多事情 - 它允许我们使用 Flash 编辑器制作动画,然后将它们导出到 SVG Sprite 表。
无论如何,结果出奇地好,但在某些方面也失败了(请注意,出于测试目的,我们只使用基于 Webkit 的浏览器,即 Safari、Chrome、iOS 上的移动 Safari 和 Android ICS ).
在 CSS 中,很容易为像这样的 Sprite 表触发硬件加速(至少在具有关键帧和步骤的现代浏览器中)——您只需这样做:
background-image: url(my.svg);
-webkit-animation: walk 1s steps(12, end) infinite;
调用此处显示的基于关键帧的动画:
@-webkit-keyframes walk {
from { -webkit-transform: translate3d(0, 0, 0); }
to { -webkit-transform: translate3d(-100%, 0, 0); }
}
translate3d 的使用应该让 GPU 发挥作用,整个事情应该在 iOS 移动 Safari 和 Android ICS 浏览器中进行硬件加速。
考虑到它是一种蛮力技术和相当大的矢量动画(测试为 600x600 像素),令人惊讶的是 - 整个过程都很顺利。但它并不完美——它在起飞前会在 Safari 中闪烁。在 ICS 浏览器中,它一直在闪烁,所以它不是真正可用的。
所以我们尝试了常用的技巧来消除闪烁,例如:
-webkit-transform: translateZ(0);
-webkit-backface-visibility: hidden;
-webkit-perspective: 1000;
但这没有用。因此,我们尝试在内存中动态光栅化 SVG,并使用 -webkit-transform: scale3d(1, 1, 0) 将其用作纹理,但这并没有帮助以太。
最后,我们只是用相同大小的渲染出的 PNG/JPG Sprite 表替换了 SVG,认为复杂的矢量对于浏览器来说太多了——但你猜怎么着?这是同样的问题 - 所以它根本不是 SVG 渲染 - 它是一个浏览器绘图问题。 进一步的证明是如果我们将动画减慢到 1FPS - 闪烁仍然存在。
图像对 GPU 来说太大了吗?我们是否已达到您可以在浏览器(尤其是移动设备)中轻松绘制/制作动画的性能极限?
我真的很感激关于如何潜在地消除闪烁的想法/技巧(特别是因为它的表现太快了)。它只是一项很有前途的技术 - 适应不同屏幕尺寸的高性能浏览器动画 - HTML5 chalice ;)
有一些优化比如
<svg preserveAspectRatio="xMinYMax slice" viewBox="0 0 600 50">
和一些 CSS 魔法,我们能够让 SVG 完美地适应它的容器,并从一个 CSS 类改变它的大小。它确实会产生奇迹 - 但可惜闪烁。
无论如何 - 请 read more about it here 您还可以在其中试用。
最佳答案
很酷的想法。
如何更改帧的 zindex,以便将图像叠加在一起?这可能会解决闪烁问题,因为在重绘期间最后一帧仍然可见。因此,您只需不断增加最新帧的 zindex 值即可。当然,这是有限制的,你需要重新设置zindex,但它可能对减少闪烁有很大的影响。
关于html - 为(移动)浏览器中的 CSS3 HW GPU 加速优化基于 SVG 的 Sprite 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10450022/
我有一个名为 main.css 的 css 文件和另一个名为 style.css 的文件。我怎样才能在 main.css 中做到这一点? .someClass { //apply rules to
在更新我的 css 之前,我在 Login.css 中有以下内容: body { background-image: url('./pictures/fond.png'); bac
我的 share point 2013 核心 css 和我的 css 之间存在 css 冲突。所以我想把我所有的类都放在 div #s4-workspace 下但是我搜索了一种方法来将所有类分组到这个
我知道您可以覆盖 jsp 页面从 jsp 包含 CSS 文件(即全局 CSS 文件)继承的 CSS 属性。 但是,如果元素中的某个属性弄乱了特定页面,而我不想只使用内联 CSS 在该页面中使用它怎么办
我刚刚发现了 initial-scale 元属性。 以前,我一直在使用 default.css 来定义我所有的样式和大小(用于字体和元素),以便它们在桌面计算机的屏幕上显示得很好。然后,如果您使用的是
我正在尝试使用 LESS CSS 来编写我的 CSS。我已经按顺序导入了 style.less 和 less.js 文件。 现在我想提取 LESS 生成的 CSS。有什么办法可以做到吗?我不想使用脚本
我想知道是否有任何一种软件可以读取大量内联样式中的 HTML 文档并将所有这些样式转换为外部 css 文件。如果只有一页,我可以手动完成。但是有100页。有人有想法吗? 最佳答案 就像有人说的那样,“
当我想从 Styled Components 迁移到 CSS Modules 时,出现了以下问题。 假设我有以下样式组件,它接受动态参数 offset和一个动态 CSS 字符串 theme : con
有没有办法将 CSS 类定义为与另一个类相等?例如,如果我有一个类: .myClass{ background-color: blue; } 有没有一种方法可以将第二个类定义为与 myClas
我正在尝试制作一组按钮,这些按钮贴在页面底部并且由固定的空间隔开。我正在使用 angularJS 的 ng-repeat 指令通过 ajax 请求获取数据,然后我用它来显示按钮。 我的问题在于让按
浏览器是否在加载 CSS 文件时解析 CSS?还是在整个 CSS 文件被浏览器下载后才进行解析?不同浏览器的做法有区别吗?我在哪里可以找到这种底层信息? 这个问题不是 Load and executi
这个问题在这里已经有了答案: Can a CSS class inherit one or more other classes? (29 个答案) 关闭 3 年前。 标题有点乱,我给大家看一下。假
我遇到了最奇怪的问题...... 在最简单的形式中,我有一个包含以下内容的 index.html 文件: (在尝试确定根本原因的过程中,我已经大大减少了它) 当我查看页面的源代码时,我得到以下信息:
我正在使用 Mindscape Workbench 来最小化我的 scss 文件。我的页面设置为使用 *.min.css 文件。在随机时间,min 文件不会与系统的其余部分一起发布。 我有很多 css
请告诉我 CSS 框架和 CSS 网格之间的区别。 最佳答案 CSS 框架也可以是 CSS 网格框架。 CSS 网格框架用于构建 CSS 布局。有一些框架除了构建布局还有其他用途,例如 Hartija
我有无法从页面中删除或更改的 original.css 文件。原始.css table { border-collapse: collapse; border-spacing: 0;
我以前使用 bootstrap css import 很好。 但是我正在尝试使用 CSS 模块,所以我添加了几行。 { test: /\.css$/, use:
有没有办法在 css 选择器中创建一个 css 组。 例如: .SectionHeader { include: .foo; include: .bar; include: .
今天我学习了 CSS 中的两个概念,一个是 CSS 定位(静态、相对、绝对、固定),另一个是 CSS Margin,它定义了元素之间的空间。 假设我想移动一个元素,这是最好的方法吗?因为这两个概念似乎
var paths = { css: './public/apps/user/**/*.css' } var dest = { css: './public/apps/user/css/' } /
我是一名优秀的程序员,十分优秀!