<?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>小强ORG</title>
	<atom:link href="http://www.xiaoqiang.org/feed" rel="self" type="application/rss+xml" />
	<link>http://www.xiaoqiang.org</link>
	<description>关注web前端开发&#124;web性能&#124;NodeJs&#124;用户体验&#124;交互设计</description>
	<lastBuildDate>Mon, 30 Jan 2012 09:25:15 +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>debug&#8211;在线代码调试工具</title>
		<link>http://www.xiaoqiang.org/mobile-web/debug-online.html</link>
		<comments>http://www.xiaoqiang.org/mobile-web/debug-online.html#comments</comments>
		<pubDate>Fri, 23 Dec 2011 03:07:05 +0000</pubDate>
		<dc:creator>小强</dc:creator>
				<category><![CDATA[Mobile Web]]></category>
		<category><![CDATA[codebox]]></category>
		<category><![CDATA[debug]]></category>

		<guid isPermaLink="false">http://www.xiaoqiang.org/?p=589</guid>
		<description><![CDATA[工具地址:http://debug.cnodejs.net 这个工具主要是为群里面同学们的提问发代码用的，webapp开发可以方便js调试。 主要功能点： 分享代码，仅支持html,javascript,css； 代码高亮 生成可运行的html文件 支持手机访问运行页面，生成二维码文件地址； 支持手机访问的console信息打印在pc的控制台,需要添加一段js，并且调用wa.log() 项目地址：https://github.com/xiaoqiang/debug]]></description>
			<content:encoded><![CDATA[<p>工具地址:<a href="http://debug.cnodejs.net/" title="在线debug工具" target="_blank">http://debug.cnodejs.net</a><br />
这个工具主要是为群里面同学们的提问发代码用的，webapp开发可以方便js调试。<br />
<strong>主要功能点</strong>：</p>
<ul>
<li>分享代码，仅支持html,javascript,css；</li>
<li>代码高亮</li>
<li>
生成可运行的html文件</li>
<li>支持手机访问运行页面，生成二维码文件地址；</li>
<li>支持手机访问的console信息打印在pc的控制台,需要添加一段js，并且调用wa.log()</li>
</ul>
<p>项目地址：<a href="https://github.com/xiaoqiang/debug" title="https://github.com/xiaoqiang/debug" target="_blank">https://github.com/xiaoqiang/debug</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaoqiang.org/mobile-web/debug-online.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>web app/mobile web开发入门</title>
		<link>http://www.xiaoqiang.org/mobile-web/webapp-getting-started.html</link>
		<comments>http://www.xiaoqiang.org/mobile-web/webapp-getting-started.html#comments</comments>
		<pubDate>Fri, 09 Dec 2011 08:26:18 +0000</pubDate>
		<dc:creator>小强</dc:creator>
				<category><![CDATA[Mobile Web]]></category>
		<category><![CDATA[webapp]]></category>

		<guid isPermaLink="false">http://www.xiaoqiang.org/?p=542</guid>
		<description><![CDATA[欢迎加入webapp前端开发QQ群：115187143 基础知识篇&#8212;&#8211;摘自：webkit webApp 开发技术要点总结 1. viewport： 也就是可视区域。对于桌面浏览器，我们都很清楚viewport是什么，就是出去了所有工具栏、状态栏、滚动条等等之后用于看网页的区域，这是真正有效的区域。由于移动设备屏幕宽度不同于传统web,因此我们需要改变viewport; 实际上我们可以操作的属性有4 个： 那么到底这些设置如何让Safari 知道？其实很简单，就一个meta，形如： 在设置了initial-scale=1 之后，我们终于可以以1:1 的比例进行页面设计了。关于viewport，还有一个很重要的概念是：iphone 的safari 浏览器完全没有滚动条，而且不是简单的“隐藏滚动条”，是根本没有这个功能。iphone 的safari 浏览器实际上从一开始就完整显示了这个网页，然后用viewport 查看其中的一部分。当你用手指拖动时，其实拖的不是页面，而是viewport。浏览器行为的改变不止是滚动条，交互事件也跟普通桌面不一样。(请参考：指尖的下JS 系列文章) 2. link: 3. 事件 ： (请参考：指尖的下JS 系列文章) 4. 屏幕旋转事件：onorientationchange 添加屏幕旋转事件侦听，可随时发现屏幕旋转状态（左旋、右旋还是没旋）。例子： 5. 隐藏地址栏 &#38; 处理事件的时候，防止滚动条出现： 6. 双手指滑动事件： 7. 判断是否为iPhone： 8. localStorage: &#8230; <a href="http://www.xiaoqiang.org/mobile-web/webapp-getting-started.html">更多内容 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>欢迎加入webapp前端开发QQ群：115187143</p>
<h2>基础知识篇&#8212;&#8211;摘自：<a href="http://www.cnblogs.com/pifoo/archive/2011/05/28/webkit-webapp.html" title="webkit webApp 开发技术要点总结" target="_blank">webkit webApp 开发技术要点总结</a></h2>
<p>1. viewport：<br />
也就是可视区域。对于桌面浏览器，我们都很清楚viewport是什么，就是出去了所有工具栏、状态栏、滚动条等等之后用于看网页的区域，这是真正有效的区域。由于移动设备屏幕宽度不同于传统web,因此我们需要改变viewport;<br />
实际上我们可以操作的属性有4 个：</p>
<pre class="brush: jscript; title: ; notranslate">
width -             //  viewport 的宽度 （范围从200 到10,000，默认为980 像素）
height -            //  viewport 的高度 （范围从223 到10,000）
initial-scale -     //  初始的缩放比例 （范围从&gt;0 到10）
minimum-scale -     //  允许用户缩放到的最小比例
maximum-scale -     //  允许用户缩放到的最大比例
user-scalable -     //  用户是否可以手动缩 (no,yes)
</pre>
<p>那么到底这些设置如何让Safari 知道？其实很简单，就一个meta，形如：</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;   //编码
&lt;meta id=&quot;viewport&quot; name=&quot;viewport&quot; content=&quot;width=320; initial-scale=1.0;maximum-scale=1.0; user-scalable=no;&quot;/&gt;
&lt;meta name=&quot;apple-mobile-web-app-capable&quot; content=&quot;yes&quot; /&gt;  // 离线应用的另一个技巧
&lt;meta name=&quot;apple-mobile-web-app-status-bar-style&quot; content=&quot;black&quot; /&gt;  // 隐藏状态栏
&lt;meta content=&quot;black&quot; name=&quot;apple-mobile-web-app-status-bar-style&quot; /&gt; //指定的iphone中safari顶端的状态条的样式
&lt;meta content=&quot;telephone=no&quot; name=&quot;format-detection&quot; /&gt;       //告诉设备忽略将页面中的数字识别为电话号码
&lt;meta name=&quot;Author&quot; contect=&quot;Mr.He&quot;/ &gt;
</pre>
<p>在设置了initial-scale=1 之后，我们终于可以以1:1 的比例进行页面设计了。关于viewport，还有一个很重要的概念是：iphone 的safari 浏览器完全没有滚动条，而且不是简单的“隐藏滚动条”，是根本没有这个功能。iphone 的safari 浏览器实际上从一开始就完整显示了这个网页，然后用viewport 查看其中的一部分。当你用手指拖动时，其实拖的不是页面，而是viewport。浏览器行为的改变不止是滚动条，交互事件也跟普通桌面不一样。(请参考：<a href="http://www.cnblogs.com/pifoo/archive/2011/05/23/webkit-touch-event-1.html" target="_blank" title="指尖的下JS">指尖的下JS</a> 系列文章)<br />
<span id="more-542"></span><br />
2. link:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;link rel=&quot;apple-touch-startup-image&quot; href=&quot;startup.png&quot; /&gt; // 设置开始页面图片
&lt;link rel=&quot;apple-touch-icon&quot; href=&quot;iphon_tetris_icon.png&quot;/&gt; // 在设置书签的时候可以显示好看的图标
&lt;link rel=&quot;stylesheet&quot; media=&quot;all and (orientation:portrait)&quot; href=&quot;portrait.css&quot;&gt;    // 肖像模式样式
&lt;link rel=&quot;stylesheet&quot; media=&quot;all and (orientation:landscape)&quot; href=&quot;landscape.css&quot;   // 风景模式样式

//竖屏时使用的样式
&lt;style media=&quot;all and (orientation:portrait)&quot; type=&quot;text/css&quot;&gt;
#landscape { display: none; }
&lt;/style&gt;

//横屏时使用的样式
&lt;style media=&quot;all and (orientation:landscape)&quot; type=&quot;text/css&quot;&gt;
#portrait { display: none; }
&lt;/style&gt;
</pre>
<p>3. 事件 ： (请参考：<a href="http://www.cnblogs.com/pifoo/archive/2011/05/23/webkit-touch-event-1.html" target="_blank" title="指尖的下JS">指尖的下JS</a> 系列文章)</p>
<pre class="brush: jscript; title: ; notranslate">
// 手势事件
touchstart            //当手指接触屏幕时触发
touchmove           //当已经接触屏幕的手指开始移动后触发
touchend             //当手指离开屏幕时触发
touchcancel

// 触摸事件
gesturestart          //当两个手指接触屏幕时触发
gesturechange      //当两个手指接触屏幕后开始移动时触发
gestureend

// 屏幕旋转事件
onorientationchange     

// 检测触摸屏幕的手指何时改变方向
orientationchange       

// touch事件支持的相关属性
touches
targetTouches
changedTouches
clientX　　　　// X coordinate of touch relative to the viewport (excludes scroll offset)
clientY　　　　// Y coordinate of touch relative to the viewport (excludes scroll offset)
screenX　　　 // Relative to the screen
screenY 　　  // Relative to the screen
pageX　　 　　// Relative to the full page (includes scrolling)
pageY　　　　 // Relative to the full page (includes scrolling)
target　　　　 // Node the touch event originated from
identifier　　   // An identifying number, unique to each touch event
</pre>
<p>4. 屏幕旋转事件：onorientationchange</p>
<p>添加屏幕旋转事件侦听，可随时发现屏幕旋转状态（左旋、右旋还是没旋）。例子：</p>
<pre class="brush: jscript; title: ; notranslate">
// 判断屏幕是否旋转
function orientationChange() {
    switch(window.orientation) {
    　　case 0:
            alert(&quot;肖像模式 0,screen-width: &quot; + screen.width + &quot;; screen-height:&quot; + screen.height);
            break;
    　　case -90:
            alert(&quot;左旋 -90,screen-width: &quot; + screen.width + &quot;; screen-height:&quot; + screen.height);
            break;
    　　case 90:
            alert(&quot;右旋 90,screen-width: &quot; + screen.width + &quot;; screen-height:&quot; + screen.height);
            break;
    　　case 180:
        　　alert(&quot;风景模式 180,screen-width: &quot; + screen.width + &quot;; screen-height:&quot; + screen.height);
        　　break;
    };&lt;br&gt;};
// 添加事件监听
addEventListener('load', function(){
    orientationChange();
    window.onorientationchange = orientationChange;
});
</pre>
<p>5. 隐藏地址栏 &amp; 处理事件的时候，防止滚动条出现：</p>
<pre class="brush: jscript; title: ; notranslate">
// 隐藏地址栏  &amp; 处理事件的时候 ，防止滚动条出现
addEventListener('load', function(){
        setTimeout(function(){ window.scrollTo(0, 1); }, 100);
});
</pre>
<p>6. 双手指滑动事件：</p>
<pre class="brush: jscript; title: ; notranslate">
// 双手指滑动事件
addEventListener('load',　　function(){ window.onmousewheel = twoFingerScroll;},
     false              // 兼容各浏览器，表示在冒泡阶段调用事件处理程序 (true 捕获阶段)
);
function twoFingerScroll(ev) {
    var delta =ev.wheelDelta/120;              //对 delta 值进行判断(比如正负) ，而后执行相应操作
    return true;
};
</pre>
<p>7. 判断是否为iPhone：</p>
<pre class="brush: jscript; title: ; notranslate">
// 判断是否为 iPhone ：
function isAppleMobile() {
    return (navigator.platform.indexOf('iPad') != -1);
};
</pre>
<p>8. localStorage:</p>
<p>例子 ：（注意数据名称 n 要用引号引起来）</p>
<pre class="brush: jscript; title: ; notranslate">
var v = localStorage.getItem('n') ? localStorage.getItem('n') : &quot;&quot;;   // 如果名称是  n 的数据存在 ，则将其读出 ，赋予变量  v  。
localStorage.setItem('n', v);                                           // 写入名称为 n、值为  v  的数据
localStorage.removeItem('n');                                           // 删除名称为  n  的数据
</pre>
<p>9. 使用特殊链接：</p>
<p>如果你关闭自动识别后 ，又希望某些电话号码能够链接到 iPhone 的拨号功能 ，那么</p>
<p>可以通过这样来声明电话链接 ,</p>
<pre class="brush: xml; title: ; notranslate">
&lt;a href=&quot;tel:12345654321&quot;&gt;打电话给我&lt;/a&gt;
&lt;a href=&quot;sms:12345654321&quot;&gt;发短信&lt;/a&gt;
或用于单元格：
&lt;td onclick=&quot;location.href='tel:122'&quot;&gt;
</pre>
<p>10. 自动大写与自动修正</p>
<p>要关闭这两项功能，可以通过autocapitalize 与autocorrect 这两个选项：</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;text&quot; autocapitalize=&quot;off&quot; autocorrect=&quot;off&quot; /&gt;
</pre>
<p>11. WebKit CSS:</p>
<p>①“盒模型”的具体描述性质的包围盒块内容，包括边界，填充等等。</p>
<pre class="brush: css; title: ; notranslate">
-webkit-border-bottom-left-radius: radius;
-webkit-border-top-left-radius: horizontal_radius vertical_radius;
-webkit-border-radius: radius;      //容器圆角
-webkit-box-sizing: sizing_model; 边框常量值：border-box/content-box
-webkit-box-shadow: hoff voff blur color; //容器阴影（参数分别为：水平X 方向偏移量；垂直Y 方向偏移量；高斯模糊半径值；阴影颜色值）
-webkit-margin-bottom-collapse: collapse_behavior; 常量值：collapse/discard/separate
-webkit-margin-start: width;
-webkit-padding-start: width;
-webkit-border-image: url(borderimg.gif) 25 25 25 25 round/stretch round/stretch;
-webkit-appearance: push-button;   //内置的CSS 表现，暂时只支持push-button
</pre>
<p>②“视觉格式化模型”描述性质，确定了位置和大小的块元素。</p>
<pre class="brush: css; title: ; notranslate">
direction: rtl
unicode-bidi: bidi-override; 常量：bidi-override/embed/normal
</pre>
<p>③“视觉效果”描述属性，调整的视觉效果块内容，包括溢出行为，调整行为，能见度，</p>
<p>动画，变换，和过渡。</p>
<pre class="brush: css; title: ; notranslate">
clip: rect(10px, 5px, 10px, 5px)
resize: auto; 常量：auto/both/horizontal/none/vertical
visibility: visible; 常量: collapse/hidden/visible
-webkit-transition: opacity 1s linear; 动画效果 ease/linear/ease-in/ease-out/ease-in-out
-webkit-backface-visibility: visibler; 常量：visible(默认值)/hidden
-webkit-box-reflect: right 1px; 镜向反转
-webkit-box-reflect: below 4px -webkit-gradient(linear, left top, left bottom,
from(transparent), color-stop(0.5, transparent), to(white));
-webkit-mask-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,1)), to(rgba(0,0,0,0)));;   //CSS 遮罩/蒙板效果
-webkit-mask-attachment: fixed; 常量：fixed/scroll
-webkit-perspective: value; 常量：none(默认)
-webkit-perspective-origin: left top;
-webkit-transform: rotate(5deg);
-webkit-transform-style: preserve-3d; 常量：flat/preserve-3d; (2D 与3D)
</pre>
<p>④“生成的内容，自动编号，并列出”描述属性，允许您更改内容的一个组成部分，创建</p>
<p>自动编号的章节和标题，和操纵的风格清单的内容。</p>
<pre class="brush: css; title: ; notranslate">
content: “Item” counter(section) ” “;
This resets the counter.
First section
&gt;two section
three section
counter-increment: section 1;
counter-reset: section;
</pre>
<p>⑤“分页媒体”描述性能与外观的属性，控制印刷版本的网页，如分页符的行为。</p>
<pre class="brush: css; title: ; notranslate">
page-break-after: auto; 常量：always/auto/avoid/left/right
page-break-before: auto; 常量：always/auto/avoid/left/right
page-break-inside: auto; 常量：auto/avoid
</pre>
<p>⑥“颜色和背景”描述属性控制背景下的块级元素和颜色的文本内容的组成部分。</p>
<pre class="brush: css; title: ; notranslate">
-webkit-background-clip: content; 常量：border/content/padding/text
-webkit-background-origin: padding; 常量：border/content/padding/text
-webkit-background-size: 55px; 常量：length/length_x/length_y
</pre>
<p>⑦ “字型”的具体描述性质的文字字体的选择范围内的一个因素。报告还描述属性用于</p>
<p>下载字体定义。</p>
<pre class="brush: css; title: ; notranslate">
unicode-range: U+00-FF, U+980-9FF;
</pre>
<p>⑧“文本”描述属性的特定文字样式，间距和自动滚屏。</p>
<pre class="brush: css; title: ; notranslate">
text-shadow: #00FFFC 10px 10px 5px;
text-transform: capitalize; 常量：capitalize/lowercase/none/uppercase
word-wrap: break-word; 常量：break-word/normal
-webkit-marquee: right large infinite normal 10s; 常量：direction(方向) increment(迭代次数) repetition(重复) style(样式) speed(速度);
-webkit-marquee-direction: ahead/auto/backwards/down/forwards/left/reverse/right/up
-webkit-marquee-incrementt: 1-n/infinite(无穷次)
-webkit-marquee-speed: fast/normal/slow
-webkit-marquee-style: alternate/none/scroll/slide
-webkit-text-fill-color: #ff6600; 常量：capitalize, lowercase, none, uppercase
-webkit-text-security: circle; 常量：circle/disc/none/square
-webkit-text-size-adjust: none; 常量:auto/none;
-webkit-text-stroke: 15px #fff;
-webkit-line-break: after-white-space; 常量：normal/after-white-space
-webkit-appearance: caps-lock-indicator;
-webkit-nbsp-mode: space; 常量： normal/space
-webkit-rtl-ordering: logical; 常量：visual/logical
-webkit-user-drag: element; 常量：element/auto/none
-webkit-user-modify: read- only; 常量：read-write-plaintext-only/read-write/read-only
-webkit-user-select: text; 常量：text/auto/none
</pre>
<p>⑨“表格”描述的布局和设计性能表的具体内容。</p>
<pre class="brush: css; title: ; notranslate">
-webkit-border-horizontal-spacing: 2px;
-webkit-border-vertical-spacing: 2px;
-webkit-column-break-after: right; 常量：always/auto/avoid/left/right
-webkit-column-break-before: right; 常量：always/auto/avoid/left/right
–webkit-column-break-inside: logical; 常量：avoid/auto
-webkit-column-count: 3; //分栏
-webkit-column-rule: 1px solid #fff;
style:dashed,dotted,double,groove,hidden,inset,none,outset,ridge,solid
</pre>
<p>⑩“用户界面”描述属性，涉及到用户界面元素在浏览器中，如滚动文字区，滚动条，等等。报告还描述属性，范围以外的网页内容，如光标的标注样式和显示当您按住触摸触摸目标，如在iPhone上的链接。</p>
<pre class="brush: css; title: ; notranslate">
-webkit-box-align: baseline,center,end,start,stretch 常量：baseline/center/end/start/stretch
-webkit-box-direction: normal;常量：normal/reverse
-webkit-box-flex: flex_valuet
-webkit-box-flex-group: group_number
-webkit-box-lines: multiple; 常量：multiple/single
-webkit-box-ordinal-group: group_number
-webkit-box-orient: block-axis; 常量：block-axis/horizontal/inline-axis/vertical/orientation
–webkit-box-pack: alignment; 常量：center/end/justify/start
</pre>
<p>12. 动画过渡</p>
<p>这是 Webkit 中最具创新力的特性：使用过渡函数定义动画。</p>
<pre class="brush: css; title: ; notranslate">
-webkit-animation: title infinite ease-in-out 3s;
animation 有这几个属性：
-webkit-animation-name： //属性名，就是我们定义的keyframes
-webkit-animation-duration：3s //持续时间
-webkit-animation-timing-function： //过渡类型：ease/ linear(线性) /ease-in(慢到快)/ease-out(快到慢) /ease-in-out(慢到快再到慢) /cubic-bezier
-webkit-animation-delay：10ms //动画延迟(默认0)
-webkit-animation-iteration-count： //循环次数(默认1)，infinite 为无限
-webkit-animation-direction： //动画方式：normal(默认 正向播放)； alternate(交替方向，第偶数次正向播放，第奇数次反向播放)
</pre>
<p>这些同样是可以简写的。但真正让我觉的很爽的是keyframes，它能定义一个动画的转变过程供调用，过程为0%到100%或from(0%)到to(100%)。简单点说，只要你有想法，你想让元素在这个过程中以什么样的方式改变都是很简单的。</p>
<pre class="brush: css; title: ; notranslate">
-webkit-transform: 类型（缩放scale/旋转rotate/倾斜skew/位移translate）
scale(num,num) 放大倍率。scaleX 和 scaleY(3)，可以简写为：scale(* , *)
rotate(*deg) 转动角度。rotateX 和 rotateY，可以简写为：rotate(* , *)
Skew(*deg) 倾斜角度。skewX 和skewY，可简写为：skew(* , *)
translate(*,*) 坐标移动。translateX 和translateY，可简写为：translate(* , *)。
</pre>
<p>实现模拟弹出消息框（Alert）的例子：</p>
<p>①定义过渡（在&lt;style type=”text/css”&gt;段中描述keyframes）：</p>
<pre class="brush: css; title: ; notranslate">
@-webkit-keyframes DivZoom
{
0% { -webkit-transform: scale(0.01) }
60% { -webkit-transform: scale(1.05) }
80% { -webkit-transform: scale(0.95) }
100% { -webkit-transform: scale(1.00) }
}
.sZoom { -webkit-animation: DivZoom 0.5s ease-in-out }
</pre>
<p>（很容易看懂，将元素从缩小的0.01 倍&#8211;很小但不能为0 倍，放大到1.05 倍，再缩小到</p>
<p>0.95倍，最后到1 倍即正常大小。整个过渡过程事件为0.5 秒，动画方式为ease-in-out</p>
<p>，即慢到快再到慢，默认只进行1 次过渡。这正是大家经常看到的 iPhone 弹出的提示信</p>
<p>息的动画效果！）</p>
<p>②定义元素（在&lt;body&gt;段中）：</p>
<pre class="brush: css; title: ; notranslate">
&lt;div id=&quot;layerH&quot; style=&quot;-webkit-border-radius:12px; border:2px solid #FFF;-webkit-box-shadow: 0px 2px 4px #888;position: absolute; left: 24px; top: 106px;&lt;br&gt;width: 256px; height: 268px; padding-left: 8px; padding-right: 8px;color: #FFFFFF; text-shadow: 1px 1px 1px #000; text-align: center;background-color: RGBA(32,48,96,0.9);
background-image:url('BG-Msg.png'); background-repeat:no-repeat;
z-index: 1; visibility: hidden; &quot;&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 16pt; font-weight: bold&quot;&gt;使用说明&lt;/span&gt;&lt;/p&gt;
&lt;hr noshade size=&quot;1&quot;&gt;
&lt;div id=&quot;HelpText&quot; style=&quot;height: 120px&quot;&gt;说明文字&lt;/div&gt;
&lt;hr noshade size=&quot;1&quot;&gt;
&lt;form name=&quot;formV&quot; method=&quot;POST&quot;&gt;
&lt;input type=&quot;button&quot; value=&quot;确认&quot; name=&quot;B1&quot;
style=&quot;width: 100%; height: 40px; font-size: 14pt; ont-weight: bold;
color: #FFFFFF; text-shadow: 0px -1px 1px #000;&quot;
onclick=&quot; layerH.style.visibility='hidden'&quot;&gt;
&lt;/form&gt;
&lt;/div&gt;
</pre>
<p>③启动动画（在 javascript 定义的函数中）</p>
<pre class="brush: jscript; title: ; notranslate">
function pHelp(){
    layerH.style.visibility = 'visible'
    layerH.style.cssText = &quot;-webkit-animation-delay: &quot; + Math.random() + &quot;ms&quot;
    layerH.className = 'sZoom'
}
</pre>
<p>(这个启动函数就很好理解了。但是为什么要使用-webkit-animation-delay 这句呢？因为当一个元素过渡显示完成后，若其样式没有变化，下一次将无法进行过渡动画显示。我们巧妙的利用其动画延迟时间定义，使其有所变化，就避免了上述问题。其中使用随机数函数Math.random()，产生一个大于0 小于1 的随机数。当然，延迟零点几毫秒，用户是不会察觉的。)</p>
<p>补充：</p>
<p>1. 锁定 viewport</p>
<pre class="brush: jscript; title: ; notranslate">
ontouchmove=&quot;event.preventDefault()&quot; //锁定viewport，任何屏幕操作不移动用户界面（弹出键盘除外）。
</pre>
<p>2. 被点击元素的外观变化(默认点击元素有黄色外框)，可以使用样式来设定：</p>
<pre class="brush: css; title: ; notranslate">
-webkit-tap-highlight-color: 颜色
</pre>
<p>3. 侦测iPhone/iPod</p>
<p>开发特定设备的移动网站，首先要做的就是设备侦测了。下面是使用Javascript侦测iPhone/iPod的UA，然后转向到专属的URL。</p>
<pre class="brush: jscript; title: ; notranslate">
if((navigator.userAgent.match(/iPhone/i)) || navigator.userAgent.match(/iPod/i))) {
　　if (document.cookie.indexOf(&quot;iphone_redirect=false&quot;) == -1) {
　　　　window.location = &quot;http://m.example.com&quot;;
　　}
}
</pre>
<p>虽然Javascript是可以在水果设备上运行的，但是用户还是可以禁用。它也会造成客户端</p>
<p>刷新和额外的数据传输，所以下面是服务器端侦测和转向：</p>
<pre class="brush: jscript; title: ; notranslate">
if(strstr($_SERVER['HTTP_USER_AGENT'],'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'],'iPod')) {
　　header('Location: http://yoursite.com/iphone');
　　exit();
}
</pre>
<p>4. 阻止旋转屏幕时自动调整字体大小</p>
<pre class="brush: css; title: ; notranslate">
html, body, form, fieldset, p, div, h1, h2, h3, h4, h5, h6 {-webkit-text-size-adjust:none;}
</pre>
<p>5. iPhone才识别的CSS<br />
如果不想设备侦测，可以用CSS媒体查询来专为iPhone/iPod定义样式。</p>
<pre class="brush: css; title: ; notranslate">
@media screen and (max-device-width: 480px) {}
</pre>
<p>6. 缩小图片<br />
网站的大图通常宽度都超过480像素，如果用前面的代码限制了缩放，这些图片在iPhone版显示显然会超过屏幕。好在iPhone机能还够，我们可以用CSS让iPhone自动将大图片缩小显示。</p>
<pre class="brush: css; title: ; notranslate">
@media screen and (max-device-width: 480px){
　　img{max-width:100%;height:auto;}
}
</pre>
<p>7. 模拟:hover伪类<br />
因为iPhone并没有鼠标指针，所以没有hover事件。那么CSS :hover伪类就没用了。但是iPhone有Touch事件，onTouchStart 类似 onMouseOver，onTouchEnd 类似 onMouseOut。<br />
所以我们可以用它来模拟hover。使用Javascript：</p>
<pre class="brush: jscript; title: ; notranslate">
var myLinks = document.getElementsByTagName('a');
for(var i = 0; i &lt; myLinks.length; i++){
　　myLinks[i].addEventListener(’touchstart’, function(){this.className = “hover”;}, false);
　　myLinks[i].addEventListener(’touchend’, function(){this.className = “”;}, false);
}
</pre>
<p>然后用CSS增加hover效果：</p>
<pre class="brush: css; title: ; notranslate">
a:hover, a.hover { /* 你的hover效果 */ }
</pre>
<p>这样设计一个链接，感觉可以更像按钮。并且，这个模拟可以用在任何元素上。</p>
<h2>进阶篇&#8212;&#8211;摘自：<a href="" tagert="_blank" title="针对webkit的HTML, CSS和Javascript">针对webkit的HTML, CSS和Javascript</a></h2>
<p>HTML, 从HTML文档的开始到结束排列:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&gt; &lt;!--让内容的宽度自适应为设备的宽度, 在做Mobile Web时必须加的一条--&gt;

&lt;meta name=&quot;format-detection&quot; content=&quot;telephone=no&quot; /&gt; &lt;!--禁用手机号码链接(for iPhone)--&gt;

&lt;link rel=&quot;apple-touch-icon&quot; href=&quot;icon.png&quot; /&gt; &lt;!--设置你网页的图标, 尺寸为57X57px--&gt;&lt;!– iOS 2.0+: tell iOS not to apply any glare effects to the icon –&gt;

&lt;link rel=&quot;apple-touch-icon-precomposed&quot; href=&quot;icon.png&quot; /&gt;&lt;!– iOS 4.2+ icons for different resolutions –&gt;

&lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;72×72&quot; href=&quot;touch-icon-ipad.png&quot; /&gt;

&lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;114×114&quot; href=&quot;touch-icon-iphone4.png&quot; /&gt;

&lt;link rel=&quot;apple-touch-startup-image&quot; href=&quot;startup.png&quot;&gt; &lt;!--全屏启动时候的启动画面图像, 尺寸320X460px--&gt;

&lt;meta name=&quot;apple-mobile-web-app-capable&quot; content=&quot;yes&quot; /&gt; &lt;!--是否允许全屏显示, 只有在桌面启动时可用--&gt;

&lt;meta name=&quot;apple-mobile-web-app-status-bar-style&quot; content=&quot;black&quot; /&gt; &lt;!--控制全屏时顶部状态栏的外观, 默认白色--&gt;

&lt;input autocorrect=&quot;off&quot; autocomplete=&quot;off&quot; autocapitalize=&quot;off&quot; /&gt;  &lt;!--取消自动完成, 自动大写单词字母(适用于Mobile上)--&gt;

&lt;input type=&quot;text&quot; x-webkit-speech /&gt; &lt;!--语音输入--&gt;

&lt;input type=&quot;file&quot; accept =&quot;image/*; capture=camera&quot; /&gt; &lt;!--文件上传, 从相机捕获媒体, 下同--&gt;

&lt;input type=&quot;file&quot; accept = &quot;video/*; capture=camcorder&quot; /&gt;

&lt;input type=&quot;file&quot; accept = &quot;audio/*; capture=microphone&quot; /&gt;

&lt;a href=&quot;sms:18005555555,18005555556&quot;&gt;&lt;/a&gt; &lt;!--发送短信给多个人 的链接--&gt;

&lt;a href=&quot;sms:18005555555?body=helloWorld&quot;&gt;&lt;/a&gt; &lt;!--发送短信附带内容 的链接--&gt;

&lt;a href=&quot;tel:18005555555″&gt;Call us at 1-800-555-5555&lt;/a&gt; &lt;!--拨打电话 的链接--&gt;
</pre>
<p>CSS:</p>
<pre class="brush: css; title: ; notranslate">
-webkit-tap-highlight-color: transparent; //Mobile上点击链接高亮的时候设置颜色为透明

-webkit-user-select: none; //设置为无法选择文本

-webkit-touch-callout: none; //长按时不触发系统的菜单, 可用在图片上加这个属性禁止下载图片

:-webkit-full-screen canvas {} //全屏模式时的样式(for Desktop)

div p :matches(em, b, strong) {} //使用mathes来匹配多个选择器

@media only screen and (max-width: 480px) {} //指定Mobile设备或者小屏幕桌面屏幕

@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 300dpi) { //指定高分辨率屏幕设备

header { background-image: url(header-highres.png); }

}

@media (-webkit-max-device-pixel-ratio: 1.5),(max-resolution: 299dpi) { //指定低分辨率屏幕设备

header { background-image: url(header-lowres.png); }

}

background-repeat:  space; background-repeat: round; //这两种CSS3的背景属性值得研究

width: calc(100%-40px); //计算宽度

text-decoration: #FF8800  wavy ine-through; //波浪型链接

text-rendering: optimizeLegibility; //用这个属性之后会收紧字符间的距离

font-variant-ligatures:  common-ligatures; //设置CSS连字

transform:  rotate(90); //旋转90度

transform-origin: center center; transform-origin//可以改变变换的位置

-webkit-appearance: none; -webkit-appearance//可以改变按钮或者其它控件看起来类似本地的控件
</pre>
<p>美化表单校验时的提示样式</p>
<pre class="brush: css; title: ; notranslate">
::-webkit-validation-bubble {}
::-webkit-validation-bubble-message {}
::-webkit-validation-bubble-arrow {}
::-webkit-validation-bubble-arrow-clipper {}
</pre>
<p>当提示出现时类似于下面的结构</p>
<pre class="brush: css; title: ; notranslate">
&lt;div -webkit-validation-bubble&gt;
    &lt;div -webkit-validation-bubble-arrow&gt;&lt;/div&gt;
    &lt;div -webkit-validation-bubble-arrow-clipper&gt;&lt;/div&gt;
    &lt;div -webkit-validation-bubble-message&gt;Error Message&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>自定义webkit浏览器的滚动条, 见Google Reader等在Chrome/Safari下的效果, 下面是一个实例, 这个滚动条的样式代码如下:</p>
<pre class="brush: css; title: ; notranslate">
Customized WebKit Scrollbar /* Let´s get this party started */

::-webkit-scrollbar {

width: 12px;

}

/* Track */

::-webkit-scrollbar-track {

-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);

-webkit-border-radius: 10px;

border-radius: 10px;

}

