在给nVidia 的nVision 作广告。Adam 老了很多,Jamie 还是老样子。两个人还是很恶搞 =v=

posted @ 2008-08-30 11:57 棕熊 阅读(52) | 评论 (1)编辑
     摘要:

上一讲的答案揭晓~ 撒花~

另外顺便讲个关于 word-break: break-all 的小 glitch

  阅读全文
posted @ 2008-07-04 19:31 棕熊 阅读(855) | 评论 (5)编辑
     摘要:

本文从HTML, CSS 原理等多个方面详细比较分析了 block 和 inline 的概念区别和表现区别。对前台开发感兴趣的可以看看哟。

  阅读全文
posted @ 2008-07-03 19:55 棕熊 阅读(2274) | 评论 (38)编辑
     摘要:

上次我讲了在实际应用font-family时会遇到的浏览器兼容性问题。这次我要从操作系统方面来讲如何安排字体族,并给出几个实用的字体组合。另外,由于中文字体的选择范围实在太小,所以本章中设计的内容主要以西文字体为主,比较适合上一章中的“方案二”。

  阅读全文
posted @ 2008-06-26 16:23 棕熊 阅读(2167) | 评论 (17)编辑

最近几周工作比较忙,实在无暇照顾自己的博客。今天偶然一看,居然大家都这么热心的留言,让偶大为感动@@

好在该忙得都快忙得差不多了,过几天后我会继续写以前没完成的文章,并且回复大家最近的留言。在这里我谢谢大家的热心关注了~ 偷偷的说,我可是很感动的哟

posted @ 2008-05-30 23:39 棕熊 阅读(747) | 评论 (9)编辑
     摘要:

大家有看过font set和一些要注意的基本问题以及通用字体族两篇文章后,应该对字体的基本有了一些了解。现在我们开始把这些知识都应用到实战中吧!

我会详细的说明规范中对font-family的实现,并且比较各大浏览器实际的实线效果,给出大家两个常用的字体编排方案。

  阅读全文
posted @ 2008-05-11 20:44 棕熊 阅读(2647) | 评论 (23)编辑
     摘要:

上一次我们简单的谈了一下font set和一些要注意的基本问题。今天我们继续字体这一话题,深入讲讲上次提到的“通用字体族”。首先是最常用的 serif 和 sans-serif 这两个通用字体族。

然后,我们会谈如何选用字体族、其他的一些字体族,以及一些有用的小知识等。

  阅读全文
posted @ 2008-05-06 00:19 棕熊 阅读(2789) | 评论 (34)编辑
     摘要:

谈谈网页设计中的字体应用第二讲正在制作中,不日即可和大家见面。在此之前,先插播一条新闻。

大家如果有用各种term软件上过BBS的话,对ANSI art 和ASCII art一定不会陌生,很多大学BBS也都有ANSI版。但是,今天一种新的技术将其带到了一个不同的高度……

  阅读全文
posted @ 2008-05-03 01:30 棕熊 阅读(2679) | 评论 (23)编辑
     摘要:

最近有不少人都提及了网页上该如何选择字体的问题。问题虽然小,但是却是前端开发中的基本,因为目前的网页,还是以文字信息为主,而字体,作为文字表现形式的最重要参数之一,自然有着相当重要的地位。可惜字体的重要性在很长时间内并没有得到足够的重视。很多人对字体的概念还是停留在 font-family: "宋体", Arial, Helvetica, serif 的阶段,却不明白为什么这样设置,这样设置是否合理等等。现在就让我说说字体的来龙去脉吧。

  阅读全文
posted @ 2008-04-29 18:27 棕熊 阅读(3687) | 评论 (49)编辑
     摘要:

关于本博客博皮的几点改进与释疑

偶到cnBlogs也有几天了,承蒙大家错爱,对偶的博皮提出了不少的意见。本来该早些就对大家的问题作出回复,但是想想,还不如直接优化一下,以便以最好的状态将这个博皮共享出来,给大家使用。所以隔了几天才写这篇文章,并借此机会总结一下这个博皮的优化项目,不会优化的项目以及今后的改进方向。

