博客 - 文章更新

纯css3实现酷炫网站icon

2010-03-26 上午 - html/css/xml/xsl - - -

css3实现网站logo小图标

预览效果:demo

上图,可不是用画图软件制作的,而是浏览器生成。惊讶吧!css3的威力,巧妙的运用了圆角边框,阴影,背景渐变…等css3新特性。赞叹之余,我也亲自的动手制作了一下,就当学习一下了。以前了解过css3,但没动手写过,发觉有些属性还真是不好记,要区分三类浏览器(Gecko 、Presto、WebKit),就越发的麻烦了。

其中不少地方的写法很新颖,充分的利用了伪类(before和after),伪类配合绝对定位,双倍边框、椭圆、三角形等写法也很受教,真真切切体会到了css3的强大,希望css3时代早日到来。

原文地址:Pure CSS social media icons

推荐阅读:pure CSS speech bubbles

2 Comments »

HTML 5 几个应用案例

2010-03-22 下午 - html/css/xml/xsl -

  光说HTML 5的强大了,贴几个应用,感受一下(请使用支持HTML5的浏览器)。

  1. Gordon

      号称:An open source Flash runtime,一个JS+SVG应用。解析SWF文件,然后播放。不需要Flash插件,不可思议!但并不是所有的flash都能解析播放的。

  2. 基于HTML 5的在线画板

      酷毙了!功能强大,画图毕后还能保存一张PNG格式的图片。

  3. SublimeVideo

      HTML 5视频的一个强大的应用。播放器的操控很便捷,播放、暂停、拖动进度、时间显示,甚至还能够全屏播放,这里的全屏是浏览器窗口的范围,不是整个屏幕。全屏后播放器的控制条还能随鼠标的状态渐隐渐显,体验真是great!

  4. HTML 5的YouTube(需要翻个“围墙”)

      最后我们再来看看伟大的YouTube,看她是如何将HTML 5付诸现实的。当然你需要有支持HTML 5的浏览器,还有H.264编码器。

  HTML 5究竟离我们还有多远,我相信不会很快。直到IE9的普及,HTMl 5才能说真正意义上的敢派上“战场”!IE6这个绊脚石都还没瓦解,谈其它的,显得有点荒谬!IE6这个话题扯远了,罢了。保持那份期待还是美好的!

2 Comments »

HTML5来了

2010-03-22 下午 - html/css/xml/xsl -

  HTML5现在火,不火就怪了。很好,很弓虽大,哈哈!希望是个“喜剧”,而且不断的“演”下去。

  先了解一下HTML5:

W3C 在 1 月 22 日发布了最新的 HTML 5 工作草案。HTML 5 工作组包括 AOL, Apple, Google, IBM, Microsoft, Mozilla, Nokia, Opera 以及数百个其他的开发商。HTML 5 中的一些新特性:嵌入音频、视频、图片的函数、客户端数据存储,以及交互式文档。其他特性包括新的页面元素,比如 <header>, <section>, <footer>, 以及 <figure>。

通过制定如何处理所有 HTML 元素以及如何从错误中恢复的精确规则,HTML 5 改进了互操作性,并减少了开发成本。

  记录HTML5标签元素相对HTML4.01标签的不同处:

