<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>前端观察 &#187; inline-block</title>
	<atom:link href="http://www.qianduan.net/tag/inline-block/feed" rel="self" type="application/rss+xml" />
	<link>http://www.qianduan.net</link>
	<description>专注于网站前端设计与前端开发</description>
	<lastBuildDate>Wed, 08 Feb 2012 05:05:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>跨浏览器的inline-block</title>
		<link>http://www.qianduan.net/cross-browser-inline-block.html</link>
		<comments>http://www.qianduan.net/cross-browser-inline-block.html#comments</comments>
		<pubDate>Wed, 04 Mar 2009 14:51:08 +0000</pubDate>
		<dc:creator>糖伴西红柿</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[inline-block]]></category>

		<guid isPermaLink="false">http://www.qianduan.net/?p=5803</guid>
		<description><![CDATA[糖伴西红柿说：
这篇文章所讲 跨浏览器的 inline-block 也是非常使用的技术，其中牵涉到其他的技术，也需要大家有所了解。正好糖伴西红柿这两天也在看这方面的资料，提供一些资料给大家参... ]]></description>
			<content:encoded><![CDATA[<p>啊，inline-block，挺难琢磨并且迷人的声明上承诺了很多，其实提供了很少。很多次我拿到类似这样的 PSD 文件：</p>
<p><img src="http://blog.mozilla.com/webdev/files/2009/02/gallery-view.jpg" alt="" /></p>
<p>就哭了。</p>
<p>一般说来，这种类型的布局是小菜一桩。固定宽度，固定高度，向左浮动就解决了。但是，这个设计中内容的多少是可变的，这就意味着如果这些块中的一些内容比其他的多，就会破坏这个布局。</p>
<p><img src="http://blog.mozilla.com/webdev/files/2009/02/float-broken.jpg" alt="" /></p>
<p>因为第一个展示项比其他项高，第五个项目就相对第一个浮动，而不是位于它下面了。基本上我们想要一个弹性表格的布局，但是适当的，语义标记。</p>
<p>我们以一个无序列表开始这个简单的页面，并把 display 设置为 inline-block:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h4</span>&gt;</span>This is awesome<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h4</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">img</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://farm4.static.flickr.com/3623/3279671785_d1f2e665b6_s.jpg&quot;</span> <span style="color: #000066;">alt</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;lobster&quot;</span> <span style="color: #000066;">width</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;75&quot;</span> <span style="color: #000066;">height</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;75&quot;</span> <span style="color: #66cc66;">/</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
...<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">&lt;!-- li <span style="color: #00AA00;">&#123;</span>     <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">200px</span><span style="color: #00AA00;">;</span>     <span style="color: #000000; font-weight: bold;">min-height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">250px</span><span style="color: #00AA00;">;</span>     <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span>     <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> inline-<span style="color: #993333;">block</span><span style="color: #00AA00;">;</span>     <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">5px</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span> --<span style="color: #00AA00;">&gt;</span></pre></div></div>

<p>效果在 Firefox 3， Safari 3 和 opera 中看起来没问题：</p>
<p><img src="http://blog.mozilla.com/webdev/files/2009/02/step1.jpg" alt="" /></p>
<p>显然，在垂直排列上有些错误。嗯，也不算错误吧，这是正确的表现，只不过不是我们想要的效果。</p>
<p>这是因为每个 &lt;li&gt; 元素的<a href="http://dev.w3.org/csswg/css3-linebox/#baseline">基线</a>是和其父元素 &lt;ul&gt; 的基线对齐排列的。你要问啥是基线？一图顶千言那：</p>
<p><img src="http://blog.mozilla.com/webdev/files/2009/02/baseline.gif" alt="" /></p>
<p>基线就是横贯上面文本的黑线。尽量说的简单点。inline 或者 inline-block 元素默认的 <a href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align">vertical-align 值</a> 就是基线。也就是说元素基线要和她父元素的基线对齐。下面有一个示例：</p>
<p><img src="http://blog.mozilla.com/webdev/files/2009/02/baseline-inline-block.jpg" alt="" /></p>
<p>就如所看到的，每个基线都是和文本 &#8216;This is the baseline.&#8217; 的基线对齐的。文本虽然不在 &lt;li&gt; 内部，但是文本节点的父元素 &lt;ul&gt; 就指出了父元素的基线所在。</p>
<p>总之，修正方法是很简单的： vertical-align: top，这样就能得到一个看起来不错阿网格：</p>
<p><img src="http://blog.mozilla.com/webdev/files/2009/02/inline-block-2.jpg" alt="" /></p>
<p>但是在 Firefox 2, IE 6 和 7 中，依然无效：</p>
<p><img src="http://blog.mozilla.com/webdev/files/2009/02/inline-block-ff2.jpg" alt="" /></p>
<p>从 Firefox 2 入手。</p>
<p>Firefox 2 不支持 inline-block，但是它支持 Mozilla 特有的显示属性 &#8216;-moz-inline-stack&#8217;，这个属性和 inline-block 比较像。把它加在 display: inline-block 之前，FF2 会忽略 inline-block 而保留 -moz-inline-stack，因为它不认识 inline-block。支持 inline-block 的浏览器会使用 inline-block 而忽略之前的显示属性。</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">li <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">200px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">min-height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">250px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> -moz-inline-stack<span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> inline-<span style="color: #993333;">block</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">vertical-align</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>不幸的是，有点小bug：</p>
<p><img src="http://blog.mozilla.com/webdev/files/2009/02/inline-block-3.jpg" alt="" /></p>
<p>坦白地说，我不知道什么导致了这个 bug。但是有个快速的修正方法。把 &lt;li&gt; 中所有的东西用 &lt;div&gt; 包含起来。</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h4</span>&gt;</span>This is awesome<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h4</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">img</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://farm4.static.flickr.com/3623/3279671785_d1f2e665b6_s.jpg&quot;</span> <span style="color: #000066;">alt</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;lobster&quot;</span> <span style="color: #000066;">width</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;75&quot;</span> <span style="color: #000066;">height</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;75&quot;</span> <span style="color: #66cc66;">/</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span></pre></div></div>

<p>貌似	&lt;li&gt; 中的内容被&#8217;重置&#8217;并且正确显示了。</p>
<p style="color:red">2009.04.29更新：经过多方查证，嵌套div的方法可以解释为：FF对于所有的属性为stack(当然保持-moz-inline-stack)的元素，它的第一级子元素会<strong>继承该元素的宽度和高度</strong>，但是子元素的子元素就不会再继承其宽和高了。不过，其实，FF2在某种程度上可以无视了……——by 神飞</p>
<p><img src="http://blog.mozilla.com/webdev/files/2009/02/inline-block-2.jpg" alt="" /></p>
<p>现在，转到 IE 7 上来。IE 7 也不支持 inline-block，但是我们可以欺骗它以使 &lt;li&gt; 好像是 inline-block 的。怎么做呢？<a href="http://haslayout.net/haslayout">hasLayout</a>，IE 的一个带来乐趣的神奇属性。你无法在一个元素上用 hasLayout: true; 显示地设置 hasLayout，或通过其他类似的简单方法，但是可以用其他类似 zoom:1 的声明来激发它。</p>
<p>技术上来说，hasLayout 意味着，一个 hasLayout 设为 true 的元素负责渲染它自己及其子元素(把它和 min-height 和 width 联合起来，就得到了和 display:block 非常相似的效果)。这有点像神奇的精灵粉，把它洒在渲染问题上，问题就消失了。</p>
<p>当我们给 &lt;li&gt; 加上 zoom:1 和 *display:inline(<a href="http://www.ejeliot.com/blog/63">用于 IE6 和 IE7 的星号 hack</a>) 之后，在 IE7 中它们就可以像 inline-block 一样显示了：</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">li <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">200px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">min-height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">250px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> -moz-inline-stack<span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> inline-<span style="color: #993333;">block</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">vertical-align</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
    zoom<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">1</span><span style="color: #00AA00;">;</span>
    <span style="color: #00AA00;">*</span><span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">inline</span><span style="color: #00AA00;">;</span>
    <span style="color: #00AA00;">&#125;</span></pre></div></div>

<p><img src="http://blog.mozilla.com/webdev/files/2009/02/inline-block-ie7.jpg" alt="" /></p>
<p>哇！差不多了，只剩 IE 6 了：</p>
<p><img src="http://blog.mozilla.com/webdev/files/2009/02/inline-block-ie6.jpg" alt="" /></p>
<p>IE6 不支持 min-height，但是多亏它对 height 属性的不正确处理，我们可以用它来代替。把 _height(<a href="http://www.ejeliot.com/blog/63">IE6 下划线 hack</a>) 设为 250px 使所有的 &lt;li&gt; 元素高度为 250px，并且如果它们的内容大于 250px，他们会扩大来适应。其他所有的浏览器会忽略 _height。</p>
<p>现在为止，对所有的浏览器都有效了，这是最终的 CSS 和 HTML：</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">&lt;!-- li <span style="color: #00AA00;">&#123;</span>     <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">200px</span><span style="color: #00AA00;">;</span>     <span style="color: #000000; font-weight: bold;">min-height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">250px</span><span style="color: #00AA00;">;</span>     <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span>     <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> -moz-inline-stack<span style="color: #00AA00;">;</span>     <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> inline-<span style="color: #993333;">block</span><span style="color: #00AA00;">;</span>     <span style="color: #000000; font-weight: bold;">vertical-align</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">;</span>     <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>     zoom<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">1</span><span style="color: #00AA00;">;</span>     <span style="color: #00AA00;">*</span><span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">inline</span><span style="color: #00AA00;">;</span>     _height<span style="color: #00AA00;">:</span> <span style="color: #933;">250px</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span> --<span style="color: #00AA00;">&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h4</span>&gt;</span>This is awesome<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h4</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">img</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://farm4.static.flickr.com/3623/3279671785_d1f2e665b6_s.jpg&quot;</span> <span style="color: #000066;">alt</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;lobster&quot;</span> <span style="color: #000066;">width</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;75&quot;</span> <span style="color: #000066;">height</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;75&quot;</span> <span style="color: #66cc66;">/</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span></pre></div></div>

<p>糖伴西红柿说：<br />
这篇文章所讲的也是非常使用的技术，其中牵涉到其他的技术，也需要大家有所了解。正好糖伴西红柿这两天也在看这方面的资料，提供一些资料给大家参考。</p>
<p><a href="http://old9.blogsome.com/2006/04/11/onhavinglayout/">翻译：On having layout</a><br />
<a href="http://www.planabc.net/2007/03/11/display_inline-block/">display:inline-block的深入理解</a></p>
<p>原文地址: <a href="http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/">Cross-Browser Inline-Block</a><br />
译文地址：<a>跨浏览器的 inline-block</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qianduan.net/cross-browser-inline-block.html/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
	</channel>
</rss>