那么就让偶来逐一解答这几天来大家集中提出的问题

  阅读全文
posted @ 2008-04-27 20:26 棕熊 阅读(3229) | 评论 (59)编辑

I like gnus. I also like penguins, pythons, tortoises, tomcats, tigers, lynxes, foxes and of course, mice. In fact, I like animals so much, I often go on safari!

posted @ 2008-04-26 22:09 棕熊 阅读(2359) | 评论 (4)编辑
     摘要:

HTML5 出来其实也有很长一段时间了。因为这个那个的原因,在HTML5刚出炉时,我根本就没对它有任何重视。直到有一天突然看到某人搞了个东东,里面用到了HTML5中的一个特性——canvas,才突然意识到:“天哪!XHTML2还没站稳脚跟,就给这小子找到火柴了!”

  阅读全文
posted @ 2008-04-22 01:41 棕熊 阅读(4633) | 评论 (38)编辑
     摘要:

想看的点进来看吧,摘要上就不放了,厚厚

  阅读全文
posted @ 2008-04-20 21:16 棕熊 阅读(3805) | 评论 (47)编辑

JavaScript 里的 this 到底指得是什么?很多人都会告诉你 this 指的是当前对象。这样理解对么?在大多数情况下确实没错。比如我们经常会在网页上写这样的 JavaScript:

 

<input type="submit" value="提交" onclick="this.value='正在提交数据'" />

 

这里的this显然指的是当前对象,即这个提交按钮。通常,我们使用this的情况都与此类似。但是有什么情况不是这样的呢?

大家看看这个例子:

 

var foo = function() {
    console.log(
this);
}

foo();
new foo();

 

比较一下 foo() 和 new foo() 的运行结果,你会发现,前者 this 指向的并非 foo 本身,而是当前页面的window对象,而后者才真正的指向foo。这是为什么呢?

其实这牵涉到JavaScript的一条重要特性,就是所谓的“闭包”。闭包这个概念说复杂也不复杂,但也不是简单到能用一两句话说清。偶会在以后的文章中深入探讨这个Javascript 最重要的特性。现在,我要告诉大家的是,因为闭包的存在,JavaScript中的作用域变得相当重要。

所谓的作用域,简单的说,就是创建一个函数时在什么环境下创建的。而this变量的值,如果没有指定的话,就是函数当前的作用域。

 

在前面的例子里,foo() 函数是在全局作用域(这里就是window对象),所以this的值是当前的window对象。而通过 new foo() 这样的形式,其实是创建了一个foo()的副本,并在这个副本上进行的操作,所以这里的this就是foo()的这个副本。

 

这样讲可能有点抽象,大家来看个实际的例子:

 

<input type="button" id="aButton" value="demo" onclick="" />
<script type="text/javascript">
function demo() {
    
this.value = Math.random();
}

</script>

 

如果直接调用demo() 函数,程序就会报错,因为demo函数是在window对象中定义的,所以demo的拥有者(作用域)是window,demo的this也是window。而window是没有value属性的,所以就报错了。

图解

如果我们通过创建副本的方式,将这个函数的副本添加到一个HTML元素,那么他的所有者就成了这个元素,this也指代了这个元素:

 

document.getElementById("aButton").onclick = demo;

 

这样就将aButton的onlick属性设置为demo()的一个副本,this也指向了aButton。

图解

你甚至可以为多个不同的HTML元素创建不同的函数副本。每个副本的拥有者都是相对应的HTML元素,各自的this也都指向他们的拥有者,不会造成混乱。

图解

 

但是,如果你这样定义某个元素的onlick事件:

 

<input type="button" id="aButton" value="demo" onclick="demo()" />

 

点击这个button之后,你会发现,程序又会报错了——this又指向了window!

其实,这种方法并没有为程序创建一个函数,而只是引用了这个函数。