未作修整的元素此表不一一列出,查看详细表格
HTML5新增标签
标签 描述
<article> 定义 article。
<aside> 定义页面内容之外的内容。
<audio> 定义声音内容。
<canvas> 定义图形。
<command> 定义命令按钮。
<datagrid> 定义树列表 (tree-list) 中的数据。
<datalist> 定义下拉列表。
<datatemplate> 定义数据模板。
<details> 定义元素的细节。
<dialog> 定义对话(会话)。
<embed> 定义外部交互内容或插件。
<event-source> 为服务器发送的事件定义目标。
<figure> 定义媒介内容的分组,以及它们的标题。
<footer> 定义 section 或 page 的页脚。
<header> 定义 section 或 page 的页眉。
<m> 定义有记号的文本。
<meter> 定义预定义范围内的度量。
<nav> 定义导航链接。
<nest> 定义数据模板中的嵌套点。
<output> 定义输出的一些类型。
<progress> 定义任何类型的任务的进度。
<rule> 为升级模板定义规则。
<section> 定义 section。
<source> 定义媒介源。
<time> 定义日期/时间。
<video> 定义视频。
HTML5删减标签
<acronym> 不支持。定义首字母缩写。
<applet> 不支持。定义 applet。
<basefont> 不支持。请使用 CSS 代替。
<big> 不支持。定义大号文本。
<center> 不支持。定义居中的文本。
<dir> 不支持。定义目录列表。
<font> 不赞成。定义文本的字体、尺寸和颜色。
<frame> 不支持。定义子窗口(框架)。
<frameset> 不支持。定义框架的集。
<isindex> 不支持。定义单行的输入域。
<noframes> 不支持。定义 noframe 部分。
<noscript> 不支持。定义 noscript 部分。
<s> 不支持。定义加删除线的文本。
<strike> 不支持。定义加删除线的文本。
<tt> 不支持。定义打字机文本。
<u> 不支持。定义下划线文本。

记录HTML5标签元素相对HTML4.01属性的不同处:

未作修整的属性此表不一一列出,查看详细表格
HTML5新增属性
属性 描述
contenteditable true、
false
设置是否允许用户编辑元素。
contentextmenu id of a menu element 给元素设置一个上下文菜单。
draggable true、
false、
auto
设置是否允许用户拖动元素。
irrelevant true、
false
设置元素是否相关。不显示非相关的元素。
ref url or elementID 引用另一个文档或本文档上另一个位置。仅在 template 属性设置时使用。
registrationmark registration mark 为元素设置拍照。可规定于任何 <rule> 元素的后代元素,除了 <nest> 元素。
template url or elementID 引用应该应用到该元素的另一个文档或本文档上另一个位置。
HTML5删减属性
acceskey a character 设置访问一个元素的键盘快捷键。不支持。HTML4.01版本已不支持。

记录HTML5标签元素相对HTML4.01事件属性的不同处:

未作修整的事件属性此表不一一列出,查看详细表格
HTML5新增事件属性
属性 描述
onabort script  发生 abort 事件时运行脚本。
onbeforeonload script  在元素加载前运行脚本。
oncontextmenu script  当菜单被触发时运行脚本。
ondrag script  只要脚本在被拖动就允许脚本。
ondragend script  在拖动操作结束时运行脚本。
ondragenter script  当元素被拖动到一个合法的放置目标时,执行脚本。
ondragleave script  当元素离开合法的放置目标时。
ondragover script  只要元素正在合法的放置目标上拖动时,就执行脚本。
ondragstart script  在拖动操作开始时执行脚本。
ondrop script  当元素正在被拖动时执行脚本。
onerror script  当元素加载的过程中出现错误时执行脚本。
onmessage script  当 message 事件触发时执行脚本。
onmousewheel script  当鼠标滚轮滚动时执行脚本。
onresize script  当元素调整大小时运行脚本。
onscroll script  当元素滚动条被滚动时执行脚本。
onunload script 当文档卸载时运行脚本。
HTML5删减事件属性
onbeforeunload script  在元素未加载前运行脚本。
onreset script  当表单重置时执行脚本。不支持。

  总结:HTML5提供了一系列新的元素和属性,并新增了新的视频和音频功能(<audio>、<video>),取消了一些过时的标签、属性、事件属性。强化了网页的表现性能,追加了本地数据库等Web应用功能。

推荐阅读:

  1. 5 Exciting Things to Look Forward to in HTML 5
  2. 各浏览器对css3和html5的兼容表
  3. 维基百科:HTML 5
  4. W3C:HTML 5
  5. Google 发布介绍 HTML 5 新特性的视频

No Comments »

你会使用html5 doctype吗?

2010-03-20 下午 - html/css/xml/xsl - - -

taobao的head里一些标签“瘦身”了!doctype、meta、script、style…让我好奇的主要是doctype的写法。

