日志分类:html+css

HTML5和CSS3特性检测-Modernizr

时间:2011年07月18日作者:愚人码头查看次数:3,752 views评论次数:2

HTML5和CSS3逐渐成为WEB前端开发的必须技能,开发过程中检查不同浏览器对HTML5和CSS3支持情况成了是一件非常烦心的事情。

比如我们要检查某个浏览器是否支持canvas元素:


function SUP_canvas() {
var elem = document.createElement('canvas');
return !!(elem.getContext && elem.getContext('2d'));
};

是否支持WebGL:


function SUP_webgl() {
return !!window.WebGLRenderingContext;
};

还有很多html5和css3其他属性…,值得庆幸的是我们发现了Modernizr开源Javascript库

Modernizr是一个用来检测浏览器是否支持HTML5以及CSS3特性的基于MIT证书的开源Javascript库。Modernizr的功能其实很简单,就是用js检测浏览器对HTML5/CSS3的特性支持情况,支持某个属性,就在页面的标 签上添加一个相应的class,不支持的话就添加一个no-前缀的class,比如,如果检测的浏览器支持video标签,MODERNIZR就会 在标签上添加video类,否则,添加no-video类。

最新的Modernizr是2.0.6版本的,如果你下载开发(development)版本,给我们提供全部的内容,如果要下载production版本的modernizr,我们会发现,我们可以根据自己的需要进行订制。在其下载页面上,我们选择自己所需的HTML和CSS特性,然后生成一个javascript文件。这么做会极大程度上减少冗余代码,减少不必要的检测,对web前端这个很看重用户体验的地方,性能就是一点一点压出来的。

使用Modernizr也非常简单,只要而且必须在标签里应用就可以了,无需调用Modernizr_init()之类的初始化方法。modernizr必须放在里,最好放在css声明之后,因为HTML5 Shiv(用以在IE中启用HTML元素)必须在之前执行,而且要使用modernizr添加的class,需要阻止FOUC。还有一点在于html声明里的no-js的class。它设置了一个默认状态,如果页面禁用了javascript我们就可以知道了。

用调试工具我们看到在html标签里加了很多样式类,从这些样式类里我们可以完全看出您使用的浏览器对HTML5和CSS3支持情况,以“no-”开头的,就是这个浏览器不支持的特性:

知道了这些特性的支持情况我们就可以使用css选择器做一些表现上的差异,比如,如果不支持标签,那么test类文本为红色。
.canvas .test {
color: blue;
}

.canvas .test {
color: red;
}

同样,我们也可以在JavaScript利用这些特性检测的结果,代码:


if(Modernizr.canvas){
//开始画图啦!

}else{
alert("fuck!");
}

Modernizr 2还提供了一种load机制,方便代码管理,比如:


Modernizr.load({
test: Modernizr.canvas,//检查是否支持标签及相应的属性
yep : 'canvas.js',//如果支持标签及相应的属性那么加载canvas.js,
nope: 'no-canvas.js'//如果不支持标签及相应的属性那么加载no-canvas.js,
});

如果直接用的是development版本的modernizr,你会发现,根本就没有Modernizr.load,因为它是作为一个单独文件发布的:yepnope.js。而在production版本,我们选择将其包含在modernizr里。

官方网址:http://www.modernizr.com/

标签:,分类:html5+css3, JS

IE9的css hack

时间:2011年06月22日作者:愚人码头查看次数:12,625 views评论次数:41

以前写过《IE8的css hack》,ie9一出css hack也该更新,以前一直没关注,今天在内部参考群mxclion分享了IE9的css hack,拿出来也分享一下:


select {
background-color:red\0;  /* ie 8/9*/
background-color:blue\9\0;  /* ie 9*/
*background-color:#dddd00;  /* ie 7*/
_background-color:#CDCDCD;  /* ie 6*/
}

注意写hack的顺序,其中:

  1. background-color:red\0;IE8和IE9都支持;
  2. background-color:blue\9\0; 仅IE9支持;

更多其他hack关注:http://www.css88.com/archives/1681
感谢mxclion,感谢内部参考群!

===============华丽的分割线===============

今天在http://blog.vervestudios.co/blog/post/2011/05/13/IE9-Only-CSS-Hack.aspx上看到另一种hack:


#element {
    color:orange;
}
#element {
    *color: white;    /* IE6+7, doesn't work in IE8/9 as IE7 */
}
#element {
    _color: red;     /* IE6 */
}
#element {
    color: green\0/IE8+9; /* IE8+9  */
}
:root #element { color:pink \0/IE9; }  /* IE9 */
标签:,分类:html+css

JavaScript本地存储实践(html5的localStorage和ie的userData)