具体看一下区别吧。

 

使用创建函数副本的方法:

 

<input type="button" id="aButton" value="demo" />
<script type="text/javascript">
var button = document.getElementById("aButton");
function demo() {
    
this.value = Math.random();
}

button.onclick
= demo;
alert(button.onclick);
</script>

 

得到的输出是:

 

function demo() {
    
this.value = Math.random();
}

 

使用函数引用的方法:

 

<input type="button" id="aButton" value="demo" onclick="demo()" />
<script type="text/javascript">
var button = document.getElementById("aButton");
function demo() {
    
this.value = Math.random();
}

alert(button.onclick);
</script>

 

得到的输出是:

 

function onclick() {
    demo();
}

 

这样就能看出区别了吧。函数引用的方式中,onclick事件只是直接调用demo()函数,而demo()函数的作用域仍旧是window对象,所以this仍然指向window。

图解

 

这样就又引出了一个问题:既然函数副本这么好用,为什么还需要函数引用的方法呢?答案是性能。每新建一个函数的副本,程序就会为这个函数副本分配一定的内存。而实际应用中,大多数函数并不一定会被调用,于是这部分内存就被白白浪费了。而使用函数引用的方式,程序就只会给函数的本体分配内存,而引用只分配指针,这样效率就高很多。程序员么,节约为主,恩

所以我们来看一个更好的解决方案:

 

<script type="text/javascript">
function demo(obj) {
    obj.value 
= Math.random();
}

</script>
<input type="button" value="demo" onclick="demo(this)" />
<input type="button" value="demo" onclick="demo(this)" />
<input type="button" value="demo" onclick="demo(this)" />

 

这样,效率和需求就都能兼顾了。

 

最后再多讲一句:在前面的文章里,我特别强调了“如果没有指定this的话”。其实this是可以指定的。Function对象有两个方法:call()和apply()。这两个方法都支持指定一个函数中的this。有兴趣的话您可以去查一下Javascript的手册,看看这两个函数都是干什么用的。而我们经常用的 new foo() 可以用以下这段伪代码来描述:

 

function new (somefunction) {
    
var args = [].slice.call(arguments, 1);
    somefunction.prototype.constructor 
= somefunction;
    somefunction.apply(somefunction.prototype, args);
    
return somefunction.prototype;
}

 

现在明白了,在本文开头的第一个例子里,new foo() 的 this 为什么是 foo 了吧

 

文中部分内容引自 http://www.quirksmode.org/js/this.html

posted @ 2008-04-20 20:06 棕熊 阅读(3305) | 评论 (47)编辑
     摘要:

事先声明:图片有版权,无端转载禁

《Noir Theater》是偶最近关注中的新漫画,noir 风格的漫画。画家和作者都是西班牙人,画家还是偶的好友。因为剧本写得很好,画家也是牛人一个,所以有打理赶超同类漫画《Blacksad》的势头。

贴图前先说说这个Blacksad。也是一个西班牙作家+一个西班牙画家,画的 noir 风格漫画。剧情设定在二战后的芝加哥,围绕着退伍老兵、现私家侦探的John Blacksad 展开的故事...

  阅读全文
posted @ 2008-04-19 18:45 棕熊 阅读(960) | 评论 (3)编辑
     摘要:

最近搞了个iPod Touch, 挺不错的。

iPod Touch 里有一个功能:除了能将网页添加到收藏夹外,还能选择将网页的快捷方式添加到 SpringBoard, 并且将这张网页的截图作为快捷方式的图标显示。

这里面有个小窍门。Apple 的 iPhone 开发手册上说,这个图标是可以定制的,实现起来也很简单。

  阅读全文
posted @ 2008-04-18 22:49 棕熊 阅读(1316) | 评论 (3)编辑
     摘要: 随着前台开发日益受到重视,客户端代码比重日益增加的今天,如何在javascript开发里应用MVC模式,这个问题似乎会一直被提到,所以偶在这里粗略的谈一下自己的看法吧。MVC模式的基本理念,是通过把一个application封装成model, view和controller三个部分达到降低耦合,简化开发的目的。这么说很空洞,大家可以实际看个例子:1<selectid="selAnimal"&... 阅读全文
