webrebuild.org第四届年会——金秋四城联动

display:inline-block 另解

inline-block是个好东西,谁用都知道。
兼容是个问题(仅Opera、Safari、chrome、firefox3.x能完美呈现)

IE下可以通过触发hasLayout来模拟inline-block

纠正我一直以来的认知错误“ie不支持inline-block”
IE5.5就已经支持inline-block了,可参考display Property的Remarks部分;但IE7及以下版本下给block元素设定inline-block需要使用*display:inline;*zoom:1;来修正。

麻烦的是firefox2.x
虽然有-moz-inline-block-moz-inline-stack来模拟,但都或多或少有些问题

firefox2.x中使用-moz-inline-stack使用可能遇到的问题:(垂直居中)

可以使用-moz-box-align -moz-box-pack这2个firefox私类来稍作修正,但始终无法完美模拟。

在一次偶然中,我发现firefox还提供有另一个私有属性display:-moz-box;,它会根据-moz-box-orient的值来水平或垂直显示其子元素。
因此给-moz-inline-block元素的父级定义display:-moz-box;就可完美模拟inline-block了!(-moz-box-orient默认值为水平显示)
但因为-moz-box的定义,这个方法不适合有其他类型子元素的容器使用。

可点此查看示例

主要样式:

css
.link-ib,.link-ib span {
	display:inline-block;
	height:40px;
	line-height:40px;
	background:#FFCB06 url(btn.png) no-repeat;
	*display:inline;	/** 修正ie 无法给block元素设定inline-block **/
	*zoom:1;	/** 触发ie中inline元素的hasLayout **/
}
.link-ib {display:-moz-box;} /** for firefox2.x **/
.link-ib span {display:-moz-inline-block;} /** for firefox2.x **/
	.link-ib {
		padding-left:20px;
		color:#654005;
		font-size:16px;
		text-decoration:none;
		background-position:0 0;
	}
	.link-ib span {
		cursor:pointer;	/** 修正IE **/
		padding-right:20px;
		background-position:100% 0;
	}
	.link-ib:hover {
		color:#000;
		background-position:0 -40px;
	}
	.link-ib:hover span {
		background-position:100% -40px;
	}

相关阅读

  1. 小技巧:带分隔线左右布局的实现
  2. 合理隐藏文字
  3. 使用css给图片添加阴影
  4. display:inline-block
  5. HTML默认样式
  6. 纯CSS的图片展示效果

7 条留言

2010年1月21日 20:31:15

顶!非常想知道你是怎么发现这个属性的

[回复]

vicZen 回复:
2010年1月22日 10:48:10

当时是十万火急,我放弃了使用-moz-box-pack,因为bug太多;但-moz-inline-block却又像极了block,于是我想给a.link-ib设置一个属性来inline,于是疯狂的尝试moz私类,而且本命年似乎运气特别好,酱紫- -’

[回复]

vicZen 回复:
2010年1月22日 10:49:56

moz私类可以在Mozilla CSS Extensions查看

[回复]

2010年1月22日 11:11:08

你好。昨天还用到了这个属性,正为兼容的问题发愁,谢谢分享!
另外,秋寒博客想和贵博建立友情链接,贵博的链接我已经加上去了。请问贵博建立友情链接有何要求?

同时我在留言的时候发现一个问题,我用IE6,留言的输入框右边似乎被什么东西给档住了,我输入的留言如果不
自己按回车,就看不到了。
我的环境:IE6 SP2, WIN 2003

[回复]

2010年1月22日 11:12:17

我用谷歌浏览器看了下,是好的。
可能对IE6不兼容吧。

对了,我的分辨率是:1024*768

[回复]

vicZen 回复:
2010年1月22日 11:20:15

连接做好了
博客的兼容懒得去管了,有时间我再看,还没用ie看过自己的blog – -’
thx

[回复]