后来仔细一查,google,百度,口碑,支付宝,阿里巴巴都是这样。

为了解疑,在淘宝ued陈成的blog找到新首页开发PPT详解 —— HTML规范一文,再一对照Doctype和渲染模式对照表,疑惑解决了,同时也学到了不少的新知识。

记录一下:

html5 的 doctype:

<!DOCTYPE html>

html5 的其他标签:

<meta charset="gbk" />
<script src=""></script>
<style></style>
<link rel="stylesheet" href="" />

这种格式,所有主流浏览器都进入标准模式。这样一来就不会出现明显的兼容事件,也就无后顾之忧。不过问题还是有的,html5 doctype与图片多余空白一文就有提到——除IE7和IE6,其他支持HTML5的浏览器都在图片与容器之间出现了多余空白,并且给出了解决方法,很赞。另,iframe也受到影响,解决方法和图片一致!

最优的解决方法:

img{vertical-align:middle} /*or bottom top and so on*/

补充:

秦歌:不仅 html5 的 doctype 会引发此类问题,还有 html4.01 Strict ,这应该是标准与准标准之间的问题。

推荐阅读:

  1. 给HTML文档设置XHTML Doctype是有害的
  2. Optimizing Optimizing HTML

No Comments »

补习:跨平台的javascript事件

2010-03-20 下午 - JS/Ajax/AS - -

javascript的事件模型有三种:netscape、IE、W3C/Safari。

事件流又分冒泡型事件和捕获型事件。主要的浏览器代表是netscape、IE7及以下版本。

DOM事件流:同时支持冒泡型事件和捕获型事件。火狐、Safari、IE8等支持DOM事件流的浏览器。

以下内容仅以IE和火狐作为代表进行对比及处理。

添加、移除事件:

IE

oTarget.attachEvent("on" + sEventType, fnHandler);

oTarget.detachEvent("on" + sEventType, fnHandler);

火狐:

oTarget.addEventListener(sEventType, fnHandler, false);

oTarget.removeEventListener(sEventType, fnHandler, false);

解决方法:

function addEventHandler(oTarget, sEventType, fnHandler){
    
if(oTarget.addEventListener){
        
oTarget.addEventListener(sEventType,fnHandler,false);
    
}else if(oTarget.attachEvent){
        
oTarget.attachEvent("on" + sEventType,fnHandler);
    
}else{
        
oTarget["on" + sEventType]=fnHandler;
    
}
}
function removeEventHandler(oTarget, sEventType, fnHandler){
    
if(oTarget.removeEventListener){
        
oTarget.removeEventListener(sEventType,fnHandler,false);
    
}else if(oTarget.detachEvent){
        
oTarget.detachEvent("on" + sEventType,fnHandler);
    
}else{
        
oTarget["on" + sEventType]=null;
    
}
}

获取事件对象:

IE

IE中,事件对象是window对象的一个属性event。

window.event

火狐:

DOM标准中,event对象必须作为唯一参数传给事件处理函数。

arguments[0] 或者 直接传入参数

解决方法:

function getEvent(){
    
if(window.event){
        
return window.event;
    
}else{
        
return getEvent.caller.arguments[0];
    
}
}

注:针对火狐的方法请参考 JavaScript 获取事件对象的一个注意点

获取事件属性:

相同处:

  1. 获取事件类型(名称):oEvent.type
  2. 获取按键代码(keydown/keyup事件):oEvent.keyCode
  3. 检测是否按下了Shift、Alt、Ctrl键:oEvent.shiftKey、oEvent.altKey、oEvent.ctrlKey
  4. 获取客户端鼠标事件坐标:oEvent.clientX、oEvent.clientY
  5. 获取鼠标距屏幕边沿坐标:oEvent.screenX、oEvent.screenY