posted @ 2008-04-17 23:11 棕熊 阅读(1684) | 评论 (21)编辑

Hihi, 大家好~

本人棕熊,经Dflying gg 和老赵 gg 介绍,发现了cnBlogs这样有趣的地方,于是也特地来注册了一个账户,一来方便学习其他人的经验,二来也能把偶的心得告诉大家,酱紫。

偶的专项是front-end developing, 现在正和Dflying gg, 老赵 gg 合作开发一个项目,专职负责前端代码的开发。所以偶的blog也会以讨论front-end的技术为主,不论是初学级的,还是进阶的应用,只要有需要,都会涉及一些。权且在这里打个小广告,大家有兴趣的可以点导航栏上的“订阅”按钮。至于这个按钮什么作用,大家点了试试看就知道了

 

好吧,言归正传,既然是开发人员,那么就给cnBlogs一个小小的 hello world 程序做见面礼吧!

这个想法是在偶定制blog时想到的。希望能做一个漫画的comic bubble 的效果,让标题上的人物每隔一定时间就说一句搞笑的对话。这些对话的数据保存在偶的另一个网站上,而且这个网站上已经有了相应的web service,这里所要做的只是向这个service发出请求,然后把请求的结果在页面中显示。

通常要实现这种功能,一般会想到的解决方法是使用AJAX。但因为安全性沙盒的问题,一般浏览器都会禁止跨域的XMLHttpRequest。不过没关系啦,这个问题已经有很多成熟的解决方案。这里我使用的,是所谓的on-demand 方法。这个方法的核心是利用动态生成的SCRIPT元素代替XHR,来实现对跨域web service的调用。

 

以偶blog上的comic bubble为例:

 

- 需求
  • 从 ruxpinsp1.cnblogs.com 访问 mywebsite.com 上的 "GetFunnyWords" service

 

- 解决方法
  • 首先,在 ruxpinsp1.cnblogs.com 的HTML代码里加上这么个东东:
    1<span id="scriptH"></span><!-- 这个东东是用来盛放动态生成脚本的容器 -->
  • 然后,我们需要一堆javascript脚本
    // setWords 方法将 GetFunnyWords 服务返回的对话显示在页面中
    //
     @param r::String 这个就是返回的对话
    var setWords = function(r) {document.getElementById('randomWords').innerHTML=r;};

    // requestFunnyWords 通过新建一个SCRIPT元素,并设置其SRC属性,达到调用 GetFunnyWords 服务的目的
    var requestFunnyWords = function(){
        
    var s=document.createElement('SCRIPT');
        s.src
    ='http://myWebsite.com/GetFunnyWords'// 这个就是 GetFunnyWords 服务的 URL
        document.getElementById('scriptH').appendChild(s);
    }
    ;
    requestFunnyWords();
    这样,我们在cnblogs.com里要做的工作就告一段落了。
  • 然后我们来看看GetFunnyWords的返回吧
    1setWords("Hello World!");
    好玩的地方就在这里:GetFunnyWords的返回的返回本身正是一个javascript, 而这个javascript中,调用了我们在cnblogs.com里定义的setWords()方法,并通过这个方法,动态的设置了comic bubble里的内容。

 

这个方法并不是很困难吧。要注意的是,偶新建了一个SPAN元素用来放置动态生成的SCRIPT元素,而并没有把这个SCRIPT元素直接appendChild到BODY元素上。有兴趣的话大家可以考虑一下这是为什么,呵呵

posted @ 2008-04-16 17:11 棕熊 阅读(1259) | 评论 (31)编辑

版权声明

除特别声明外,本站一切资源均适用于
Creative Commons License This work by 棕熊 is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 2.5 China Mainland License
PS: 这个blog目前暂时不能完美支持IE6