代码改变世界

inline-block间隙的问题和其涉及到的问题

2011-05-31 11:28  jalen  阅读(537)  评论(0编辑  收藏  举报

基本了解:

1.inline-block(行内块元素),是inline和block的混合体是在css2.1中新增的。行内块元素(替换元素)在行框内被视为行内元素,因此根据 CSS 的空白符处理规则,
行内元素之间的空白符(空格、回车、Tab 键)应被合并为一个空格,可以理解为个缝隙实际上就是行内元素之间的空格,类似于单词之间的空格,
所以它的宽度是与字体相关的。所以字体越大缝隙越大。
2.我记得ie6.7中很多属性都是遵循的css2.0设置很早的以前的规范,而display:inline-block是css2.1新增的。所以没有这个属性,
但是ie6.7可以模拟:
          >1.模拟对象对块级元素,在模拟为行内块元素之后,IE6,7 其实还是以块元素的空白符处理规则来处理它们之间的空白符,即忽略;
          >2.模拟对象为行内元素,在模拟为行内块元素之后,IE6,7 就以行内元素的空白符处理规则来处理它们之间的空白符,
               即合并为一个空格,与CSS 的空白符处理规则恰好一致,这就是很多人在说,ie6.7下只有内联元素才支持display:inline-block.
               这只是模拟的表象,本质上应该是不支持inline-block这个属性(具体数据我也没查过,如有错误,后果自负),只是不支持,并不能说是ie6,7的bug问题
3.inline-block更多的情况下是为了触发ie的特有属性haslayout,和影响布局的计算值。
4.css渲染方式是左右到左地,如果不知道情况,你调了个属性的位置,出了问题,都不知道问题在哪地!
<!DOCTYPE html>
<html>
	<head>
  	<title> inline-block </title>
	<meta charset="utf-8" />
  	<meta name="keywords" content="" />
  	<meta name="description" content="" />
    <style>
    body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,textarea,p,blockquote,th,td,a{margin:0;padding:0;border:0 none;outline:0 none;}
    body{font:12px/1.5 Arial,sans-serif,"宋体";}
    .footerNav a{display:inline-block;background:#ff8000;width:100px;height:50px;margin-right:-0.5em;}
    .nav li{display:inline-block;*display:inline;*zoom:1;width:100px;height:50px;background:#65ca00;margin-right:-0.5em;*margin-right:0;}
    </style>
	</head>
	<body>
	    <div class="footerNav">
	        <a href="">关于我们</a>
            <a href="">关于我们</a>
            <a href="">关于我们</a>
            <a href="">关于我们</a>
            <a href="">关于我们</a>
            <a href="">关于我们</a>
	    </div>
        
        <ul class="nav">
            <li><a href="">行业新闻</a></li>
            <li><a href="">企业动态</a></li>
            <li><a href="">行业新闻</a></li>
            <li><a href="">企业动态</a></li>
            <li><a href="">行业新闻</a></li>
            <li><a href="">企业动态</a></li>
        </ul>
	</body>
</html>

解决方式:
1.所以只要设置为margin-right:-0.5em;就可以了,em是相对单位,是根据你当前容器的的字体大小来计算的,如果是12px, 0.5em = 6px 14px 0.5em =7px.
   为了方便直接0.5em就可以了,不必要用px太设定了。

2.这个空白符其实只要不换行就不会产生,但为了代码可阅读性,谁会愿意把很多标签写在同一行。就为解决这个问题?(最快的,最省事的解决方式)
3.也可以利用letter-spacing和word-spacing属性,来解决这个问题。
4.也可以用font-size:0的方式来解决。
以上方式3.4没测过,我不是搞academic,因为1 的方式最快solution,3.4只是为以后闲的时候留个脚印,继续测。

PS:以上问题的描述性,有待考证。以上只作为个人笔记~只是个人理解和部分内容css权威指南上所说,IE6,7到底支不支持inline-block,还要细挖资料。

所以有问题,或者谁更了解,希望留言讨论,但不是很深很深的讨论,太费时间!