<?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>imAtlas</title>
	<atom:link href="http://imatlas.com/feed" rel="self" type="application/rss+xml" />
	<link>http://imatlas.com</link>
	<description>消失的不仅仅是时间</description>
	<lastBuildDate>Mon, 20 Feb 2012 13:45:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>博客迁移通知</title>
		<link>http://imatlas.com/posts/%e5%8d%9a%e5%ae%a2%e8%bf%81%e7%a7%bb%e9%80%9a%e7%9f%a5</link>
		<comments>http://imatlas.com/posts/%e5%8d%9a%e5%ae%a2%e8%bf%81%e7%a7%bb%e9%80%9a%e7%9f%a5#comments</comments>
		<pubDate>Tue, 10 Jan 2012 03:21:46 +0000</pubDate>
		<dc:creator>Azrael</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://imatlas.com/?p=651</guid>
		<description><![CDATA[最近准备把博客迁移到香港的主机, 设计到数据迁移、域名变更等, 可能会有一段时间访问不了, 请各位过几天再访问, ^_^ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; @2011-1-11 迁移完成, 撒花~~ 哈哈]]></description>
			<content:encoded><![CDATA[<p>最近准备把博客迁移到香港的主机, 设计到数据迁移、域名变更等, 可能会有一段时间访问不了, 请各位过几天再访问, ^_^</p>
<p><span style="color: #ff0000;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</span></p>
<p>@2011-1-11 迁移完成, 撒花~~ 哈哈</p>
]]></content:encoded>
			<wfw:commentRss>http://imatlas.com/posts/%e5%8d%9a%e5%ae%a2%e8%bf%81%e7%a7%bb%e9%80%9a%e7%9f%a5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【疯狂的菊花系列】全CSS3制作Loading动画</title>
		<link>http://imatlas.com/posts/full-css3-animation-loading</link>
		<comments>http://imatlas.com/posts/full-css3-animation-loading#comments</comments>
		<pubDate>Sun, 04 Dec 2011 09:16:38 +0000</pubDate>
		<dc:creator>Azrael</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[css3选择器]]></category>
		<category><![CDATA[loading]]></category>

		<guid isPermaLink="false">http://imatlas.com/?p=606</guid>
		<description><![CDATA[话说上三回, 我们用css3的animation让png图片动起来了. 但是美中不足的是, 还要画一张图片. 如果要求做几个不同大小的菊花, 或者要换个颜色, 又或者要不同的地方用不同的颜色和大小的菊花, 得找到原图(psd之类的)再导出一个不同的size, 个人感觉蛋疼死了. 这次咱们用css3来画那几个点, 让它能大能小能色, 嘿嘿~~(邪恶了). 先看看效果吧, 用鼠标左键狠狠的砸这里. 菊花上有12个点, 我们用12个span标签来做, 宽高使用百分比, 用来自适应外层容器的变化, 圆角设置为100%,就可以保证显示成一个圆了. 接下来的事情就比较痛苦, 需要一个个摆到正确的位置. 但是为了以后的幸福生活哇, 咱也得硬着头皮的上是吧. 好在有了css3的选择器,我们也不用一个个给这些span起名字了,span:nth-child(1)就表示第一个span, nth-child的值是从1开始的,感觉有点怪异. 定位的话用绝对定位, 然后用负的margin把圆心偏移回去, 位置要自己算好, 具体可以看 demo. css代码我就不贴全了,避免凑字数的嫌疑, 关键代码如下: .loading{ width: 50px; height: 50px; } .loading div{ position: relative; width: 100%; height: 100%; -webkit-animation: auto-circle 1s linear infinite ; -moz-animation: auto-circle 1s [...]]]></description>
			<content:encoded><![CDATA[<p>话说上三回, 我们用css3的animation让png图片动起来了.</p>
<p>但是美中不足的是, 还要画一张图片. 如果要求做几个不同大小的菊花, 或者要换个颜色, 又或者要不同的地方用不同的颜色和大小的菊花, 得找到原图(psd之类的)再导出一个不同的size, 个人感觉蛋疼死了.</p>
<p>这次咱们用css3来画那几个点, 让它能大能小能色, 嘿嘿~~(邪恶了).</p>
<p>先看看效果吧, 用鼠标左键狠狠的砸这里.</p>
<p>菊花上有12个点, 我们用12个span标签来做, 宽高使用百分比, 用来自适应外层容器的变化, 圆角设置为100%,就可以保证显示成一个圆了.</p>
<p>接下来的事情就比较痛苦, 需要一个个摆到正确的位置. 但是为了以后的幸福生活哇, 咱也得硬着头皮的上是吧.</p>
<p>好在有了css3的选择器,我们也不用一个个给这些span起名字了,span:nth-child(1)就表示第一个span, nth-child的值是从1开始的,感觉有点怪异.</p>
<p>定位的话用绝对定位, 然后用负的margin把圆心偏移回去, 位置要自己算好, 具体可以看 demo.</p>
<p>css代码我就不贴全了,避免凑字数的嫌疑, 关键代码如下:</p>
<pre class="css" title="code">.loading{
    width: 50px;
    height: 50px;
}
.loading div{
    position: relative;
    width: 100%;
    height: 100%;
    -webkit-animation: auto-circle 1s linear infinite ;
    -moz-animation: auto-circle 1s linear infinite ;
}
.loading div span{
    display: block;
    background: #04AED9;
    -webkit-border-radius: 100%;
    -moz-border-radius: 100%;
    position: absolute;
}
.loading div span:nth-child(1){
    width: 18%;
    height: 18%;
    left: 50%;
    top: 0%;
    margin-left: -9%;
}
/* ... */</pre>
<p>除了loading的外框, 全部值都是用百分比, 这样12个小点的大小和位置都能随着外框的大小改变而改变了, 连颜色都能随便改, 爽了吧.</p>
<p><span style="color: #666699;">后传:</span></p>
<p><span style="color: #666699;">某产品: 这个菊花改成16px的, 那个换成红色的.</span></p>
<p><span style="color: #666699;">苦逼代码男: 32px改成16px是吧, 蓝色换成红色是吧,  嗯, 改完了, 吃饭~~</span></p>
<p><span style="color: #666699;">某产品: &#8230;&#8230; </span></p>
]]></content:encoded>
			<wfw:commentRss>http://imatlas.com/posts/full-css3-animation-loading/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【疯狂的菊花系列】Canvas绘制Loading动画</title>
		<link>http://imatlas.com/posts/canvas-loading</link>
		<comments>http://imatlas.com/posts/canvas-loading#comments</comments>
		<pubDate>Tue, 01 Nov 2011 15:43:23 +0000</pubDate>
		<dc:creator>Azrael</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[loading]]></category>
		<category><![CDATA[svg]]></category>
		<category><![CDATA[动画]]></category>

		<guid isPermaLink="false">http://imatlas.com/?p=595</guid>
		<description><![CDATA[上回说到用png图片来做帧动画, 总的来说也没什么大问题, 但是画个菊花, 按固定角度旋转N次做图实在是蛋疼. 既然怎么样都要画个菊花, 那不如就用canvas来画算了. 对于不支持canvas的浏览器, 可以用svg, 原理都差不多. 这个canvas动画的原理跟帧动画也类似, 先绘制第一帧的画面, 然后擦掉, 接着绘制第二帧, 以此循环. 时间间隔短的话看上去就变成动画了. 具体解释请看代码, 有足够的注释, 或者也可以点这里看看结果. canvas的api说明可以在这里找到. window.onload = function(){ var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); if(!ctx){ return; } ctx.clearRect(0,0,128,128);//擦除画布 ctx.fillStyle = 'transparent'; ctx.fillRect(0,0,128,128); ctx.fillStyle = 'black'; //定义点的颜色 var base = 0; var update = function(){ ctx.save(); //把当前的绘图状态保存起来(如旋转角度的初始位置, 填充颜色, 坐标原点等) ctx.clearRect(0,0,128,128);//擦除画布 [...]]]></description>
			<content:encoded><![CDATA[<p>上回说到用png图片来做帧动画, 总的来说也没什么大问题, 但是画个菊花, 按固定角度旋转N次做图实在是蛋疼.</p>
<p>既然怎么样都要画个菊花, 那不如就用canvas来画算了. 对于不支持canvas的浏览器, 可以用svg, 原理都差不多.</p>
<p>这个canvas动画的原理跟帧动画也类似, 先绘制第一帧的画面, 然后擦掉, 接着绘制第二帧, 以此循环. 时间间隔短的话看上去就变成动画了.</p>
<p>具体解释请看代码, 有足够的注释, 或者也可以点<a title="canvas loading 动画demo" href="http://imatlas.com/demo/canvas-loading-demo" target="_blank">这里</a>看看结果. canvas的api说明可以在<a title="the-canvas-element" href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html" target="_blank">这里</a>找到.</p>
<pre class="js" title="code">window.onload = function(){
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    if(!ctx){
        return;
    }
    ctx.clearRect(0,0,128,128);//擦除画布
    ctx.fillStyle = 'transparent';
    ctx.fillRect(0,0,128,128);
    ctx.fillStyle = 'black'; //定义点的颜色
    var base = 0;
    var update = function(){
        ctx.save(); //把当前的绘图状态保存起来(如旋转角度的初始位置, 填充颜色, 坐标原点等)
        ctx.clearRect(0,0,128,128);//擦除画布
        ctx.translate(64, 64);//把坐标原点移动到画布中央
        base = (++base === 13) ? (base - 12) : base;//使用base来指示最大的圆点所在的位置, 实现旋转动画的效果
        var angle = Math.PI / 6;//画12个点, 所以每个点之间的角度是 1/6 PI
        var beginAngle = angle * base ;
        for(var i = 1; i &lt;= 12; i ++){
            ctx.beginPath();//开始一个路径
            if(i === 1){
                ctx.rotate(beginAngle);
            }else{
                ctx.rotate(angle);//每次调用rotate之后, 其旋转角度并不会还原, 而是接着上一次的位置
            }
            ctx.arc(0, -48, i * 0.8 + 1, 0, 2 * Math.PI, true);//绘制一个圆点
            ctx.closePath();//闭合路径
            //如果不是用beginPath和closePath, 在调用fill方法时, 会导致画布上的所有圆都重叠在一起了
            ctx.fill();//填充(使用上面最后定义的fillStyle)
        }
        ctx.restore();//还原绘图状态, 如果不还原, 则下一次调用rotate时会接着这次的位置旋转, 而不是初始位置
    }
    update();
    setInterval(update, 50);
};</pre>
<p>菊花系列暂时就到这里了, 有时间再去用svg整个.</p>
]]></content:encoded>
			<wfw:commentRss>http://imatlas.com/posts/canvas-loading/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【疯狂的菊花系列】制作PNG帧动画Loading</title>
		<link>http://imatlas.com/posts/png-frame-loading</link>
		<comments>http://imatlas.com/posts/png-frame-loading#comments</comments>
		<pubDate>Tue, 25 Oct 2011 16:30:29 +0000</pubDate>
		<dc:creator>Azrael</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[frame]]></category>
		<category><![CDATA[loading]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[帧动画]]></category>

		<guid isPermaLink="false">http://imatlas.com/?p=588</guid>
		<description><![CDATA[话说上回说到使用css3的animation来制止png格式的菊花, 但是目前之后新版的firefox和webkit核心浏览器才支持该动画, 那其他浏览器也想用png动画怎么办呢? 这就要提到帧动画的概念了, 会flash的都知道, adobe flash软件里有个时间轴和帧的概念, 具体解释我就不说了, 可以自己google.其原理是事先把一个动画的所有动作的话出来, 然后在不同的时间点显示不同的动作, 切换的快的话看上去就动起来了. 制作菊花, 要先准备一张包含所有菊花状态的图,就像下面这张: 用一个固定大小的窗口显示这张图, 定时移动图片的位置, 就能让它动起来了. 简单的代码如下: setInterval(function(){     var left = parseInt(imgEl.style.left &#124;&#124; 0) - 128;     if(left &#60;= -1280){         left = 0;     }     imgEl.style.left = left + 'px'; }, 50); 活生生血淋淋的实例在这里. PS: 画这10帧的菊花帧蛋疼~~]]></description>
			<content:encoded><![CDATA[<p>话说上回说到使用css3的animation来制止png格式的菊花, 但是目前之后新版的firefox和webkit核心浏览器才支持该动画, 那其他浏览器也想用png动画怎么办呢?</p>
<p>这就要提到帧动画的概念了, 会flash的都知道, adobe flash软件里有个时间轴和帧的概念, 具体解释我就不说了, 可以自己google.其原理是事先把一个动画的所有动作的话出来, 然后在不同的时间点显示不同的动作, 切换的快的话看上去就动起来了.</p>
<p>制作菊花, 要先准备一张包含所有菊花状态的图,就像下面这张:</p>
<p><a href="http://imatlas.com/wp-content/uploads/2011/10/loading3.png"><img class="size-thumbnail wp-image-584 alignnone" title="loading" src="http://imatlas.com/wp-content/uploads/2011/10/loading3.png" alt="" width="540" height="54" /></a></p>
<p>用一个固定大小的窗口显示这张图, 定时移动图片的位置, 就能让它动起来了. 简单的代码如下:</p>
<pre class="js" title="code">setInterval(function(){
    var left = parseInt(imgEl.style.left || 0) - 128;
    if(left &lt;= -1280){
        left = 0;
    }
    imgEl.style.left = left + 'px';
}, 50);</pre>
<p>活生生血淋淋的实例在<a title="png帧动画demo" href="http://imatlas.com/demo/png-frame-loading-demo">这里</a>.</p>
<p>PS: 画这10帧的菊花帧蛋疼~~</p>
]]></content:encoded>
			<wfw:commentRss>http://imatlas.com/posts/png-frame-loading/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>完美实现溢出文本省略</title>
		<link>http://imatlas.com/posts/js-text-overflow</link>
		<comments>http://imatlas.com/posts/js-text-overflow#comments</comments>
		<pubDate>Mon, 24 Oct 2011 13:37:12 +0000</pubDate>
		<dc:creator>Azrael</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[Web那些事]]></category>
		<category><![CDATA[text overflow]]></category>
		<category><![CDATA[文本溢出]]></category>

		<guid isPermaLink="false">http://imatlas.com/?p=660</guid>
		<description><![CDATA[文本溢出展示省略号的需求经常都会用到，而对于新式的浏览器，这完全不是问题，因为css3里面已经有实现text-overflow：ellipsis，但是最新w3c文档中却移除了这个属性，即使这样，也有不少浏览器实现了这个特性。其浏览器支持情况如下： IE Firefox Opera Safari Chrome 6+ - 11.0+ 3.0+ 1.0+ 可以看到，只有firefox和opera11一下的版本不支持这个浏览器，以此也可以放心大胆的用了。但是遇到要求高的产品经理时（╮(╯_╰)╭），就不得不考虑firefox等不支持的浏览器了，唯有使用js进行字符截断。 比较简单的截断方式就是按字符个数截断，以一个中文宽度等于两个英文宽度为前提，根据给定字符个数进行截取。但是字符在页面显示的时候，其宽度并不是一定的，会根据不同的字体和字体大小的不同而不同，更何况字母i和A的宽度是不一样的，存在bug且不够精确。 这里使用一种方法，通过给需要截取字符的节点附加一个兄弟节点（使用同样的class和style），通过计算各个字符在这个兄弟节点里面所占的宽度来限制字符个数。 代码如下： var ellipsis = function(element){ var limitWidth = element.clientWidth; var ellipsisText = '…'; var temp = element.cloneNode(true); temp.id = 'checkTextLengthNode'; temp.className = 'check-text-length-node'; element.parentNode.appendChild(temp); var realWidth = temp.clientWidth; if(realWidth &#60;= limitWidth){ return; } temp.innerHTML = ellipsisText; var elliWidth = temp.clientWidth; var [...]]]></description>
			<content:encoded><![CDATA[<p>文本溢出展示省略号的需求经常都会用到，而对于新式的浏览器，这完全不是问题，因为css3里面已经有实现text-overflow：ellipsis，但是最新w3c文档中却移除了这个属性，即使这样，也有不少浏览器实现了这个特性。其浏览器支持情况如下：</p>
<pre>IE	Firefox	Opera	Safari	Chrome
6+	-	11.0+	3.0+	1.0+</pre>
<p>可以看到，只有firefox和opera11一下的版本不支持这个浏览器，以此也可以放心大胆的用了。但是遇到要求高的产品经理时（╮(╯_╰)╭），就不得不考虑firefox等不支持的浏览器了，唯有使用js进行字符截断。</p>
<p>比较简单的截断方式就是按字符个数截断，以一个中文宽度等于两个英文宽度为前提，根据给定字符个数进行截取。但是字符在页面显示的时候，其宽度并不是一定的，会根据不同的字体和字体大小的不同而不同，更何况字母i和A的宽度是不一样的，存在bug且不够精确。</p>
<p><span id="more-660"></span></p>
<p>这里使用一种方法，通过给需要截取字符的节点附加一个兄弟节点（使用同样的class和style），通过计算各个字符在这个兄弟节点里面所占的宽度来限制字符个数。</p>
<p>代码如下：</p>
<pre class="js" title="code">var ellipsis = function(element){
    var limitWidth = element.clientWidth;
    var ellipsisText = '…';
    var temp = element.cloneNode(true);
    temp.id = 'checkTextLengthNode';
    temp.className = 'check-text-length-node';
    element.parentNode.appendChild(temp);
    var realWidth = temp.clientWidth;
    if(realWidth &lt;= limitWidth){
        return;
    }
    temp.innerHTML = ellipsisText;
    var elliWidth = temp.clientWidth;

    var str = element.innerHTML;
    str = str.replace(/\s+/g, ' ');
    var s, totalWidth = 0;
    for(var i = 0, len = str.length; i &lt; len; i++){
        s = str.charAt(i);
        temp.innerHTML = (s === ' ' ? '&amp;nbsp;' : s);
        totalWidth += temp.clientWidth ;
        if(totalWidth + elliWidth &gt; limitWidth){
            str = str.substr(0, i);
            break;
        }
    }
    element.innerHTML = str + ellipsisText;
    temp.parentNode.removeChild(temp);
}</pre>
<p>处理字符的时候需要注意的两个个地方就是：</p>
<ol>
<li>在页面中连续的空格是会被当成一个空格处理的，因此要把连续的空格合并成一个；</li>
<li>直接给innerHTML赋值空格&#8217; &#8216;，其是不会占宽度的，因此要转换成html的空格表示。</li>
</ol>
<p>通过不断添加新字符并监测添加后的宽度，就可以做到自适应不同的字体和字体大小了。具体例子<a title="text-overflow-ellipsis-demo" href="http://imatlas.com/demo/text-overflow-ellipsis-demo" target="_blank">点击</a>这里查看，这个demo对text-overflow的支持进行了检测，如果支持ellipsis，就直接使用css的，毕竟js计算能省一点是一点。检测css属性及其支持情况可以查看<a title="判断浏览器是否支持指定CSS属性" href="http://imatlas.com/posts/detect-css-support" target="_blank">这篇文章</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://imatlas.com/posts/js-text-overflow/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>判断浏览器是否支持指定CSS属性</title>
		<link>http://imatlas.com/posts/detect-css-support</link>
		<comments>http://imatlas.com/posts/detect-css-support#comments</comments>
		<pubDate>Mon, 24 Oct 2011 13:34:15 +0000</pubDate>
		<dc:creator>Azrael</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[Web那些事]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[属性值检测]]></category>

		<guid isPermaLink="false">http://imatlas.com/?p=657</guid>
		<description><![CDATA[现在css3出来了， 添加了许多新特性，但由于并未全部浏览器都实现了这些特性，使用起来不太顺畅。因此，就想在使用的时候进行判断，如果有这个属性并且支持这种值，就css实现， 否者就用js实现。 比较明显的例子就是text-overflow这个属性，text-flow：clip是大部分浏览器都支持的，而text-flow：ellipsis则在firefox和10.6版本以下opera上工作不了，让人相当头疼。 废话少说，判断的代码如下： var element = document.createElement('div'); if('textOverflow' in element.style){ element.style['textOverflow'] = 'ellipsis'; return element.style['textOverflow'] === 'ellipsis'; }else{ return false; } 这个判断的原理是：创建一个节点，判断其的style属性是否含有textOverflow属性，有则进一步判断是否支持ellipsis这个值。 判断是否支持ellipsis值依靠的是浏览器对于非法style值的处理，当遇到不支持的属性值时，浏览器会直接把这个值抛弃。因此这里就可以先给textOverflow赋值“ellipsis”，如果不支持，则其值肯定为空或者其它不等于“ellipsis”的值。因此只要判断赋值后的textOverflow是否等于“ellipsis”即可。]]></description>
			<content:encoded><![CDATA[<p>现在css3出来了， 添加了许多新特性，但由于并未全部浏览器都实现了这些特性，使用起来不太顺畅。因此，就想在使用的时候进行判断，如果有这个属性并且支持这种值，就css实现， 否者就用js实现。</p>
<p>比较明显的例子就是text-overflow这个属性，text-flow：clip是大部分浏览器都支持的，而text-flow：ellipsis则在firefox和10.6版本以下opera上工作不了，让人相当头疼。</p>
<p>废话少说，判断的代码如下：</p>
<pre class="js" title="code">var element = document.createElement('div');
if('textOverflow' in element.style){
    element.style['textOverflow'] = 'ellipsis';
    return element.style['textOverflow'] === 'ellipsis';
}else{
    return false;
}</pre>
<p>这个判断的原理是：创建一个节点，判断其的style属性是否含有textOverflow属性，有则进一步判断是否支持ellipsis这个值。</p>
<p>判断是否支持ellipsis值依靠的是浏览器对于非法style值的处理，当遇到不支持的属性值时，浏览器会直接把这个值抛弃。因此这里就可以先给textOverflow赋值“ellipsis”，如果不支持，则其值肯定为空或者其它不等于“ellipsis”的值。因此只要判断赋值后的textOverflow是否等于“ellipsis”即可。</p>
]]></content:encoded>
			<wfw:commentRss>http://imatlas.com/posts/detect-css-support/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【疯狂的菊花系列】使用CSS3制作PNG Loading图</title>
		<link>http://imatlas.com/posts/css3-png-loading</link>
		<comments>http://imatlas.com/posts/css3-png-loading#comments</comments>
		<pubDate>Sun, 23 Oct 2011 15:55:44 +0000</pubDate>
		<dc:creator>Azrael</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[loading]]></category>
		<category><![CDATA[png]]></category>

		<guid isPermaLink="false">http://imatlas.com/?p=554</guid>
		<description><![CDATA[Loading图, 也就是俗称的菊花, 大部分网站都会用到, 而一般情况用的都是gif动画, 但是gif能保存的颜色太少, 导致有渐变的图导出来后有毛边, 很不美观. 不过随着html5和css3的出炉, 我们终于可以把loading做的更加美观啦. 之前用png制作loading动画并不是没有, 但是需要使用js以及制作一张包含所有动作的png图片(就像跑马灯一样), 咱不熟ps, 画起来相当吃力. 而在html5/css3的带领下, 我们又有了两个新的方法: canvas和css动画. 但是我是相当讨厌用js代替css本身就可以实现的功能, 而且本人觉得在cavas上画图太累( 这不就是把ps搬到网页么&#8230;), 所以就把魔爪伸向了css3, 嘿嘿~~ 使用css3的animation属性, 一句js都不用写就达到目标. 当然现在animation还没全面支持, webkit内核的浏览器支持的比较好(-webkit-animation). 另外测试时发现我的firefox6也有animation属性了, 当然要加上私有前缀(-moz-). 这个动画的原理很简单, 给png加上transform的rotate属性, 使其相对原有位置旋转,再加上animation不断的跑就行了. 代码如下: @-webkit-keyframes loading{ 0%{ -webkit-transform: rotate(0deg); } 50%{ -webkit-transform: rotate(180deg); } 100%{ -webkit-transform: rotate(360deg); } } @-moz-keyframes loading{ 0%{ -moz-transform: rotate(0deg); } 50%{ -moz-transform: rotate(180deg); } [...]]]></description>
			<content:encoded><![CDATA[<p>Loading图, 也就是俗称的菊花, 大部分网站都会用到, 而一般情况用的都是gif动画, 但是gif能保存的颜色太少, 导致有渐变的图导出来后有毛边, 很不美观.</p>
<p>不过随着html5和css3的出炉, 我们终于可以把loading做的更加美观啦.</p>
<p>之前用png制作loading动画并不是没有, 但是需要使用js以及制作一张包含所有动作的png图片(就像跑马灯一样), 咱不熟ps, 画起来相当吃力.</p>
<p>而在html5/css3的带领下, 我们又有了两个新的方法: canvas和css动画.</p>
<p>但是我是相当讨厌用js代替css本身就可以实现的功能, 而且本人觉得在cavas上画图太累( 这不就是把ps搬到网页么&#8230;), 所以就把魔爪伸向了css3, 嘿嘿~~</p>
<p><span id="more-554"></span></p>
<p>使用css3的animation属性, 一句js都不用写就达到目标.</p>
<p>当然现在animation还没全面支持, webkit内核的浏览器支持的比较好(-webkit-animation). 另外测试时发现我的firefox6也有animation属性了, 当然要加上私有前缀(-moz-).</p>
<p>这个动画的原理很简单, 给png加上transform的rotate属性, 使其相对原有位置旋转,再加上animation不断的跑就行了.</p>
<p>代码如下:</p>
<pre class="css" title="code">    @-webkit-keyframes loading{
        0%{
            -webkit-transform: rotate(0deg);
        }
        50%{
            -webkit-transform: rotate(180deg);
        }
        100%{
            -webkit-transform: rotate(360deg);
        }
    }
    @-moz-keyframes loading{
        0%{
            -moz-transform: rotate(0deg);
        }
        50%{
            -moz-transform: rotate(180deg);
        }
        100%{
            -moz-transform: rotate(360deg);
        }
    }
    loading-img{
        -webkit-transform-origin: center center;
        -webkit-animation-name: loading;
        -webkit-animation-duration: 1.2s;
        -webkit-animation-timing-function: linear;
        -webkit-animation-iteration-count: infinite;

        -moz-transform-origin: center center;
        -moz-animation-name: loading;
        -moz-animation-duration: 1.2s;
        -moz-animation-timing-function: linear;
        -moz-animation-iteration-count: infinite;
    }</pre>
<p>效果点击<a title="css3 animation loading demo" href="http://imatlas.com/demo/css3-animation-loading-demo" target="_blank">这里</a>查看, 目前能在webkit内核浏览器以及firefox6(5以下没测)以上看到动画效果, 在ff6上面偶尔还有点卡, 太让人失望了╮(╯▽╰)╭~~</p>
<p>至于transform和animation的详细介绍, 我就不多说了, 可以点击下面的url查看:</p>
<p><a href="http://www.w3.org/TR/css3-animations/">http://www.w3.org/TR/css3-animations/</a></p>
<p><a href="http://css3.bradshawenterprises.com/animations/">http://css3.bradshawenterprises.com/animations/</a></p>
<p><a href="http://css3.bradshawenterprises.com/transforms/">http://css3.bradshawenterprises.com/transforms/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://imatlas.com/posts/css3-png-loading/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>子节点的margin溢出问题</title>
		<link>http://imatlas.com/posts/margin-overflow</link>
		<comments>http://imatlas.com/posts/margin-overflow#comments</comments>
		<pubDate>Fri, 10 Jun 2011 17:19:26 +0000</pubDate>
		<dc:creator>Azrael</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[body]]></category>
		<category><![CDATA[margin]]></category>
		<category><![CDATA[溢出]]></category>
		<category><![CDATA[空白]]></category>

		<guid isPermaLink="false">http://www.imatlas.com/?p=501</guid>
		<description><![CDATA[我们知道, css margin是会合并的, 有时会导致一些布局问题. 事实上margin还有存在一个溢出的问题: 当其父节点没设置宽高的时候, 子节点的margin超出父节点而存在, 会导致父节点的left/top产生了偏移, 导致position:absolute的节点定位不准确. 我们先看下面这个例子: &#60;!DOCTYPE html&#62; &#60;html&#62; &#60;head&#62; &#60;title&#62;Margin Overflow Test&#60;/title&#62; &#60;meta http-equiv="Content-type" content="text/html; charset=utf-8" /&#62; &#60;/head&#62; &#60;body&#62; &#60;div id="container"&#62; &#60;div id="header"&#62; &#60;h1&#62;This is a title&#60;/h1&#62; &#60;/div&#62; &#60;div id="content"&#62; content &#60;/div&#62; &#60;/div&#62; &#60;/body&#62; &#60;/html&#62; 这是一个很常见的布局: 一个container包含着一个header和content, header里面有着一个标题, 看上去一切正常, 我们给它加个样式上个色. html, body{ margin: 0; padding: 0; } #container{ background: red; [...]]]></description>
			<content:encoded><![CDATA[<p>我们知道, css margin是会合并的, 有时会导致一些布局问题.</p>
<p>事实上margin还有存在一个溢出的问题: 当其父节点没设置宽高的时候, 子节点的margin超出父节点而存在, 会导致父节点的left/top产生了偏移, 导致position:absolute的节点定位不准确.</p>
<p>我们先看下面这个例子:<br />
<span id="more-501"></span></p>
<pre class="js" title="code">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
     &lt;title&gt;Margin Overflow Test&lt;/title&gt;
     &lt;meta http-equiv="Content-type" content="text/html; charset=utf-8" /&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id="container"&gt;
        &lt;div id="header"&gt;
             &lt;h1&gt;This is a title&lt;/h1&gt;
        &lt;/div&gt;
        &lt;div id="content"&gt;
            content
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>这是一个很常见的布局: 一个container包含着一个header和content, header里面有着一个标题, 看上去一切正常, 我们给它加个样式上个色.</p>
<pre class="css" title="code">html, body{
	margin: 0;
	padding: 0;
}
#container{
	background: red;
	margin: 0;
        padding: 0;
}
#header{

}
#content{
	height: 200px;
	background: green;
}</pre>
<p>这个样式也没什么好说的, 把html,body,contaner可能影响边距的值的设置为0, 并给header和content上个色区分.</p>
<p>现在, 问题来了, 用ie9以及ff/chrome之流打开页面, 你会看到下面这个效果</p>
<div id="attachment_509" class="wp-caption alignnone" style="width: 310px"><a href="http://www.imatlas.com/wp-content/uploads/2011/06/margin-overflow.png"><img class="size-medium wp-image-509" title="margin-overflow" src="http://www.imatlas.com/wp-content/uploads/2011/06/margin-overflow-300x205.png" alt="" width="300" height="205" /></a><p class="wp-caption-text">图1</p></div>
<p>可以看到, 红色的header,绿色的content都正常, 但是header上面却有一片白色区域, 明明html,body,container都去掉了. 你可以点击<a href="http://www.imatlas.com/demo/margin-overflow-test" target="_blank">这里</a>进行测试.</p>
<p>通过一个个节点查找发现, h1是有默认的margin的, 在ff上是相当于设置了margin: 24px 0;用firebug的html视图看就很清楚了.</p>
<div id="attachment_514" class="wp-caption alignnone" style="width: 310px"><a href="http://www.imatlas.com/wp-content/uploads/2011/06/margin-overflow2.png"><img class="size-medium wp-image-514" title="margin-overflow2" src="http://www.imatlas.com/wp-content/uploads/2011/06/margin-overflow2-300x183.png" alt="" width="300" height="183" /></a><p class="wp-caption-text">图2</p></div>
<p>h1的margin-top正式图上的黄色部分,也就是图1的白色部分, 白色区域的罪魁祸首找到了, \(^o^)/~</p>
<p>理论上来说, h1的margin-top应该像它的margin-bottom一样,会导致header撑大的, 但是事实却不是这样,并且新浏览器都是这个表现, 难道w3c的标准就是这样规定的? 求告知.</p>
<p>不过问题还是要解决的, 只要给header添加1px的padding-top或者给header开头插入一个&amp;nbsp;就可以让header被h1撑开,但是个人觉得这两个方法都太过恶心, 弃之.</p>
<p>既然这个问题之存在标准浏览器上,那就可以使用标准的方法解决了. 方法就是给header添加一个:before伪类, 代码如下</p>
<pre class="css" title="code">#header:before{
    content: ".";
    display: block;
    height: 0;
    visibility: hidden;
}</pre>
<p>原理是: 给header的开头插入一个字符,设置为块级元素并且高度为零和让其不可见, 就可以让header自动撑高了.</p>
]]></content:encoded>
			<wfw:commentRss>http://imatlas.com/posts/margin-overflow/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>富文本兼容性问题归纳(ubuntu)</title>
		<link>http://imatlas.com/posts/richeditor-compatibility-ubuntu</link>
		<comments>http://imatlas.com/posts/richeditor-compatibility-ubuntu#comments</comments>
		<pubDate>Sat, 28 May 2011 06:31:07 +0000</pubDate>
		<dc:creator>Azrael</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[兼容问题]]></category>
		<category><![CDATA[富文本]]></category>
		<category><![CDATA[跨浏览器]]></category>
		<category><![CDATA[键盘事件]]></category>

		<guid isPermaLink="false">http://www.imatlas.com/?p=465</guid>
		<description><![CDATA[周五在ubuntu上测了一下重构后的富文本, 发现依然存在一个bug: 开启了中文输入法的话, 输入框就监听不到按钮事件了. 这个问题在webqq的聊天框一直存在着, 也有很多用户投诉, 具体表现为: 切换到中文输入法(ibus or other), 输入一段内容后, 第一次按下回车键可以发送消息, 之后的回车键都变成输入框的换行了. 花了一个中午排查了下, 总算找到原因了: 在ubuntu上面, 切换到中文输入法的时候, 只有第一次按下的keydown/keyup事件会被抛出, 之后都keydown和keyup事件都会被输入法接收且不会冒泡, 因此输入框没办法对按钮作出响应. 这个行为跟用什么浏览器无关, 我在firefox和chrome都发现有这个问题. 如果你的系统是ubuntu, 可以点击这里测试. 幸运的是, 经过测试, 发现keypress能响应回车键(以及其他ctrl+v等没触发出中文输入法的键盘行为), 因此可以把监听回车事件的代码转移到keypress中, 解决掉这个存留已久的bug. 注意: opera的keypress事件是没有charCode的, 且keyCode与keydown/keyup事件的keyCode一致, 无语&#8230; 2011-6-6 更新: 通过对ubuntu下面的firefox,chrome,opera测试, 有两个发现: 启用了中文输入法就会监听不到keydown的问题只出现在firefox上面 opera的keypress事件的keyCode与keydown的keyCode一致的情况只出现在window版本上, ubuntu的版本没发现该问题 因此, ubuntu的兼容就只用对firefox进行处理.]]></description>
			<content:encoded><![CDATA[<p>周五在ubuntu上测了一下重构后的富文本, 发现依然存在一个bug: 开启了中文输入法的话, 输入框就监听不到按钮事件了.</p>
<p>这个问题在webqq的聊天框一直存在着, 也有很多用户投诉, 具体表现为: 切换到中文输入法(ibus or other), 输入一段内容后, 第一次按下回车键可以发送消息, 之后的回车键都变成输入框的换行了.</p>
<p>花了一个中午排查了下, 总算找到原因了:</p>
<p>在ubuntu上面, 切换到中文输入法的时候, 只有第一次按下的keydown/keyup事件会被抛出, 之后都keydown和keyup事件都会被输入法接收且不会冒泡, 因此输入框没办法对按钮作出响应. 这个行为跟用什么浏览器无关, 我在firefox和chrome都发现有这个问题. 如果你的系统是ubuntu, 可以点击<a title="按钮事件测试" href="http://www.imatlas.com/demo/key-event-test" target="_blank">这里</a>测试.</p>
<p>幸运的是, 经过测试, 发现keypress能响应回车键(以及其他ctrl+v等没触发出中文输入法的键盘行为), 因此可以把监听回车事件的代码转移到keypress中, 解决掉这个存留已久的bug.</p>
<p><span style="color: #ff6600;"><strong>注意: </strong></span>opera的keypress事件是没有charCode的, 且keyCode与keydown/keyup事件的keyCode一致, 无语&#8230;</p>
<p><span style="color: #ff0000;">2011-6-6 更新:</span><span id="more-465"></span></p>
<p>通过对ubuntu下面的firefox,chrome,opera测试, 有两个发现:</p>
<ol>
<li>启用了中文输入法就会监听不到keydown的问题只出现在firefox上面</li>
<li>opera的keypress事件的keyCode与keydown的keyCode一致的情况只出现在window版本上, ubuntu的版本没发现该问题</li>
</ol>
<p>因此, ubuntu的兼容就只用对firefox进行处理.</p>
]]></content:encoded>
			<wfw:commentRss>http://imatlas.com/posts/richeditor-compatibility-ubuntu/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>高度超过4096像素的元素边框消失</title>
		<link>http://imatlas.com/posts/chrome-4096-border-disappear</link>
		<comments>http://imatlas.com/posts/chrome-4096-border-disappear#comments</comments>
		<pubDate>Mon, 23 May 2011 17:05:16 +0000</pubDate>
		<dc:creator>Azrael</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[4096]]></category>
		<category><![CDATA[border]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[消失]]></category>

		<guid isPermaLink="false">http://www.imatlas.com/?p=445</guid>
		<description><![CDATA[一个游戏群里的同事提到一个Bug, 在他的页面里, 实际内容是超过了6000px的, 而且给包含内容的容器加了个border: 1px dotted #fff, 这时在chrome中就发现左右边框消失了!!! 如果你的是chrome, 点击这里查看demo. 这个问题相当诡异, 如下: 1. 改成2px, border出来了! 2. 改成solid, 又出来了! 3. 高度低于4096, 呃, 又出来了&#8230;不过还是少了一些点, 改成4095就很正常了&#8230; 暂时还没有找到解决办法, chrome处理超过2的40次方之后的数字溢出了, chromium的项目里已经看到有人提了bug, 但是到目前为止(chrome 12.0.733.0)依然如此. 也许某天google大神心情好了, 会fix它吧. ╮(╯_╰)╭]]></description>
			<content:encoded><![CDATA[<p>一个游戏群里的同事提到一个Bug, 在他的页面里, 实际内容是超过了6000px的, 而且给包含内容的容器加了个border: 1px dotted #fff, 这时在chrome中就发现左右边框消失了!!!</p>
<p>如果你的是chrome, 点击<a title="chrome边框消失bug" href="http://imatlas.com/demo/chrome-border-disappear" target="_blank">这里</a>查看demo. 这个问题相当诡异, 如下:</p>
<p>1. 改成2px, border出来了!</p>
<p>2. 改成solid, 又出来了!</p>
<p>3. 高度低于4096, 呃, 又出来了&#8230;不过还是少了一些点, 改成4095就很正常了&#8230;</p>
<p>暂时还没有找到解决办法, chrome处理超过2的40次方之后的数字溢出了, chromium的项目里已经看到有人提了bug, 但是到目前为止(chrome 12.0.733.0)依然如此. 也许某天google大神心情好了, 会fix它吧. ╮(╯_╰)╭</p>
]]></content:encoded>
			<wfw:commentRss>http://imatlas.com/posts/chrome-4096-border-disappear/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

