【发布时间】:2013-06-19 21:34:59
【问题描述】:
通常当我制作渐变时,我使用colorzilla gradient edtior。
默认情况下,它会为您生成 CSS。这是一个例子:
background: #1e5799; /* Old browsers */
background: -moz-linear-gradient(top, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(100%,#7db9e8)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* IE10+ */
background: linear-gradient(to bottom, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 ); /* IE6-9 */
虽然这肯定是彻底的,但我很好奇是否有必要。通过反复试验和消除过程,我将其简化为以下 CSS:
background: #1e5799; /* Old browsers */
background: linear-gradient(to bottom, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 ); /* IE6-9 */
这种减少的 CSS 似乎仍然在 Chrome、Firefox、IE8、IE9 和 IE10 中起作用,.但是很难说,因为使用 Internet Explorer 兼容性视图并不总是很好(当我有 IE9 时,我的块工作,但在我升级到 IE10 并使用 IE9 兼容性视图后它没有)。我还下载了IETester,并且使用这个工具取得了更大的成功。
我只是想知道是否有人能看到我是否遗漏了一些可能在给定案例或其他重要浏览器中损坏的重要 CSS,或者我是否可以进一步精简它。
虽然重要性并不重要,但它在大小上却有很大的不同。
两个块之间的差异是618 bytes,而在使用 10 个渐变的工作表中,差异超过了 6 KB。正如您所看到的,这可以快速加起来(在缓存和今天的互联网速度之间,这不是最重要的因素),我仍然认为它值得一看。
【问题讨论】:
-
“在使用 10 个渐变的表格中,差异超过 6 KB”——我敢打赌,经过 gzip 压缩后它会小得多。仅以您的示例代码为例,我得到 881 字节 vs. 268 没有 gzipping,341 字节 vs. 215 使用 gzipping。 (在 Mac OS X 上,我在命令行上使用
cat big.css | wc -c测量常规尺寸,使用cat big.css | gzip -c | wc -c测量压缩后的尺寸。) -
gzip 在压缩包含大量重复的文本方面做得很好。在 gzip 压缩后,在文件中多次包含相同的字符串几乎是免费的,大小方面。因此,拥有多种渐变语法确实不会造成太大伤害。 (如果你的 CSS 没有被 gzip 压缩,确保它 is 会比其他任何事情都更容易地减少文件大小。)
-
IETester 不相关。使用 browsershot 等在线工具进行测试。最好的办法是让 IE 在虚拟机上独立进行测试。
-
是否有一种高效的工具可以在构建时自动压缩 CSS 或类似的东西?我使用大量的 spritesheets 和大量的项目,每次手动执行都会很糟糕。
-
@Johannes:取决于您的构建过程。 Gzipping 本身并不复杂:正如您从我的评论中注意到的那样,我只是在 Mac OS X 命令行上使用了
gzip来执行此操作。请注意,Web 服务器需要提供带有Content-Encoding:gzip标头的文件,以便浏览器知道它已被 gzip 压缩。您可以配置例如Apache 在提供文件时自动压缩文件。参见例如stackoverflow.com/questions/12367858/…
标签: css cross-browser