时间:2011年06月11日作者:愚人码头查看次数:11,390 views评论次数:20

本地存储解决方案很多,比如Flash SharedObject、Google Gears、Cookie、DOM Storage、User Data、window.name、Silverlight、Open Database等。
借用网上的一张图来看下目前主流的本地存储方案:

  • Cookie在web中得到广泛应用,但局限性非常明显,容量太小,有些站点会因为出于安全的考虑而禁用cookie,cookie没有想象中的那么安全,Cookie 的内容会随着页面请求一并发往服务器。
  • Flash SharedObject使用的是kissy的store模块来调用Flash SharedObject。Flash SharedObject的优点是容量适中,基本上不存在兼容性问题,缺点是要在页面中引入特定的swf和js文件,增加额外负担,处理繁琐;还是有部分机子没有flash运行环境。
  • Google GearsGoogle的离线方案,已经停止更新,官方推荐使用html5的localStorage方案。
  • User Data: 是微软为IE专门在系统中开辟的一块存储空间,所以说只支持Windows+IE的组合,实际测试在2000(IE5.5)、XP(IE6、IE7),Vista(IE7)下都是可以正常使用的。在XP下,一般位于C:\Documents and Settings\用户名\UserData,有些时候会在C:\Documents and Settings\用户名\Application Data\Microsoft\Internet Explorer\UserData。在Vista下,位于C:\Users\用户名\AppData\Roaming\Microsoft\Internet Explorer\UserData;单个文件的大小限制是128KB,一个域名下总共可以保存1024KB的文件,文件个数应该没有限制。在受限站点里这两个值分别是64KB和640KB,所以如果考虑到各种情况的话,单个文件最好能控制64KB以下。
  • localStorage: 相对于上述本地存储方案,localStorage有自身的优点:容量大、易用、强大、原生支持;缺点是兼容性差些(chrome,  safari, firefox,IE 9,IE8都支持 localStorage,主要是IE8以下版本不支持)、安全性也差些(所以请勿使用localStorage保存敏感信息)。

主要说说localStorage和UserData: 继续阅读:JavaScript本地存储实践(html5的localStorage和ie的userData)»

开源中最好的Web开发的资源

时间:2011年06月08日作者:愚人码头查看次数:9,638 views评论次数:7

转载自:http://coolshell.cn/articles/4795.html

学习HTML 5编程和设计

继续阅读:开源中最好的Web开发的资源»

愚人节页面翻转效果的实现

时间:2011年04月02日作者:愚人码头查看次数:5,662 views评论次数:13

昨天愚人节,逛pinterest.com的时候,发现页面上的有些地方翻转了,着实被愚了一把。

所以在自己的博客上也加了一下效果,具体的实现通过ie滤镜和css3旋转,具体代码:


html{filter:fliph}/*ie fliph(水平翻转滤镜),还有flipv垂直翻转滤镜*/
body{-webkit-transform: rotateY(180deg);
transform: rotateY(180deg);
-moz-transform: skew(0deg, 180deg) scale(-1, 1);
-o-transform: skew(0deg, 180deg) scale(-1, 1);}

一个意外的结果是昨天的访问数增加了1000+;

标签:分类:html5+css3

【IE6的疯狂系列】IE6下使用滤镜后链接不能点击的BUG

时间:2010年12月23日作者:愚人码头查看次数:7,319 views评论次数:16

大家可能都知道IE6下使用DXImageTransform.Microsoft.AlphaImageLoader滤镜(用于PNG32 Alpha透明)后链接不能点击的BUG,大家也都知道只要在a标签上加相对定位的属性(position:relative)就可以点击了。

见demo页面中的例子1:http://www.css88.com/demo/ie6bug_filter/(使用IE6查看);

非常好!但是如果在使用滤镜容器的中加上绝对定位,悲剧发生了!a标签上加相对定位的属性(position:relative)链接依然不能点击!

见demo页面中的例子2:http://www.css88.com/demo/ie6bug_filter/(使用IE6查看);

经过近半个小时的折腾终于有了解决方案,就是在使用滤镜的容器外面再加上一个容器,这个容器加上绝对定位。a标签上加相对定位的属性(position:relative)就可以点击了。

见demo页面中的例子3:http://www.css88.com/demo/ie6bug_filter/(使用IE6查看);

原因可能如下:

DXImageTransform.Microsoft.AlphaImageLoader可能改变了容器的层级,真好正好定位属性也能改变元素层级。

如果你知道原因或者有更好的解决方案欢迎留言斧正,探讨。谢谢!

另:

【IE6的疯狂系列】IE6 BUG大全(bug征集、整理中..)

标签:,分类:html+css

HTML5 中的一些新特性

