它是如何实现的呢?让我们看看四种不同的方法。每种方法都以不同的方式处理这种视觉效果,并且根据具体情况都非常适用。
完全伪造
任何网页设计的最终结果基本上都是一种视觉错觉。您始终可以在 Photoshop 或其他图形编辑器中创建透明效果,并导出平面图形。在 Photoshop 中,可以通过更改图层的透明度级别、填充级别或混合模式等来创建透明效果,仅举几例。
不透明度

此整个按钮都应用了不透明度,以强调它当前处于“禁用”状态。
您可以使用 CSS 的opacity参数使任何元素透明。
#anything {
opacity: 0.5; /* 50% transparent */
}
如果您需要支持旧版浏览器,请参见此处。
请注意,具有不透明度的元素的所有后代也会变得透明。无法“强制”任何后代比父级不透明度更低。
RGBa / HSLa
在 CSS 中使用 RGBa 作为颜色值,您可以为任何颜色设置透明度级别。与不透明度相比,它具有明显的优势,因为它不会对后代产生任何影响。它也很不错,因为创建颜色的淡出变体就像更改最终的 alpha 值一样简单。说到颜色变化,使用 HSLa 甚至更容易,并且仍然能够处理透明度。
#anything {
background: rgba(0,0,0,0.5); /* 50% transparent */
}
#anything {
background: hsla(0,0,0,0.5); /* 50% transparent */
}
PNG
从 Photoshop 中“保存为 Web”时,您有两种 PNG 选择:PNG-8 和 PNG-24。PNG-8 类似于 GIF,您可以在像素中使用透明度,但像素要么完全透明,要么完全不透明,没有中间状态。PNG-24 的文件大小虽然大得多,但支持完全 Alpha 透明度。
在上面的示例中,内容区域的阴影来自 PNG-24,以便背景纹理可以更改,而阴影仍然保持不变。
酷… 这是我第一次听说 CSS3 中包含 HSLA。
我也是。它代表什么?它起源于哪里?
色相饱和度和亮度(以及 Alpha)。它非常棒,我真的很想写一篇文章来介绍它。
色相饱和度和亮度是我在 Illustrator 中最喜欢的功能之一,所以我觉得 HSLa 会很棒。
如果你能写一篇关于它的文章,Chris,那就太好了。
likearchitects 如何在没有 Flash 的情况下制作视频背景?
如果您查看源代码,它看起来像是标记中移动和淡出的图像,使用 jQuery Cycle。主 div 使用重复的固定背景图像来创建像素化的点效果。
http://jquery.malsup.com/cycle/browser.html
实际上,cycle 插件仅用于新闻。
背景动画不使用插件,因为我找不到任何一个适合我想要的设计中的滑动 + 循环行为的插件。
所以我不得不自己编写代码。代码位于 http://likearchitects.com/assets/js/application.js
如果这对您有任何帮助,我感到很高兴。
Chris,你的时机总是让我惊叹不已——实际上我刚刚在搜索关于这方面的信息,然后来搜索过去的文章——但现在不需要了!
干杯!
太棒了,谢谢!!
我认为除了第一个需要 IE 特定属性“filter”之外,其他都不在 IE 中起作用 :(
您可以使用一些 JavaScript 代码 使 24 位 PNG 在 IE6 中工作,或者正如其他人所说,您可以使用 Fireworks 或这种方法 创建索引的 8 位版本。所有浏览器都能实现半透明!
“PNG-8 类似于 GIF,您可以在像素中使用透明度,但像素要么完全透明,要么完全不透明,没有中间状态。”
实际上,这是完全错误的。您可以在 PNG-8 文件中使用 Alpha 透明度,但是颜色/Alpha 组合作为您有限的 256 色调色板中的特定颜色存储。
此外,Photoshop 不支持具有 Alpha 透明度的 PNG-8。Fireworks 支持。
参考:http://www.sitepoint.com/blogs/2007/09/18/png8-the-clear-winner/
是的,我听说过,但完全忘记了。
是的,这几乎是使用 Fireworks 的最大原因。额外的好处是,如果您将它们压缩为 PNG-8+Alpha,IE6 将渲染它们,就好像它们是 PNG-8+Boolean 一样,在许多情况下,这是一种可以接受的回退方案。与在 IE6 中呈现为难看的灰色背景的 PNG-24 不同,这需要对 IE6 进行 JS 修补,我对此深恶痛绝。PNG8+Alpha 万岁!
您是否知道任何好的教程逐步解释此过程?我听说要获得良好的 Fireworks png-8,需要执行几个步骤
上一句:**从 Photoshop 中“保存为 Web”时…**
Photoshop 不支持 PNG-8 Alpha 透明度,这很糟糕,但这并不能证明我错了。
没错。请给 Ben 应有的荣誉,因为他指出了你没有指出的内容。如果你真的想说 Photoshop 限制了 PNG8,那么你搞砸了,Ben 的评论为文章增加了价值。
看起来 Photoshop CS5 现在支持 PNG-8 了
我讲错了。PS-CS5 确实“支持”PNG8,但它似乎仍然不支持 Alpha 透明度。
pngquant 和 pngnq 也可以免费执行此 PNG8 优化技巧…
我在 IE6 中尝试过几次,通常对结果不太满意。“开/关”透明度有时看起来很糟糕。
我还尝试使用 AlphaImageLoader 来修正二进制透明度,但这只适用于 png24,不适用于 png8。
你也可以在 PNG8 的 tRNS 块中获得完整的透明度/不透明度蒙版,但蒙版以每个像素一个字节存储,并且该块未压缩。对于足够小的 PNG,它可以在不占用索引颜色调色板中的插槽的情况下工作。
我一步一步地尝试了这种方法,但它仍然没有呈现 Alpha 透明度。我知道我一定“做错了什么”,尽管我相信我正确地遵循了说明……但归根结底,我无法在 IE6 中获得 Alpha,所以我放弃了它。即使在那时,尤其是在最近的统计数据和讨论之后,我只是采取了这样的方法:“IE6 用户将获得稍微糟糕的体验。太糟糕了。”
所以,关于 Greg 的观点,哪些浏览器支持这种技术 (rgba, hsla)?现在——可能像大多数人一样——我使用多个 CSS 规范来实现一系列浏览器的透明度设置。如果可以用一个规范来处理就好了!
Chris,你最常用哪种方法?
我最近拒绝了一位客户更改设计的请求,该设计要求主包装器是不透明的。
你重申了 rgba 为网络带来的宝贵补充。
谢谢!
*到……网络
我主要使用 PNG,但最近使用 rgba + png 作为简单透明块的回退。(我确实应该为此使用 hlsa,但发现语法不如 rgba 易用;反正我不需要动画颜色)。
有时在不会更改布局的小型站点上使用“伪造”的(透明块与背景融合)。
谢谢,很棒的文章。CSS3 太棒了
可能值得指出,只有 RGBa 和 HSLa 技术会被认为是 CSS3。其他的更旧或者与 CSS 无关=)
“内容区域正在创建的阴影可能是来自 PNG-24”是什么意思?
我认为他指的是“由我”而不是“我的”。
那真是有点尴尬,谢谢你的指正。重点是阴影是 PNG-24 图形本身的一部分。
感谢 Chris 的文章!
这些是用于创建真正独特界面的很棒的 CSS 属性。
filter: alpha(opacity=70);
-moz-opacity: 0.7;
-khtml-opacity: 0.7;
opacity: 0.7;
不需要;Mozilla 支持 opacity。
现在支持了。-moz-opacity: 是针对可能仍在使用的旧版本(例如,Netscape Navigator)。
或者如果你已经在使用 jQuery,使用它的 opacity,它可以处理所有浏览器。
谢谢 bill
在 CS3 获得任何实际应用之前,会有很多事情发生……所以,现在阅读很有趣,但也许会在 2020 年应用。
不错的文章,Chris。
+S
不错的文章
不错的技术汇总。
还值得注意的是,RGBa 和 HSLa 可用于 CSS3 渐变中以创建一些不错的效果,因此您不仅限于单一颜色或透明度。
非常有用,谢谢 Chris,另外我喜欢你在回复 Ray 时提供的 jQuery cycle 链接。
所以,也许我把自己搞糊涂了,但是……RGBa 和 HSLa 选项只是 CSS3 选项,还是它们有 CSS2 的“等价物”?
此外,RGBa 和 HSLa 方法是否仅适用于背景颜色,还是可以用于其他颜色规范,例如字体颜色、边框颜色等?
感谢您一如既往地提供精彩的文章!
RGBa 或 HSLa 没有 CSS2 等价物。
RGBa 可以用于任何通常接受 RGB 声明的属性,所以是的,几乎任何允许你定义颜色的属性都可以。你应该首先使用 RGB 声明作为不支持它的浏览器的“回退”(或者,如上所述,对于背景使用透明 png)。
我在 RGBa 浏览器支持文章 中发布了此内容,但我会在这里再次发布它,因为我发现它在使 RGBa 在所有浏览器中都能正常工作方面非常有用
这是对 IE 中 rgba 透明度技巧 的更深入解释。甚至还有一个方便的工具可以将 RGBaa 值转换为十六进制代码。不错。
不错的技巧。
非常棒,我自己也一直在思考很多这些问题。非常感谢,我必须在一些即将到来的网站上尝试一下。继续努力。
性能损失如何?
Png:一些浏览器(在旧电脑上?)倾向于延迟渲染(滚动)包含多个透明度的网站(即使每个透明度都使用相同的小 png 文件)。
使用每种方法时,浏览器将渲染多少个透明度层?
谢谢
我的想法是,如果你绝对需要一些 png 透明度效果,请保持尽可能小巧和简单。除非我只是在玩实验性的网站,否则我甚至不会尝试做多层。如果我试图在一个必须跨浏览器看起来不错的真实网站上变得太聪明,IE 通常会以某种方式咬我一口。
我最近在尝试在 IE 中使用透明 png 时发现了一些东西(对我来说有点“恍然大悟”的时刻)
在任何情况下都不要尝试用 1 像素重复的 png 创建半透明背景,并期望它在 IE 中工作。使用各种 IE png 支持的脚本解决方案,它会严重锁死 IE 浏览器。对于纯色的均匀透明度(渐变显然也可以),使用 IE 技巧的 RGBa 路线是最佳选择。
哈哈!当我读到“网页设计中的透明度”时,我以为你在谈论隐喻的透明度,而不是字面上的透明度。这使得你的第一点“完全伪造它”更加贴切。
我也是!我困惑了几秒钟 :P
很棒的指南,非常有信息量。感谢分享!
PNG-8 可以实现 Alpha 透明度,你需要使用 Fireworks 保存它。
使用透明度可以创建一些非常棒的网页。
酷。这就是我正在寻找的!!
酷……
我实际上一直在尝试使用 -webkit-mask-image 和 -webkit-gradient 做一些与此相关的事情,以便我只能使用 CSS(纯粹用于实验/个人使用,而不是实际的商业项目)将渐变应用于文本,但我还没有找到 Firefox 等价于 -webkit-mask-image 的方法,并且开始怀疑它是否根本不存在。
CSS的不透明度很酷,但是要把所有那些切片过的Photoshop设计从JPEG转换为PNG或CSS效果需要花费大量时间。
不错!我喜欢它☺!!感谢你的帖子!
非常有趣,我最近一直在使用透明的PNG。
我将尝试这些其他的方法,谢谢。