不同处:

  1. 获取目标(事件源):

    IE:oEvent.srcElement

    火狐:oEvent.target

  2. 获取字符代码:

    IE:oEvent.keyCode

    火狐:oEvent.charCode

  3. 阻止事件发生:

    IE:oEvent.returnValue = false

    火狐:oEvent.preventDefault()

  4. 停止事件冒泡:

    IE:oEvent.cancelBubble = true

    火狐:oEvent.stopPropagation()

  5. 还有一些属性仅有火狐支持,比如eventPhase、isChar、pageX、pageY、

解决方法:

function formatEvent(oEvent){
    
if (isIE && isWin) {
        
oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0;
        
oEvent.eventPhase = 2;
        
oEvent.isChar = (oEvent.charCode > 0);
        
oEvent.pageX = oEvent.clientX + document.body.scrollLeft;
        
oEvent.pageY = oEvent.clientY + document.body.scrollTop;
        
oEvent.preventDefault = function () {
            
this.returnValue = false;
        
};
        
if (oEvent.type == "mouseout") {
            
oEvent.relatedTarget = oEvent.toElement;
        
} else if (oEvent.type == "mouseover") {
            
oEvent.relatedTarget = oEvent.fromElement;
        
}
        
oEvent.stopPropagation = function () {
            
this.cancelBubble = true;
        
};
        
oEvent.target = oEvent.srcElement;
        
oEvent.time = (new Date).getTime();
    
}
    
return oEvent;
}

最后综合起来,EventUtil对象封装起来,就很好的解决了事件的跨平台兼容了。下载:eventutil.js

此文中涉及到的浏览器检测功能,超出了本文的范围,略过!detect.js 提供代码方便下载测试。

本文参考自《javascript高级程序设计》,详细可翻阅该书籍。

1 Comment »

补习:激活浏览器模式的doctype

2010-03-19 下午 - html/css/xml/xsl - -

  内容太多,copy过来也没意思,决定留个链接,以后忘了随时再跳过去阅读。好文总是让人受益匪浅的!由衷地感谢原文作者——Henri Sivonen

  原文:Activating Browser Modes with Doctype

  译文:用doctype激活浏览器模式 – 感谢秦歌的翻译。

  主流浏览器的引擎:Names of Browser Engines

  下节准备补习:javascript事件中IE与火狐的不同之处

No Comments »

补习:CSS盒模型

2010-03-19 下午 - html/css/xml/xsl - - -

正常盒模型:

实际显示宽度 = 设置的width或height + 边框 + 填充

IE 5.x及更前的版本:

实际显示宽度 = 设置的width或height(边框和填充被包含在里面)

怪异模式的IE8以下版本将使用IE5的盒模型,这点很重要,要记清了!

  盒子宽度未定义且是静态(没有浮动)或者相对定位的,宽度为100%,边框和填充会向内推动,而不是向外扩展。若明确设置宽度为100%,那么则相反。

  绝对定位盒子,没设置宽度,宽度则跟随内容自动缩放,只受相对定位的外层元素的宽度影响而换行,切记body是一个相对定位的盒子。

  浮动盒子,没设置宽度,与绝对定位的盒子相似。不同点是受外层元素的宽度影响而换行(该元素不需要设置相对定位)。

  块级元素,上下边界会重合,以数值较大一方为基准。浮动的块级元素不会有此问题。块级元素不能为内联元素的子元素。

  内联元素,行与行之间的距离不受边界和填充的影响。不过,内联元素也是盒子,也有边距、填充、边框,只是变现得有点“反常”。

  边界值可为负,填充值不可为负。

  下节准备补习:浏览器模式(怪癖模式、标准模式、准标准模式)

No Comments »

笔记:文字排版行缩进

2010-03-10 下午 - html/css/xml/xsl -

做个笔记,具体实现效果看下面图片,偶不知如何用语言来描述了。具体原理偶也说不清了,反正能解决了问题就是王道。

效果就在画圈的地方

text-indent: -12pt; margin-left: 12pt;

具体数值是随行内缩进的距离变动的,上图的距离需要12pt,距离越远数值也就跟随着越大,反之,亦然。

利用li配合list-style-type的decimal来实现固然简单,但是如果需要复制文字再粘贴后保留前面数值,那么就…

No Comments »