<?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>Bolo的博客 &#187; Opera</title>
	<atom:link href="http://blog.imbolo.com/tag/opera/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.imbolo.com</link>
	<description>一个设计爱好者杂七杂八的博客</description>
	<lastBuildDate>Wed, 01 Sep 2010 04:34:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Firefox Input Button Line-Height Bug</title>
		<link>http://blog.imbolo.com/firefox-input-button-line-height-bug/</link>
		<comments>http://blog.imbolo.com/firefox-input-button-line-height-bug/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 07:33:56 +0000</pubDate>
		<dc:creator>bolo</dc:creator>
				<category><![CDATA[Develop]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://blog.imbolo.com/?p=1705</guid>
		<description><![CDATA[最近国外有开发者发现Firefox和Opera的一个BUG：无法改变按钮里文字的行高（包括input type="sumbit"和HTML的button标签）。]]></description>
			<content:encoded><![CDATA[<p>最近国外有开发者发现Firefox和Opera的一个BUG：无法改变按钮里文字的行高（包括input type=&#8221;sumbit&#8221;和HTML的button标签）。举个例子，对一个按钮使用以下样式：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="css" style="font-family:monospace;">input<span style="color: #cc00cc;">#button</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">2px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#06f</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#06f</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#6cf</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">font</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">bold</span> <span style="color: #933;">12px</span> Arial<span style="color: #00AA00;">,</span> Helvetica<span style="color: #00AA00;">,</span> <span style="color: #993333;">sans-serif</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">50px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>按照常理，这个样式将为按钮设置50px的行高，并使文本垂直居中。因为这个样式在Chrome、Safari和IE8里的表现都一致，唯独在Firefox和Opera里并没有表现出50px的行高，具体效果如下图。<span id="more-1705"></span></p>
<p><img src="http://i1001.photobucket.com/albums/af131/bolo1988/button-sizes-by-browser.png" alt="button-sizes-by-browser" /></p>
<h3>是什么原因引起了这个问题？</h3>
<p>在Firebug的帮助下，该开发人员发现虽然自己已经把行高设为50px，但Firefox依然使用15px的行高。</p>
<p><img src="http://i1001.photobucket.com/albums/af131/bolo1988/firebug-firefox-line-height.png" alt="firebug-firefox-line-height" /></p>
<p>该开发人员认为是Firefox强行限制了按钮文本的行高，于是编写了以下的CSS用于验证。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="css" style="font-family:monospace;">ibutton<span style="color: #00AA00;">,</span> input<span style="color: #00AA00;">&#91;</span>type<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;reset&quot;</span><span style="color: #00AA00;">&#93;</span><span style="color: #00AA00;">,</span> input<span style="color: #00AA00;">&#91;</span>type<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;button&quot;</span><span style="color: #00AA00;">&#93;</span><span style="color: #00AA00;">,</span> input<span style="color: #00AA00;">&#91;</span>type<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span><span style="color: #00AA00;">&#93;</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span><span style="color: #993333;">normal</span> !important<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>该开发人员发现，Firefox会私自把按钮内文本的行高设置为normal，这个值在Firefox里默认为15px，但各个浏览器对normal的值并没有一个统一的标准。最后这个开发人员放弃了通过行高把按钮撑开并使文本居中的方法，而采用了以下的样式，解决了Firefox的按钮行高问题。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="css" style="font-family:monospace;">input<span style="color: #cc00cc;">#button</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">2px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#06f</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#06f</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#6cf</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">font</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">bold</span> <span style="color: #933;">12px</span> Arial<span style="color: #00AA00;">,</span> Helvetica<span style="color: #00AA00;">,</span> <span style="color: #993333;">sans-serif</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">18px</span> <span style="color: #933;">6px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>这并不是最好的办法，但也算是达到了所需的效果。</p>
<p>本文案例出自<a href="http://www.cssnewbie.com/input-button-line-height-bug/" rel="external nofollow">The Firefox Input Button Line-Height Bug</a></p>
<h3>后记</h3>
<p>我认为这个开发人员似乎并没有考虑到令一个CSS属性，而是抱着“完成了就好”的心态去解决问题。你认为这个所谓的BUG有更好的办法解决吗？欢迎讨论一下。</p>
<p  class="related_post_title">Related Posts</p><ul class="related_post"><li><a href="http://blog.imbolo.com/cross-browser-css-mutiple-background/" title="CSS：跨浏览器复合背景">CSS：跨浏览器复合背景</a></li><li><a href="http://blog.imbolo.com/oprea-version/" title="Oprea的怪异识别码">Oprea的怪异识别码</a></li><li><a href="http://blog.imbolo.com/css-turn-off-webkit-browsers-input-highlight-and-textarea-resize/" title="CSS 屏蔽 Webkit 浏览器 input 高亮和 textarea 缩放">CSS 屏蔽 Webkit 浏览器 input 高亮和 textarea 缩放</a></li><li><a href="http://blog.imbolo.com/jquery-selectors/" title="jQuery选择器详解（一）">jQuery选择器详解（一）</a></li><li><a href="http://blog.imbolo.com/customizing-the-new-wordpress-3-0-custom-menus-adding-different-icons-to-each-link/" title="为 WordPress 3.0 的自定义菜单链接添加栏目图标">为 WordPress 3.0 的自定义菜单链接添加栏目图标</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.imbolo.com/firefox-input-button-line-height-bug/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Oprea的怪异识别码</title>
		<link>http://blog.imbolo.com/oprea-version/</link>
		<comments>http://blog.imbolo.com/oprea-version/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 06:00:16 +0000</pubDate>
		<dc:creator>bolo</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://blog.imbolo.com/?p=1485</guid>
		<description><![CDATA[我打算重新设计一个博客引导页，在里面设计一个小彩蛋。通过PHP识别访客所用的浏览器，并输出不同的欢迎语。省时起见，在网上搜索了一段代码：

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if&#40;strpos&#40;$_SERVER&#91;&#34;HTTP_USER_AGENT&#34;&#93;,&#34;MSIE 8.0&#34;&#41;&#41;
echo &#34;MSIE 8&#34;;
else if&#40;strpos&#40;$_SERVER&#91;&#34;HTTP_USER_AGENT&#34;&#93;,&#34;MSIE 7.0&#34;&#41;&#41;
echo &#34;MSIE 7&#34;;
else if&#40;strpos&#40;$_SERVER&#91;&#34;HTTP_USER_AGENT&#34;&#93;,&#34;MSIE 6.0&#34;&#41;&#41;
echo &#34;MSIE 6&#34;;
else if&#40;strpos&#40;$_SERVER&#91;&#34;HTTP_USER_AGENT&#34;&#93;,&#34;Firefox/3&#34;&#41;&#41;
echo &#34;Firefox 3&#34;;
else if&#40;strpos&#40;$_SERVER&#91;&#34;HTTP_USER_AGENT&#34;&#93;,&#34;Firefox/2&#34;&#41;&#41;
echo &#34;Firefox 2&#34;;
else if&#40;strpos&#40;$_SERVER&#91;&#34;HTTP_USER_AGENT&#34;&#93;,&#34;Chrome&#34;&#41;&#41;
echo &#34;Google Chrome&#34;;
else if&#40;strpos&#40;$_SERVER&#91;&#34;HTTP_USER_AGENT&#34;&#93;,&#34;Safari&#34;&#41;&#41;
echo &#34;Safari&#34;;
else if&#40;strpos&#40;$_SERVER&#91;&#34;HTTP_USER_AGENT&#34;&#93;,&#34;Opera&#34;&#41;&#41;
echo &#34;Opera&#34;;
else echo $_SERVER&#91;&#34;HTTP_USER_AGENT&#34;&#93;;


这段代码的意思是根据浏览器识别码来控制输出的内容，在IE、Firefox，甚至Oprea9里都测试正常，可是用Opera10测试时却返回了Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.2.15 Version/10.00也就是浏览器的原始识别码(其实这段代码可以在Opera地址栏里输入“opera:about”看到)。换句话说，上面那段程序不能正确检测出Opera10。
Opera10有个很奇怪的地方，大家留意一下返回的代码，会发现Opera是9.80，但Version却是10.00。
这里面有个小故事：
Opera 的工程师在测试中发现，Opera 10 Alpha 在很多老网站上的运作很不正常。原来，有很多网站使用了“浏览器嗅探”技术，也就是说网站会针对不同的浏览器提供不同的内容或功能。然而不幸的是，这些网站无法识别两位数的浏览器版本号，于是 Opera 就成了首当其冲的受害者——它们把 Opera 10.0 误认为是 Opera 1.0，并因此向 Opera 10 提供不完整的功能，甚至有些网站干脆拒绝 Opera 10 的访问。
这当然是 Opera 不愿意看到的。于是，Opera 的工程师们决定，将用户代理信息中的版本号定格在 9.8，并另外启用 [...]]]></description>
			<content:encoded><![CDATA[<p>我打算重新设计一个博客引导页，在里面设计一个小彩蛋。通过PHP识别访客所用的浏览器，并输出不同的欢迎语。省时起见，在网上搜索了一段代码：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;HTTP_USER_AGENT&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;MSIE 8.0&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;MSIE 8&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;HTTP_USER_AGENT&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;MSIE 7.0&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;MSIE 7&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;HTTP_USER_AGENT&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;MSIE 6.0&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;MSIE 6&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;HTTP_USER_AGENT&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Firefox/3&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Firefox 3&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;HTTP_USER_AGENT&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Firefox/2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Firefox 2&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;HTTP_USER_AGENT&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Chrome&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Google Chrome&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;HTTP_USER_AGENT&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Safari&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Safari&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;HTTP_USER_AGENT&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Opera&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Opera&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;HTTP_USER_AGENT&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><span id="more-1485"></span><br />
这段代码的意思是根据浏览器识别码来控制输出的内容，在IE、Firefox，甚至Oprea9里都测试正常，可是用Opera10测试时却返回了<em>Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.2.15 Version/10.00</em>也就是浏览器的原始识别码(其实这段代码可以在Opera地址栏里输入“opera:about”看到)。换句话说，上面那段程序不能正确检测出Opera10。<br />
Opera10有个很奇怪的地方，大家留意一下返回的代码，会发现Opera是9.80，但Version却是10.00。<br />
这里面有个小故事：</p>
<blockquote><p>Opera 的工程师在测试中发现，Opera 10 Alpha 在很多老网站上的运作很不正常。原来，有很多网站使用了“浏览器嗅探”技术，也就是说网站会针对不同的浏览器提供不同的内容或功能。然而不幸的是，这些网站无法识别两位数的浏览器版本号，于是 Opera 就成了首当其冲的受害者——它们把 Opera 10.0 误认为是 Opera 1.0，并因此向 Opera 10 提供不完整的功能，甚至有些网站干脆拒绝 Opera 10 的访问。<br />
这当然是 Opera 不愿意看到的。于是，Opera 的工程师们决定，将用户代理信息中的版本号定格在 9.8，并另外启用 Version 字段来标识真正的版本号。当然他们也考虑过选用 9.99 这个最接近 10 的可用作版本号的数字，不过出于预留空间的考虑，最终还是决定采用 9.8 作为象征性的版本号——它正好介于（Opera 9 的最后一个版本号）9.6 与 10 之间。</p></blockquote>
<p>于是我开始修改程序，却发现用Opera/9.80也无法识别出Opera10.<br />
经过几次修改和测试，我最后采用了以下方法识别Opera10。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;HTTP_USER_AGENT&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Version/10.00&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Opera 10&quot;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>可是这个方法有一个极大的弊端，就是Opera10升级到10.XX就不能使用了。谁能告诉我在PHP里，应该怎么识别Opera10呢？</p>
<p  class="related_post_title">Related Posts</p><ul class="related_post"><li><a href="http://blog.imbolo.com/firefox-input-button-line-height-bug/" title="Firefox Input Button Line-Height Bug">Firefox Input Button Line-Height Bug</a></li><li><a href="http://blog.imbolo.com/cross-browser-css-mutiple-background/" title="CSS：跨浏览器复合背景">CSS：跨浏览器复合背景</a></li><li><a href="http://blog.imbolo.com/ie-test-tool-microsoft-expression-web-3-superpreview/" title="IE测试工具：Web 3 SuperPreview">IE测试工具：Web 3 SuperPreview</a></li><li><a href="http://blog.imbolo.com/maxthon-browser/" title="情从马桶中来">情从马桶中来</a></li><li><a href="http://blog.imbolo.com/try-the-3d-web-browser/" title="尝尝新吧，3D立体网页浏览器！">尝尝新吧，3D立体网页浏览器！</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.imbolo.com/oprea-version/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>
