CSS经历了丰富多彩和不寻常的历史。从历史性的缓慢采用到目前的缓慢发展速度,丑陋的黑客意味着填补空白是正常的。

用CSS1,我们有一种简单而优雅的样式化语言,即使对非程序员来说也是友好的。因此,决定如下:说,缺少变量和常数,或条件逻辑。(我的王国是如果“声明!)

然后CSS2出现了,为我们提供了一些强大的布局工具。除了一些浏览器对如何实现它们完全不同意之外(框模型和浮动是两个浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮点浮然而,我们的网页设计者解决了这个问题,感谢我们可爱的CSS黑客和过滤器。使用完全有效的CSS,我们能够利用浏览器的解析错误,并专门服务(或隐藏)我们的CSS。问题解决了。幸运的我们。

但是现在Internet Explorer 7已经迫近,自从我们开始认真使用基于CSS的布局以来,我们已经准备好对浏览器的渲染引擎进行第一次真正重要的升级。(Safari的发布并不重要,事实是,当IE 7出现时,大多数我们通常的黑客攻击方法都会失败。害怕了吗??

在过去的几年中,基于CSS的开发有一个令人讨厌的小秘密:我们有了一个稳定的目标。由于IE6的局限性,我们在使用上相当保守。真的没有尖端的CSS,自从90年代末以来,CSS2规范已经是最终的,而CSS3将在未来某个时候关闭。我们迄今为止所做的任何事情都能够在IE中尽可能优雅地降级,因此,我们甚至推迟了CSS2更有趣的部分。

当然,这里有很多高级的演示CSS游乐场,或CSS/EDGE,甚至还有各种CSS禅园设计.但是对于我们为客户创建的基于生产的站点呢?保守的CSS使用占了上风。

除了……我们中的一些人在黑客使用上过于自由了,不是吗?您可能会争辩说,这些黑客对于理解我们面对的混乱的浏览器环境来说是必要的。在一整天的编码工作结束后,在Internet Explorer中加载这个美丽的新站点总是令人心碎的经历。我们中几乎没有人愿意花时间去思考IE到底是如何决定破坏我们的代码的。少许"“HTML”“〔1〕这里或““宽”“〔2〕问题就解决了。三年前我们采用的短期解决方案,然而,现在威胁要回来咬我们的屁股。

有条件的评论

IE7将修复许多传统的CSS黑客。Internet Explorer团队已经公开表示不赞成关于黑客的整个概念,支持IE专有方法,称为条件注释。而不是像这样的代码来过滤规则到Win/IE:

*html#selector{.:100px;}

我们应该使用HTML注释语法来选择性地提供到外部CSS文件的链接,这将包含类似的规则。语法如下


              

然后所讨论的特定于IE的CSS文件可能包含以下规则:

#选择器{宽度:100px;}

理论上,这个系统比CSS黑客做的要好得多。而不是专门利用浏览器中的bug,显然总有一天会修复的bug,有条件的评论是浏览器官方认可的特性,永远不会消失。他们验证,即使它们是专有的,当谨慎使用时,它们允许我们完成与CSS黑客完全相同的事情。

侧边栏

有人求问这个问题,当然:为什么条件注释只在HTML中实现,而不是在CSS?我有一个好消息,这是IE团队可能期待的未来版本。现在,我们必须在HTML文件中放置有条件的注释。

未来更新

但这仅仅是一个浏览器的更新,还有一个更大的问题,我们迟早会开始考虑的。我宁愿早点。

所有流行的浏览器都在不断的改进。我们不再停滞不前;这些改进将继续出现。CSS3还没有完成,但是它的各个模块已经实施了。未来就在眼前。

随着现代浏览器的更新,我们的代码将以什么其他有趣和创造性的方式被破坏?我们将如何测试它们?我们如何有选择地提供不同版本的代码??

乘坐狩猎旅行。最近发布了版本2.0。然而,苹果没有提供并排安装和运行多个版本,与微软在Internet Explorer上一直做的一样。

这里的实际含义是,我再也不能测试Safari 1.0中的工作了。怎么用?我们现在测试,不需要为浏览器的每个单独版本拥有单独的计算机吗?微软建议我们购买虚拟PC和多个Windows许可证来维护多个版本的IE(我对此有更多的想法在这里)昂贵的提议苹果没有提出任何建议。

让网络开发人员购买更多的软件和硬件只是为了测试似乎是不太可能的情况;但不知何故,我们必须测试。

版本控制

随着时间的流逝,问题会越来越严重,随着发布更多的增量更新,浏览器共享片段。在某种意义上,这不会是1998年再次与它的85个不同版本的Netscape 4,由于浏览器自动更新保持大多数用户最新。但是,并非每个用户都会保持最新。我无法计算有多少次我在自己的机器上忽略了更新唠叨消息,所以他们很难受到责备。

Firefox 1.0或1.2的早期采用者不断更新的可能性有多大?并且达到了版本1.5?可能没有我们希望的那么高。我们将继续对它们进行测试吗?我们将如何修复影响1.0和1.2的呈现问题,但不是1.5?我所知道的任何CSS黑客都无法解决此问题。

现在,让我们说清楚。自从CSS1以来,语言中内置了一个非常简单的版本控制控件。如果浏览器不能理解选择器或规则,它只是忽略了它。理论是,当浏览器为特定的CSS属性或选择器添加新的支持时,他们只是开始呈现以前一直忽略的规则。

工作进展得不太好,是吗?这种方法的一个致命缺陷是,它假定对新选择器和属性的支持从一开始就完美无缺。我需要深入到导致浏览器实现错误的问题中吗?盒模型,有人吗??

其他的,此方法中更微妙的缺陷是假设回退足够好。仅仅由于缺乏支持而不呈现规则,然而,在依赖于该规则的样式中引起不利的副作用。可能转化为站点访问者的主要可用性问题的副作用。

我可以给出的最明显的例子是在CSS3中”文本阴影财产,目前只有Safari支持。使用阴影作为轮廓,我们可以做以前不可能的事,比如在白色背景上设置白色文本。

文本阴影演示

向左,你在Safari中看到了结果;一副非常清晰的配对。向右,你几乎什么也没看到。这就是文本在其他主要浏览器中的样子,因为他们忽略了文本阴影财产。

忽略不受支持的属性是否足够好?在这种情况下,还有其他潜在的问题。点存在这种全有或全无的管理变更的方法根本无法阻止它。我们需要特定于浏览器的过滤,解释后退造成的危害大于好处的场景。

“标准就是标准——您应该能够在每个浏览器上一致地呈现相同的代码,“我听到一些哭声。“特定于浏览器的创作是死胡同。”他们有我强调的同意。如果现实世界证明是这样的话,我会喜欢的。但事实并非如此。

合法黑客使用

无论未来几年浏览器如何发展,有一件事似乎比较安全地预测——对于web标准,总是会有不同程度的支持,是否主要浏览器之间的渲染存在差异,甚至在同一浏览器的不同版本之间。

当我们发现主要的浏览器缺陷阻止我们首先采用CSS时,对黑客的合法需求就产生了;通过使用黑客,我们能够专门针对浏览器的版本,并强制它们遵守。甚至W3C CSS工作组的成员也认识到页面作者需要克服这些bug;不是吗坦泰克·埃利克谁给我们的盒模型破解,毕竟??

但是我们的CSS黑客是针对那些在不久的将来变得不那么相关的老式浏览器的;我们没有任何用于过滤浏览器当前稳定性的新机制。我们将如何处理未来的浏览器差异,考虑到潜在的可用性问题??

应对

我看到了一些方法。

  1. 仅限于那些CSS属性和选择器,您知道这些属性和选择器在所有浏览器上都能正常工作。事实上,你甚至不用等这个,你可以今天开始。当然,令人沮丧的是,除了一个浏览器外,所有的浏览器都呈现出预期的效果,但是我们已经习惯了“悬停”支持非锚定元件.所以,耐心等待,因为你需要它。
  2. 也许这甚至不是问题。如果所有浏览器都持续改进,我们再也看不到过去5年中IE停滞不前的重演,那么我们只需要耐心等待,直到我们所寻求的效果变得实际,只要运气好,时间不会很长。
  3. 我们可以发现一整套新的黑客和过滤器。随着现在越来越多的人攻击CSS,机会并不小,我们迟早能够利用其他浏览器中的其他bug,让我们自己马上回到这种状况。我想很多人宁愿我们不要再走这条路了,但迟早会不可避免的,第一批IE7和Firefox 1.0黑客会后退。
  4. 让我们想一想这里的“空中馅饼”:我们可以得到一点认可,这个问题是合法的,以及官方W3C认可的浏览器过滤方法。我怀疑浏览器制造商很清楚这是一个问题;IE团队已经给了我们一个过滤他们自己的浏览器的方法,以有条件的注释的形式,毕竟。多年来,向CSS工作组多次提出了在CSS中编写类似方法的建议,我完全有理由相信,过去至少有一个关于这个问题的正式提案,但据我所知,两者都没有发展出来。

使用此路由的危险与我们在90年底,当然。拙劣的浏览器会迫使页面作者以某种方式过滤它们。拙劣的过滤将导致浏览器彼此假装。也许这次会更好,因为基础技术已经成熟了一点。也许不会。

现实

那么,我认为向前迈进将会发生什么?很可能,所有东西都加一点。

许多人肯定会遵循阻力最小的路径,并简单地把自己限制在跨浏览器运行的代码中。其他人不会满足于现状,取而代之的是,对于针对特定浏览器的特定版本的新黑客,它们看起来又高又低。

也许,也许,我们将得到一个可靠的基于每个浏览器的过滤方法。我没有屏住呼吸,但是奇怪的事情发生了。

笔记

  1. Tan Hack或者*html bug,这是众所周知的,仅使IE在其应用的选择器中解析CSS。它将在IE7中进行修复。
  2. 这个下划线黑客使仅IE在应用该规则的规则内解析CSS。它也将固定在IE7。