时间:2010年12月08日作者:愚人码头查看次数:6,636 views评论次数:20

简洁的DOCTYPE:

HTML5 只有一个简单的文档类型:<!DOCTYPE html>。它不使用版本,因此该文档类型适用所有版本的HTML。

简单易记的语言标签:

你并不需要在<html> 中使用xmlns 或xml:lang标记。<html lang=”en”> 将对HTML5 有效。

简单易记的编码类型:

你现在可以在meta 标签中使用”charset”:<meta charset=”utf-8″ />

不需要闭合标签:

在HTML5 中,空标签(如:br、img 和input )并不需要闭合标签。

废弃的标签:

下面这些标签并不被HTML5 支持: <acronym>、<applet>、<basefont>、<big>、<center>、<dir>、<font>、<frame>、<frameset>、<noframes>、<s>、<strike>、<tt>、<u> 和<xmp>。

更加语义化的新增标签:

HTML5 新增的一些新标签除了不仅仅是更具语义的<div> 标签的替代品,并不提供额外的功能。这些都是新增的标签:<article>、<section>、<aside>、<hgroup>、 <header>,<footer>、<nav>、<time>、<mark>、<figure> 和<figcaption>。 继续阅读:HTML5 中的一些新特性»

标签:分类:html5+css3

模拟宽度自适应的输入框

时间:2010年11月24日作者:愚人码头查看次数:5,734 views评论次数:9

很早以前就看过ytzong的《宽度自适应的输入框》这篇文章,感觉很不错,非常详实,YUI的栅格决定宽度,内容决定高度确实很实用。

个人认为ytzong的这个方法有两点非常麻烦:

  • <b><b><input type=”text”></b></b>需要套2层b标签;
  • 公式:.fluid-input-inner{padding-right:输入框左边框 + 输入框右边框 + 输入框左padding + 输入框右padding}也很麻烦经常忘记。

前段时间在一个项目中真好用到,同事啄米鸟模拟了一个宽度自适应的输入框,原理和ytzong的大致相同,但是解决了以上两个麻烦点。当然也有不足的地方。 继续阅读:模拟宽度自适应的输入框»

标签:分类:html+css

【IE6的疯狂系列】IE6下position:absolute相邻元素margin-top失效的bug

时间:2010年08月24日作者:愚人码头查看次数:5,739 views评论次数:9

昨天发现了一个ie6的bug,绝对定义(position:absolute)的相邻元素margin-top竟然会失效;

看demo把(请用ie6围观):http://www.css88.com/demo/absolute-bug/absolute-bug.html

这里有几个条件:

  1. 相邻元素是有width属性的,如果去掉width属性,margin-top又会生效,点击查看:http://www.css88.com/demo/absolute-bug/absolute-bug-1.html
  2. 增加相邻元素浮动,margin-top也会又会生效;点击查看:http://www.css88.com/demo/absolute-bug/absolute-bug-2.html

如果没有复杂的背景什么的可以使用padding-top替换margin-top;

还可应在相邻元素间插入一个空标签的方法:


<div style="position: absolute; width: 500px; top: 0; left: 0; height: 30px; background-color: #666;">此处显示新 Div 标签的内容</div>
<!--[if IE 6]>
<div></div>
< ![endif]-->
<div style="margin-top: 35px; width: 100px; float: left; background-color: #3fc;">此处eeeeeeeee显示新 Div 标签的内容</div>

点击查看:http://www.css88.com/demo/absolute-bug/absolute-bug-4.html

————————————————
另赠送一个IE6下与float元素相邻的position:absolute元素消失BUG
围观地址:http://blog.dengsa.com/?p=342 http://www.webchina110.cn/?p=105

分类:html+css

使<pre>的内容自动换行

时间:2010年07月29日作者:愚人码头查看次数:8,890 views评论次数:11

<pre> 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。

<pre> 标签的一个常见应用就是用来表示计算机的源代码。

而我们经常碰到的一个问题是如果一个代码上碰到有图片或者网页地址就会使代码很长,结果会造成页面撑开或者代码超出边界。非常难受,如果用overflow:hidden那么会将原来的代码隐藏掉,用overflow:auto则会出现滚动条,代码也不方便阅读。

点击查看:http://www.css88.com/demo/pre/index-1.html

今天折腾了一个晚上终于搞定<pre>的内容自动换行的问题:

1.先尝试使用:word-wrap: break-word;将内容自动换行,IE,OP,Chrome,Safari都可以,FF就悲剧了。

点击查看:http://www.css88.com/demo/pre/index-2.html

2.查看了pre的浏览器默认样式: 继续阅读:使<pre>的内容自动换行»

标签:分类:html+css
Page 2 of 2412345678910Last »