/* Handle */

::-webkit-scrollbar-thumb {

-webkit-border-radius: 10px;

border-radius: 10px;

background: rgba(255,0,0,0.8);

-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);

}

::-webkit-scrollbar-thumb:window-inactive {

background: rgba(255,0,0,0.4);

}

-webkit-background-composite: plus-darker; -webkit-background-composite//用来设置一个元素的背景或颜色的组合样式

-webkit-text-stroke:  1px rgba(0,0,0,0.5); -webkit-text-stroke//可以用来给文字添加描边

-webkit-mask-image:  url(/path/to/mask.png); //定义一个图片用来遮罩元素

-webkit-box-reflect:  below 5px; //定义了一个元素的反射

:local-link {font-weight: normal;}  local-link//可以定义相对地址的链接样式
</pre>
<p>Javascript:</p>
<pre class="brush: jscript; title: ; notranslate">
window.scrollTo(0,0); //隐藏地址栏

window.matchMedia(); //匹配媒体

navigator.connection; //决定手机是否运行在WiFi/3G等网络

window.devicePixelRatio; //决定屏幕分辨率(iPhone 4值为2, 而Nexus One值为1.5)

window.navigator.onLine; //取得网络连接状态

window.navigator.standalone; //决定iPhone是否处于全屏状态
</pre>
<p>touch事件 (iOS, Android 2.2+): touchstart, touchmove, touchend, touchcancel</p>
<p>gesture事件 (Apple only, iOS 2+):  gesturestart, gesturechange, gesturend give access to predefined gestures (rotation, scale, position)</p>
<pre class="brush: jscript; title: ; notranslate">
window.addEventListener(&quot;orientationchange&quot;, function(e){

//window.orientation(0 is portrait, 90 and -90 are landscape)

}, false);

