IE6\7bug之 inline元素text-indent导致元素本身位置偏移

bug描述:IE6\7中对inline元素(本身就是inline元素或者通过设置display为inline的block元素)应用text-indent,text-indent会传递到父元素,导致该元素本身位置偏移

应用场景:在制作一组精美的横排按钮时,我们通常用float:left或者display:inline-block;

*display:inline;*zoom:1;来让一组按钮横排显示,为了按钮的美观我们需要用设计精美的ico图标代替按钮上的文字,于是又设置text-indent来把按钮上的文字推出按钮之外,在IE6\7下,当

*display:inline;*zoom:1遇到text-indent时,text-indent会作用于按钮本身。

情景再现:

我们需要这样一组横排显示的按钮

代码如下:

 1 <style type="text/css">
 2 .demo {
 3     width: 100%;
 4     height: 50px;
 5     margin: 10px 0;
 6     background: #9C9; 
 7 }
 8 .demo div {
 9     background: #09F;
10     width: 60px;
11     height: 30px;
12     display: inline-block;
13     *display:inline;
14     *zoom:1;
15     white-space: nowrap;
16     margin-right:1px;
17 }
18 
19 </style>
20 
21 <div class="demo demo1">
22   <div>按钮1</div><div>按钮2</div><div>按钮3</div>
23 </div>

按钮文字太丑,于是我们要把文字隐藏起来然后用背景图片,利用text-indent把文字推出按钮范围之外,代码如下:

 1 <style type="text/css">
 2 /*接上面样式*/
 3 .demo2 div {
 4     text-indent: 50px;
 5 }
 6 </style>
 7 
 8 <div class="demo demo2">
 9   <div>按钮1</div><div>按钮2</div><div>按钮3</div>
10 </div>

把文字推出按钮范围之外我们预期的效果是这样的:

然而在IE6\7下我们看到的确实这样子的:

显然,text-indent也作用于按钮本身了

bug修复:

我们利用text-inden是为了隐藏按钮上的文字,不设置text-indent通过其他方式同样可以达到这个目的,设置该按钮的font-size和line-height为0,这样按钮上的文字同样也能被隐藏

 1 <style type="text/css">
 2 /*接上面样式*/
 3 .demo3 div {
 4     font-size: 0;
 5     line-height: 0;
 6 }
 7 </style>
 8 <div class="demo demo3">
 9   <div>按钮1</div><div>按钮2</div><div>按钮3</div>
10 </div>

效果如下:

另外一种方法是在按钮元素前面添加一个空格符&nbsp;

1 <div class="demo demo2">
2   &nbsp;<div>按钮1</div><div>按钮2</div><div>按钮3</div>
3 </div>

这种方法不够灵活

 

 

 

posted @ 2014-05-21 02:21  倒霉熊  阅读(379)  评论(0编辑  收藏  举报