Posts tagged with hacks

Yahoo UI Library: Fonts CSS

过去的一段时间里一直很在意YUI(Yahoo UI Library),为了不辜负这段时间的窥视,终于决定要投入实际的应用。

首当其冲的是CSS Fonts,提供跨浏览器(cross-browser)的文字效果控制:

  • 对于 A-grade browser 的完全支持。(关于A-grade browser的概念,看这里
  • 对于多浏览器,提供统一的“文字大小”和“文字间距”显示效果。
  • 合理的字体设定,支持跨操作系统(cross-OS)的字体选择。
  • 对”用户控制字体大小"的良好支持。(在浏览器中用ctrl+滚轮)
  • 支持"Quirks Mode" 和 "Standards Mode"(W3C上对两种模式的对比

如果你明白以上这些生涩的介绍,那么可以立马尝试一下了。如果是看的一头雾水(万分抱歉...),推荐直接看原文介绍

最后有人会说:“我引入了CSS Fonts以后,不能通过CSS校验了...”,关于这个我想说的是:“到底是机器人(Robot)重要,还是人(User)重要,各位自己斟酌了”。

CSS Mastery - 阅读笔记二

在"Styling lists and creating nav bars"章节发现一个对我来说很有用的ie bug fix:li {display:inline;}作者的注释是"Removes large gaps in IE/WIN".马上试验了一下,真的解决了一个长久困扰我的问题。

以前在做一些纵向的导航菜单的时候,经常会用到一个锚(a)的hover效果,范例可以看这里

li a {display:block;background:#000;color:#FFD800;}
li a:hover,li.here a {background:#570B06;}

这里我们把锚(a)块级化以后,在IE7.0之前的版本中,锚(a)后面会有一个空白textnode,另起一行的问题,这样便把各个li的间距加大了。我以前的fix方式,就是把html结构里li前后的空格都消灭掉,做法比较烦人...

现在好了,只要li {display:inline;}就可以了,多看书还是有益的 :)

我的页面被破坏了,我应该做什么?

Internet Explorer 7中的层叠样式表兼容性不知道怎么的就在MSDN上看见了这篇文章,都2007年了,我还是每天在网上闲逛。

在IE 7下,我的页面乱了、内容溢出了,文字重叠了...这些可能是用了IE 7以后,比较多出现的页面问题吧。不知道我的页面在IE 7下是怎么样的,应该不会有溢出的问题把。(希望)顺便推荐一个网站,可以给你返回各种浏览器浏览你网站的效果图片。(Test your web design in different browsers

继续话题,文章上提到了几点引起这些浏览的问题关键:

  1. 处理overflow:visible的默认行为

    设置了默认的高度和宽度,在IE 6的年代,内容如果超出范围,高度将会自适应的变化(好似很智能),但是在IE 7下就会有溢出了,如果你必须要制定一个最小的高度或者宽度的话,推荐使用min-height和min-width
  2. 由于CSS hacks的改进而导致的错误页面(IE 7对于CSS支持的改进)

    一些老的CSS hacks写法,比如用html > bodyhead + bodyhead:first-child + body等来区别IE和其他现代浏览器,因为IE 7已经支持以上CSS声明,所以也失效了,必须注意。

关于CSS hacks,可以看看以前的这两篇文章:

CSS hacks

一些css hacks,主要是跨浏览器的兼容。(IE 7 和 Opera至今还没用过,购入新机器的计划又推后了...)有时候我们想针对同一个元素在不同的浏览器使用不同的样式定义,通常都是用来解决一些浏览器存在的bug.

  • IE 6 及旧版本 * html {}
  • IE 7 用 *:first-child+html {}
  • IE 7 和 modern browsers html>body {}
  • modern browsers (不包括 IE 7) html>/**/body {}
  • Opera 9 及旧版本 html:first-child {}

比如现在有一个ID为wrapper的元素,我们想在IE 6以及以前的IE版本中下显示1px的红色边框,在IE 7里显示1px的蓝色边框,在modern browsers下显示2px的绿色边框。

#wrapper {background-color:#eee;width:990px;}
* html {border:1px solid red;} //IE 6以及以前的IE版本
*:first-child+html {border:1px solid blue;} //IE 7
html>/**/body {border:2px solid green;} //标准浏览器

还有一种IE注释方式,可以看这里IE条件注释方式

IE条件注释方式

由于本站的天气预报的图片是png格式的,png在IE7.0之前的版本里不会显示透明,所以只能加了一个js来实现png透明,于是就用到了IE条件注释。(具体可以看本页面源代码 ;))

条件注释只能在windows Internet Explorer(以下简称IE)下使用,因此我们可以通过条件注释来为IE添加特别的指令。

<!--[if IE]>这是Internet Explorer< ![endif]-->
<!--[if IE 5]>这是Internet Explorer 5< ![endif]-->

<!--[if IE 7]>这是Internet Explorer 7< ![endif]-->
<!--[if gte IE 5]>这是Internet Explorer 5 或者更高< ![endif]-->
<!--[if lt IE 6]>这是版小于6的Internet Explorer< ![endif]-->
<!--[if lte IE 5.5]>这是Internet Explorer 5.5或更低< ![endif]-->

注意两个特殊的语法:
gt: 大于
lte: 小于或等于
!IE 感叹号的使用
 1