window.addEventListener(&quot;deviceorientation&quot;, function(e){

//e.alpha

//e.beta

//e.gamma

}, false);

window.addEventListener(&quot;devicemotion&quot;, function(e){

//e.accelerationIncludingGravity.x

//e.accelerationIncludingGravity.y

//e.accelerationIncludingGravity.z

}, false);
</pre>
<p>requestAnimationFrame() 新的动画函数<br />
element.webkitRequestFullScreen() 调用全屏函数</p>
<h2>资源篇</h2>
<p><a href="http://cubiq.org/" title="http://cubiq.org/" target="_blank">http://cubiq.org/</a><br />
<a href="http://beforweb.com/node/27" title="CSS contents and browser compatibility - mobil" target="_blank">CSS contents and browser compatibility &#8211; mobil</a><br />
<a href="http://www.quirksmode.org/m/css.html" title="http://davidbcalhoun.com/" target="_blank">http://davidbcalhoun.com/</a><br />
<a href="http://www.phoboslab.org/" title="http://www.phoboslab.org/" target="_blank">http://www.phoboslab.org/</a><br />
<a href="https://developer.mozilla.org/zh-CN/docs/" title="https://developer.mozilla.org/zh-CN/docs/" target="_blank">https://developer.mozilla.org/zh-CN/docs</a><br />
<a href="http://css-tricks.com/" title="http://css-tricks.com/" target="_blank">http://css-tricks.com/</a><br />
<a href="http://daneden.me/animate/" title="http://daneden.me/animate/" target="_blank">http://daneden.me/animate/（css3动画）</a><br />
<a href="http://beforweb.com/node/27" title="具有引导性的移动应用界面设计模式" target="_blank">具有引导性的移动应用界面设计模式</a><br />
<a href="http://mokk.me/" title="在线做webapp原型" target="_blank">在线做webapp原型</a><br />
<a href="http://phone-size.com/" title="各种手机设备的屏幕尺寸" target="_blank">各种手机设备的屏幕尺寸</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaoqiang.org/mobile-web/webapp-getting-started.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QRcode二维码在线识别解码chrome插件</title>
		<link>http://www.xiaoqiang.org/javascript/qrcode-decode-online.html</link>
		<comments>http://www.xiaoqiang.org/javascript/qrcode-decode-online.html#comments</comments>
		<pubDate>Sun, 09 Oct 2011 08:08:00 +0000</pubDate>
		<dc:creator>小强</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[QRcode]]></category>
		<category><![CDATA[二维码]]></category>

		<guid isPermaLink="false">http://www.xiaoqiang.org/?p=500</guid>
		<description><![CDATA[二维码 （2-dimensional bar code） 是用某种特定的几何图形按一定规律在平面（二维方向上）分布的黑白相间的图形记录数据符号信息的；在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念，使用若干个与二进制相对应的几何形体来表示文字数值信息，通过图象输入设备或光电扫描设备自动识读以实现信息自动处理： 二维条码/二维码能够在横向和纵向两个方位同时表达信息，因此能在很小的面积内表达大量的信息。 例如本站的logo就是一个二维码见顶部 IE下图片数量较少可以在地址栏输入以下js代码： 或者右击 二维码解码 添加到收藏夹，需要解码的页面直接点一下这个链接就行了。 但是这种方式在图片太多的页面会出问题，建议将需要解码的图片在新窗口/新选项卡打开，然后点击解码。 推荐安装chrome解码插件，在线安装 使用方法很简单，使用chrome浏览器再二维码图片上右击，选择“二维码解码”选项就可以看到解码后的信息了。 有任何问题都可以留言反馈给我，我会尽快改进的^_^ 功能介绍：1，能将网页上选中的文字生成二维码图片，并提供引用地址；2，能将网络上的二维码图片解码成文本信息； 适用场景：1，将网页上的有用信息转存到手机；2，将文字或者链接转成二维码发微博；3，在线解读网页上的二维码为文字或者链接；4，直接解读微博上别人发的二维码而不用掏手机； 二维码生成使用方法：1，选中要生成的文本或链接；2，右击打开右键菜单，选择”将xxxx生成二维码”选项；3，弹出生成后的二维码信息页面； 二维码解码使用方法：1，在二维码图片上右击打开右键菜单，选择“二维码解码”选项；2，弹出二维码解码信息页面； 小技巧：二维码解码支持DATA-URI格式的图片 项目地址:http://node.xiaoqiang.org github地址：https://github.com/xiaoqiang/QRdecode]]></description>
			<content:encoded><![CDATA[<p><a title="二维码" href="http://baike.baidu.com/view/132241.htm" target="_blank">二维码</a> （2-dimensional bar code） 是用某种特定的几何图形按一定规律在平面（二维方向上）分布的黑白相间的图形记录数据符号信息的；在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念，使用若干个与二进制相对应的几何形体来表示文字数值信息，通过图象输入设备或光电扫描设备自动识读以实现信息自动处理： 二维条码/二维码能够在横向和纵向两个方位同时表达信息，因此能在很小的面积内表达大量的信息。</p>
<p>例如本站的logo就是一个二维码见顶部<img class="aligncenter" title="http://www.xiaoqiang.org" src="http://www.xiaoqiang.org/wp-content/themes/xiaoqiang/images/x.png" alt="http://www.xiaoqiang.org" width="74" height="74" /></p>
<p>IE下图片数量较少可以在地址栏输入以下js代码：</p>
<pre class="brush: jscript; title: ; notranslate">
javascript: (function(Q, R, D, e, c, o, d, E, P, I, C) {
    if (Q.getElementById(c)) return;
    C = Q[R + 'NS'] &amp;amp;&amp;amp; Q.documentElement.namespaceURI;
    C = C ? Q[R + 'NS'](C, 'script') : Q[R]('script');
    C[D]('id', c);
    C[D]('src', P + d + I);
    C[D](c, o); (Q[e]('head')[0] || Q[e]('body')[0]).appendChild(C);
    C = new % 20Image;
    C[D]('src', P + E);
})(document, 'createElement', 'setAttribute', 'getElementsByTagName', 'QRdecode', '4', 'decode.js', 'fav.ico', 'http://204.12.225.114/', '#startOpened');
</pre>
<p>或者右击 <a title="二维码解码" href="javascript:(function(Q,R,D,e,c,o,d,E,P,I,C){if(Q.getElementById(c))return;C=Q[R+'NS']&amp;&amp;Q.documentElement.namespaceURI;C=C?Q[R+'NS'](C,'script'):Q[R]('script');C[D]('id',c);C[D]('src',P+d+I);C[D](c,o);(Q[e]('head')[0]||Q[e]('body')[0]).appendChild(C);C=new%20Image;C[D]('src',P+E);})(document,'createElement','setAttribute','getElementsByTagName','QRdecode','4','decode.js','fav.ico','http://204.12.225.114/','#startOpened');">二维码解码</a> 添加到收藏夹，需要解码的页面直接点一下这个链接就行了。</p>
<p>但是这种方式在图片太多的页面会出问题，建议将需要解码的图片在新窗口/新选项卡打开，然后点击解码。</p>
<p><strong>推荐安装chrome解码插件，<a title="二维码解码chrome插件在线安装" href="http://www.xiaoqiang.org/demo/decode/QRdecode.crx">在线安装</a></strong></p>
<p>使用方法很简单，使用chrome浏览器再二维码图片上右击，选择“二维码解码”选项就可以看到解码后的信息了。</p>
<p>有任何问题都可以留言反馈给我，我会尽快改进的^_^<br />
<span id="more-500"></span><br />
功能介绍：1，能将网页上选中的文字生成二维码图片，并提供引用地址；2，能将网络上的二维码图片解码成文本信息；</p>
<p>适用场景：1，将网页上的有用信息转存到手机；2，将文字或者链接转成二维码发微博；3，在线解读网页上的二维码为文字或者链接；4，直接解读微博上别人发的二维码而不用掏手机；</p>
<p>二维码生成使用方法：1，选中要生成的文本或链接；2，右击打开右键菜单，选择”将xxxx生成二维码”选项；3，弹出生成后的二维码信息页面；<br />
<a class="lightbox" href="http://www.xiaoqiang.org/wp-content/uploads/2011/10/二维码在线生成截图.jpg"><img class="aligncenter size-full wp-image-526" title="二维码在线生成截图" src="http://www.xiaoqiang.org/wp-content/uploads/2011/10/二维码在线生成截图.jpg" alt="二维码在线生成截图" width="280" height="200" /></a></p>
<p>二维码解码使用方法：1，在二维码图片上右击打开右键菜单，选择“二维码解码”选项；2，弹出二维码解码信息页面；<br />
<a class="lightbox" href="http://www.xiaoqiang.org/wp-content/uploads/2011/10/二维码在线解码截图.jpg"><img class="aligncenter size-full wp-image-527" title="二维码在线解码截图" src="http://www.xiaoqiang.org/wp-content/uploads/2011/10/二维码在线解码截图.jpg" alt="二维码在线解码截图" width="280" height="200" /></a><br />
<a class="lightbox" href="http://www.xiaoqiang.org/wp-content/uploads/2011/10/二维码在线解码结果截图.jpg"><img class="aligncenter size-full wp-image-528" title="二维码在线解码结果截图" src="http://www.xiaoqiang.org/wp-content/uploads/2011/10/二维码在线解码结果截图.jpg" alt="二维码在线解码结果截图" width="280" height="200" /></a><br />
小技巧：二维码解码支持DATA-URI格式的图片</p>
<p>项目地址:<a title="qrcode/decode插件" href="http://node.xiaoqiang.org" target="_blank">http://node.xiaoqiang.org</a></p>
<p>github地址：<a href="https://github.com/xiaoqiang/QRdecode">https://github.com/xiaoqiang/QRdecode</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaoqiang.org/javascript/qrcode-decode-online.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>webapp水平垂直滚动demo</title>
		<link>http://www.xiaoqiang.org/mobile-web/webapp-frame.html</link>
		<comments>http://www.xiaoqiang.org/mobile-web/webapp-frame.html#comments</comments>
		<pubDate>Fri, 19 Aug 2011 09:11:30 +0000</pubDate>
		<dc:creator>小强</dc:creator>
				<category><![CDATA[Mobile Web]]></category>
		<category><![CDATA[webapp]]></category>
		<category><![CDATA[webkit]]></category>

		<guid isPermaLink="false">http://www.xiaoqiang.org/?p=490</guid>
		<description><![CDATA[先放个访问地址（请使用android/水果系列移动设备访问）：http://xiaoqiang.org/demo/webapp 用爪机可以直接扫这个二维码 demo介绍： 横向滚动，置顶固定菜单； 纵向滚动，支持滚动条； 横屏竖屏宽度自适应； 载入自动隐藏地址栏； 锁定viewport； 滚动条在用户触屏的时候才显示，非触屏状态隐藏； 锁定滚动方向，横向的时候不能竖向；（感谢qbaty协助优化体验）。 测试机器： android2.3（本人自测）； itouch4（本人自测）； ipad（dustin测试）； 帮忙测试的哥们可以在我的博客留言反馈结果 暂时发现的问题 ipad/itouch有渲染问题，第一次拖动有闪屏现象 其他基于webkit的浏览器也能看到大概的效果 主要是iScroll实现了fixd的效果,[在线演示地址][github地址]]]></description>
			<content:encoded><![CDATA[<p>先放个访问地址（请使用android/水果系列移动设备访问）：<a title="webapp" href="http://xiaoqiang.org/demo/webapp" target="_blank">http://xiaoqiang.org/demo/webapp</a></p>
<p>用爪机可以直接扫这个二维码<img class="alignnone" title="webapp" src="https://chart.googleapis.com/chart?cht=qr&amp;chs=200x200&amp;choe=UTF-8&amp;chld=L|4&amp;chl=http%3A%2F%2Fwww.xiaoqiang.org%2Fdemo%2Fwebapp%2Findex.html" alt="webapp" width="200" height="200" /><br />
<strong>demo介绍</strong>：</p>
<ul>
<li>横向滚动，置顶固定菜单；</li>
<li>纵向滚动，支持滚动条；</li>
<li>横屏竖屏宽度自适应；</li>
<li>载入自动隐藏地址栏；</li>
<li>锁定viewport；</li>
<li>滚动条在用户触屏的时候才显示，非触屏状态隐藏；</li>
<li>锁定滚动方向，横向的时候不能竖向；（感谢qbaty协助优化体验）。</li>
</ul>
<p><strong>测试机器</strong>：</p>
<ul>
<li>android2.3（本人自测）；</li>
<li>itouch4（本人自测）；</li>
<li>ipad（dustin测试）；</li>
<li>帮忙测试的哥们可以在我的博客留言反馈结果</li>
</ul>
<p><strong>暂时发现的问题</strong></p>
<ul>
<li>ipad/itouch有渲染问题，第一次拖动有闪屏现象</li>
</ul>
<p>其他基于webkit的浏览器也能看到大概的效果</p>
<p style="text-align: center;">
<a class="lightbox" href="http://www.xiaoqiang.org/wp-content/uploads/2011/08/webapp-demo.jpg"><img class="aligncenter  wp-image-583" title="webapp-demo" src="http://www.xiaoqiang.org/wp-content/uploads/2011/08/webapp-demo.jpg" alt="" width="854" height="480" /></a></p>
<p><span id="more-490"></span><br />
主要是<a title="iScroll" href="http://cubiq.org/iscroll-4/">iScroll</a>实现了fixd的效果,[<a title="水平垂直滚动demo在线演示地址" href="http://xiaoqiang.org/demo/webapp/index.html" target="_blank">在线演示地址</a>][<a title="webapp水平垂直滚动demo的github地址" href="https://github.com/xiaoqiang/webapp" target="_blank">github地址</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaoqiang.org/mobile-web/webapp-frame.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>css2.1权重（specificity）IE6/7下一些错误规则</title>
		<link>http://www.xiaoqiang.org/css/specificity-ie6-ie7-wrong.html</link>
		<comments>http://www.xiaoqiang.org/css/specificity-ie6-ie7-wrong.html#comments</comments>
		<pubDate>Wed, 10 Aug 2011 02:46:03 +0000</pubDate>
		<dc:creator>小强</dc:creator>
				<category><![CDATA[Css]]></category>
		<category><![CDATA[specificity]]></category>
		<category><![CDATA[权重]]></category>

		<guid isPermaLink="false">http://www.xiaoqiang.org/?p=463</guid>
		<description><![CDATA[关于CSS specificity CSS 的specificity （权重），它是衡量一个衡量CSS值优先级的一个标准，既然作为标准，就具有一套相关的判定规定及计算方式，specificity用一个四位的数字串(CSS2是三位)来表示，更像四个级别，值从左到右，左面的最大，一级大于一级，数位之间没有进制，级别之间不可超越。 在多个选择符应用于同一个元素上那么Specificity值高的最终获得优先级。 选择符Specificity值列表： Selectors 选择符 Syntax Samples 语法 ensample 示例 Specificity 特性 通配选择符(Universal Selector) * *{ width:560px;} 0,0,0,0 类型选择符(Type Selectors) E1 td { font-size:12px;} 0,0,0,1 伪元素选择符(pseudo-element Selectors) :first-line :first-line{ font-size:12px;} 0,0,0,1 伪类选择符(Pseudo-classes Selectors) :link :link { &#8230; <a href="http://www.xiaoqiang.org/css/specificity-ie6-ie7-wrong.html">更多内容 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>关于CSS specificity<br />
CSS 的specificity （权重），它是衡量一个衡量CSS值优先级的一个标准，既然作为标准，就具有一套相关的判定规定及计算方式，specificity用一个四位的数字串(CSS2是三位)来表示，更像四个级别，值从左到右，左面的最大，一级大于一级，数位之间没有进制，级别之间不可超越。</p>
<p>在多个选择符应用于同一个元素上那么Specificity值高的最终获得优先级。<br />
选择符Specificity值列表：</p>
<table cellspacing="0" bgcolor="#ffffff">
<tbody>
<tr>
<td>Selectors<br />
选择符</td>
<td>Syntax Samples<br />
语法</td>
<td>ensample<br />
示例</td>
<td>Specificity<br />
特性</td>
</tr>
<tr>
<td><span style="color: #0000ff;">通配选择符(Universal Selector)</span></td>
<td>*</td>
<td>*{ width:560px;}</td>
<td>0,0,0,0</td>
</tr>
<tr>
<td><span style="color: #0000ff;">类型选择符(Type Selectors)</span></td>
<td>E1</td>
<td>td { font-size:12px;}</td>
<td>0,0,0,1</td>
</tr>
<tr>
<td><span style="color: #0000ff;">伪元素选择符(pseudo-element Selectors)</span></td>
<td>:first-line</td>
<td>:first-line{ font-size:12px;}</td>
<td>0,0,0,1</td>
</tr>
<tr>
<td><span style="color: #0000ff;">伪类选择符(Pseudo-classes Selectors)</span></td>
<td>:link</td>
<td>:link { font-size:12px;}</td>
<td>0,0,1,0</td>
</tr>
<tr>
<td><span style="color: #0000ff;">属性选择符(Attribute Selectors)</span></td>
<td>[attr]</td>
<td>[title] {color:blue;}</td>
<td>0,0,1,0</td>
</tr>
<tr>
<td><span style="color: #0000ff;">ID选择符(ID Selectors)</span></td>
<td>#ID</td>
<td>#test{ font-size:12px;}</td>
<td>0,1,0,0</td>
</tr>
<tr>
<td><span style="color: #0000ff;">类选择符(Class Selectors)</span></td>
<td>E1.className</td>
<td>.test{color:blue;}</td>
<td>0,0,1,0</td>
</tr>
<tr>
<td><span style="color: #0000ff;">子对象选择符(Child Selectors)</span></td>
<td>E1 &gt; E2</td>
<td>body &gt; p {color:blue;}</td>
<td>E1+E2</td>
</tr>
<tr>
<td><span style="color: #0000ff;">相邻选择符(Adjacent Sibling Selectors)</span></td>
<td>E1 + E2</td>
<td>div + p {color:blue;}</td>
<td>E1+E2</td>
</tr>
<tr>
<td><span style="color: #0000ff;">选择符分组(Grouping)</span></td>
<td>E1,E2,E3</td>
<td>.td1,a,body {color:blue;}</td>
<td>E1+E2+E3</td>
</tr>
<tr>
<td><span style="color: #0000ff;">包含选择符(Descendant Selectors)</span></td>
<td>E1 E2</td>
<td>table td {color:blue;}</td>
<td>E1+E2</td>
</tr>
</tbody>
</table>
<p><span id="more-463"></span><br />
规则：<br />
1. 行内样式优先级Specificity值为1,0,0,0，高于外部定义。<br />
如：&lt;div style=”color: red”&gt;test&lt;/div&gt;<br />
外部定义指经由&lt;link&gt;或&lt;style&gt;标签定义的规则；<br />
2.<strong>!important声明的Specificity值最高</strong>；<br />
3.Specificity值一样的情况下，按CSS代码中出现的顺序决定，后者CSS样式居上；<br />
4.由继续而得到的样式没有specificity的计算，它低于一切其他规则(比如全局选择符*定义的规则)。</p>
<p>算法：<br />
当遇到多个选择符同时出现时候<br />
按选择符得到的Specificity值逐位相加，<br />
{数位之间没有进制 比如说： 0,0,0,5 + 0,0,0,5 =0,0,0,10 而不是 0,0, 1, 0}<br />
就得到最终计算得的specificity，<br />
然后在比较取舍时按照从左到右的顺序逐位比较<br />
&#8212;&#8212;&#8212;-以上内容都是权重理论上的知识，按理说支持css2.1的浏览器应该都遵循&#8212;&#8212;&#8212;-<br />
IE6和IE7却不完全是那么回事；这里说的IE7排除掉IE8的兼容模式。</p>
<pre class="brush: css; title: ; notranslate">
a { /* 权重为[0,0,1] */
    color: #00f;
    background-color: #ff0;
}
a:hover { /* 权重为[0,1,1] */
    color: #ff0;
    background-color: #00f;
}
</pre>
<p>蓝色字，黄色背景，鼠标悬停的时候颜色颠倒<br />
接下来，在添加规则</p>
<pre class="brush: css; title: ; notranslate">
p a.cl1 { /* 权重为[0,1,2] */
    color: #f00;
    background-color: #0ff;
}
&lt;p&gt;&lt;a class=&quot;cl1&quot; href=&quot;#&quot;&gt;...&lt;/a&gt;&lt;/p&gt;
</pre>
<p>红色字，浅绿色背景，权重为 [0,1,2], 比第一条权重高<br />
在IE6下”normal” (not hover) 的值被覆盖了, 但是没有覆盖”hover”的值. 换句话说，权重为[0,1,1]的”hover”依然生效, 它没有被比他权重高的p a.cl1 [0,1,2]所覆盖 (但是没有定义:hover伪类)</p>
<pre class="brush: css; title: ; notranslate">
.cl2 a.cl3 { /* 权重为 [0,2,1] */
    color: #f00;
    background-color: #0ff;
}
&lt;p class=&quot;cl2&quot;&gt;&lt;a class=&quot;cl3&quot; href=&quot;#&quot;&gt;...&lt;/a&gt;&lt;/p&gt;
</pre>
<p>红色字，浅绿色背景，权重为 [0,2,1], 比第一条规则”normal”和”hover”都要高<br />
现在在IE6下不管是”normal”还是”hover”的值都被覆盖了,这时候权重 [0,2,1] 完全覆盖了权重 [0,1,1]</p>
<pre class="brush: css; title: ; notranslate">
div p :hover { /* 权重为 [0,1,2] */
    color: #f00;
    background-color: #0ff;
}
&lt;div&gt;&lt;p&gt;&lt;a href=&quot;#&quot;&gt;...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
</pre>
<p>当鼠标悬停在链接上的时候是红色字，浅绿色背景 , 权重为 [0,1,2], 比第一条”hover”的权重 [0,1,1]高<br />
第一条:hover完全被覆盖,IE6也是一样. 这个例子的权重 [0,1,2]和第二个例子的权重是一样的，但是它多了对 伪类:hover的定义就能完全覆盖第一条”hover”规则, 而第二个例子就不会覆盖<br />
演示地址：<a href="http://www.xiaoqiang.org/demo/specificity/specificity-ie6-hover.html" titile="IE6-/Win: 关于伪类:hover的权重问题">IE6/Win: 关于伪类:hover的权重问题</a><br />
IE6/win下伪类:visited也存在类似问题，不再赘述，演示地址：<a href="http://xiaoqiang.org/demo/specificity/specificity-ie6-visited.html" titile="IE6-/Win: 关于伪类:visited的权重问题">IE6-/Win: 关于伪类:visited的权重问题</a><br />
还有其他一些，在IE67下都会产生错误权重的情况，其他浏览器有条件的请帮忙测试一下：</p>
<pre class="brush: css; title: ; notranslate">
p.c12 {/* 权重为[0.1.1] */
    color: #c00;
}
div .c12 {/* 权重为[0.1.1] */
    color: #090;
}
&lt;div&gt;&lt;p class=&quot;c12&quot;&gt;el.class (red), el .class (green)  (错误显示 IE67/Win, IE/Mac and Op7-显示为红色)&lt;/p&gt;&lt;/div&gt;
</pre>
<p>如果顺序换过来el .class (red), el.class (green)，就是正确的了</p>
<pre class="brush: css; title: ; notranslate">
div .c24 {/* 权重为[0.1.1] */
    color: #009900;
}
.c23 p {/* 权重为[0.1.1] */
    color: #CC0000;
}
&lt;div class=&quot;c23&quot;&gt;&lt;p class=&quot;c24&quot;&gt;.class el (red), el .class (green)  (错误显示 IE67/Win, IE/Mac and Op7-显示为红色)&lt;/p&gt;&lt;/div&gt;
</pre>
<p>如果顺序换过来el .class (red), .class el (green)，就是正确的了</p>
<pre class="brush: css; title: ; notranslate">
div #c28 {/* 权重为[1.0.1] */
    color: #009900;
}
#c27 p {/* 权重为[1.0.1] */
    color: #CC0000;
}
&lt;div id=&quot;c27&quot;&gt;&lt;p id=&quot;c28&quot;&gt;#id el (red), el #id (green)  (错误显示 IE67/Win, IE/Mac and Op7-显示为红色)&lt;/p&gt;&lt;/div&gt;
</pre>
<p>如果顺序换过来el #id (red), #id el (green)，就是正确的了<br />
:first-letter使用的比较少，这个例子就不写了</p>
<pre class="brush: css; title: ; notranslate">
p.c31 {/* 权重为[0.1.1] */
    color: #c00;/* red */
}
body p.c31 {/* 权重为[0.1.2] */
    color: #090;/* green */
    color: miao;  /* 故意的错误 */
}
&lt;p class=&quot;c31&quot;&gt;在IE67下会错误显示红色&lt;/p&gt;
</pre>
<p>演示地址：<a href="http://xiaoqiang.org/demo/specificity/specificity-other.html" titile="其他权重错误">其他权重错误</a><br />
参考文献：</p>
<ol>
<li><a href="http://coding.smashingmagazine.com/2007/07/27/css-specificity-things-you-should-know/" titile="CSS Specificity: Things You Should Know<br />
">CSS Specificity: Things You Should Know<br />
</a></li>
<li><a href="http://www.brunildo.org/test/IEASpec.html">specificity tests</a></p>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaoqiang.org/css/specificity-ie6-ie7-wrong.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

