|
2010年1月22日
公司网站最近一个月统计出来的访客分辨率报表图:
可见,目前使用800*600的几乎是微乎其微了,1024还是居于上风,目前19,21寸甚至更大的显示正在逐步被广泛使用,所以N年前流行的778,780等等都好像是几个世纪以前的事情了。
再看一组数据
上面都是Alexa全球排名前100的站点,而且WordPress的皮肤,百分之90以上都是960px宽。为什么设计师们都喜欢这个数据(950px/960px)呢?以下部分转自网页栅格系统研究(1):960的秘密,作者:玉伯
设计师们对苹果情有独衷。在 1024 x 768 的分辨率下,打开Firefox:
自然状态下,Firefox窗体的大小约为 974 x 650. 减掉左右两边7px的边框,网页的实际大小为上图中的红色部分,高宽为 960 x 650.
数字背后的奥妙
上面的“自然”出现,细究自然是不让人信服的。苹果系统的设计者们在没有喝醉酒的情况下选择了960,而不是其它什么1000之类的整数,自然另有奥妙。
科学界有很多问题都可以归结到数学问题上,我们也从数学着手:
960可以分解为2的6次方乘以3和5, 这使得960可以分割成以下宽度的整数倍:
2, 3, 4, 5, 6, 8, 10, 12, 15, 16, 20, 24, 30, 32, 40,
48, 60, 64, 80, 96, 120, 160, 192, 240, 320, 480
共26种(26 = 7 * 2 * 2 – 2, 减去2是去掉1和960自身),我们标记为:
N(960) = N(2^6 * 3 * 5) = 26
根据上面的算法,可以得到:
N(360) = N(2^3 * 3^2 * 5) = 22
N(480) = N(2^5 * 3 * 5) = 22
N(720) = N(2^4 * 3^2 * 5) = 28
N(750) = N(2 * 3 * 5^3) = 14
N(800) = N(2^5 * 5^2) = 16
N(960) = N(2^6 * 3 * 5) = 26
N(1000) = N(2^3 * 5^3) = 14
N(1024) = N(2^10) = 9
N(1440) = N(2^6 * 3^2 * 5) = 34
N(1920) = N(2^7 * 3 * 5) = 30
根据直觉(严格证明也不难,不过还是留给数学系的学生去证明吧),我们得到一个有趣的结论:
要使得N(width)最大,width的取值有两个系列:
A系列: …, 320, 720, 1440, …
B系列: …, 480, 960, 1920, …
N越大,可组合的宽度值就越多。对栅格系统来说,这意味着越灵活!
目前绝大多数显示器都支持 1024 x 768 及其以上分辨率。为了有效的利用屏幕宽度同时保证栅格的灵活度,可以看出960是非常合适的。这样,在目前主流显示器下,960就成为网页栅格系统中的最佳宽度了。(也许不久的将来,将会流行1440)
以上内容转自http://lifesinger.org/blog/?p=375
摘要: 非常好的一篇文章,作者李战,阿里软件的老顽童,混迹IT江湖多年。在数据库、Web架构、前端技术,及数据库全文检索方面有深厚内力.相信你读完此文,必定功力大增。
引子
编程世界里只存在两种基本元素,一个是数据,一个是代码。编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力。
数据天生就是文静的,总想保持自己固有的本色;而代码却天生活泼,总想改变这个世界。
你看,数据代码间的关系与... 阅读全文
蓝色理想: http://www.blueidea.com/ 网站设计人员之家,主要关于网站前端设计内容,通常搜CSS内容会搜到这里。
http://blog.bingo929.com/注前端开发/网页设计/网站可用性/用户体验,暴风彬彬的趣味互联网生活…
淘宝网用户体验设计UED: http://ued.taobao.com/blog/
口碑网用户体验设计UED: http://ued.koubei.com/
阿里妈妈用户体验设计UED: http://ued.alimama.com/
阿里巴巴(中国站) 用户体验部: http://www.aliued.cn/
阿里软件UED团队: http://www.alisoftued.com
19楼UED团队: http://ued.dukuai.com/blog/
用户为中心的设计(UCD),UCD大社区,http://ucdchina.com/
个人技术博客:
李会军:http://www.dotneteye.cnorg 去过博客园的应该都知道吧,神仙级专家。
赵劼:http://www.cnblogs.com/JeffreyZhao/ 同上,为博客员知名专家,特佩服他!
淘宝玉伯:http://lifesinger.org/blog/ 淘宝前端,对前端细节研究很深入!博客更新也算频繁。
淘宝怿飞:http://www.planabc.net/ 淘宝前端,花名圆心,博客内容也很值得看。
cssrain:http://www.cssrain.cn/ 懒人开发人员一定要去看看哦,资源超多,很多效果例子。特别是jquery。
源码站:
http://www.codeplex.com 微软的.NET源码发布站,很多很好的.NET源代码
用户体验(User Experience,简称UX 或 UE)是一种纯主观的在用户使用一个产品(服务)的过程中建立起来的心理感受。因为它是纯主观的,就带有一定的不确定因素。个体差异也决定了每个用户的真实体验是无法通过其他途径来完全模拟或再现的。但是对于一个界定明确的用户群体来讲,其用户体验的共性是能够经由良好设计的实验来认识到。计算机技术和互联网的发展,使技术创新形态正在发生转变,以用户为中心、以人为本越来越得到重视,用户体验也因此被称做创新2.0模式的精髓。”—–百度百科
现在,几乎人人都在谈、在做用户体验,有为了用户体验而用户体验的;有不知何为用户体验,就乱指挥一通的;有做了几天可用性改进就宣称飞跃的…..当然,也有很多是踏踏实实为广大人民做实事,做好产品设计的。
不管怎样,以下的思考文字中希望有那么一点点是闪光的。
看了百度百科的词条,结合自己的经验,可以这么理解:用户体验,是通过接触某样有形或者无形的事物后,建立在用户身上的一个范围比较广的情感叠加,跟乐高积木是一样一样的,堆得好,可以很高,某一块不稳,就会全倒下。那,到底有多广呢?
1.一个购书体验:流程流畅度
给自己买一本书,我想到的是淘宝和当当,有人会说:买书当然去当当或者卓越了。我不是这么认为的,首先,都是网购,淘宝也卖书,并且能讨价还价,能了解更多细节,而当当不能,但如果在淘宝上价格太高,没有当当划算,且不是很急着买,那我会选择当当。
—–这里面有两个点:网络购物习惯养成的条件反射 和 买卖家之间的交流 ,这两个是体验的一部分。
决定上当当后,打开首页,logo旁的“十年品质 放心低价”,有点暖,而导航下左边的这个绿色突出的区域也表明,当当主要核心业务就是书!整个配色在视觉上挺舒服,而导航和搜索也让我很快找到我要买的书—《教父》。
——站点的载入速度是个大问题,当当基本能在3秒内打开首页,不错的优化。广告语和用色贴合国内消费人群的心理,起码对于我来说,觉得:可信赖,不太乱。
找到我要的书后,我点击了购买,进入了我的购物车,有一个疑虑、不舒服:
—–不知道这个是好,还是坏,可能对于不同的人,有不同的感受,这个推荐本身是很好的,但让我疑惑的是,它大面积的空间和众多黄色按钮,让我找不着北了,因为到这步,我心里想着:该结算了,但处于商业目的,推荐区域在一定程度上(或许我比较闲的时候,推荐对我有用)干扰了我。
接下来的结算流程很顺利,我选择的是货到付款,很好的是:最后提示我,发货地点是广州,会在2-3天后发货,邮箱也很快收到订单生成的邮件。接下来就是等待,三天后,接到声音不太舒服的电话,说是当当网的,我想,应该是书到了。可怜的是,对方收钱时,零钱不够。
—–最终是买到书了,快递的小伙子找不了我的零钱,我也没要了,书的包装不太好。
整个过程,总体打分8.5分。总的来说,这本书的购买的体验流畅度是很满意的,没有出现意外的中断,要知道体验的流程能完整的走完才意味着,这个产品、这个服务,是可用的,这是根基,其他的视觉效果和折扣等等,都是建立在他之上。而流畅度,就跟用户在这个过程中碰到疑惑和不解的强烈程度是成反比的,想提高流畅度,就需要捋清楚,让这个核心购买流程以最短的时间完成,减少干扰。
2.边缘体验,一样的重要
上面的购书例子,有个地方很重要,那就是最后的线下体验,我把他作为边缘体验的一种,有别于线上的核心业务。
订单下来后,系统能根据我提交的送货地址,选出最近的发货地点,减少物流时间,并且让购买者知道,这个点是好的,说明:我一直为你着想。
但快递环节却有点问题,因为存在一定的不可控因素。送快递的人,需要经过一定的培训,否则,是在砸当当的牌子。电话中的语气让人不舒服,书的包装问题也让人不安,书角磨破了,就这两个点,购买者就有可能把整个交易撤销。
属于边缘体验范畴的还有很多,例如:你到了友商网举办的一个论坛,门前的海报是否能够传递本次论坛的信息、是否能够将友商网的品牌进行诠释,给你的良好感觉有多少?再例如市场营销人员的着装和谈吐,在用户眼里,在一定程度上,也在间接体验他们的产品,起码,穿着拖鞋的营销,不会给人好的感觉。
边缘体验,一样重要。
3.无形的体验
无形的体验有两种,一种是某用户在使用、体验产品后得出口碑传播给另外的用户或者潜在用户,对于后者,他已开始无形情感体验;另一种是用内而外的,是生产此产品的团队或者说这个企业由内发出的一些信息,有意的或无意的信息。
对于第一种,有时候口碑会决定了某个用户是否与产品有缘,举个例子,小姨买了一个xx牌子的冰箱,用了两个月,灯管坏了,打开冰箱门灯不亮了,联系维修后好景不长,还是坏,于是她对死党说:以后打死也不会买xx牌的东西了,这个死党有可能以后就跟这个牌子绝缘了,因为她对“它”的无形体验很不好。当然,这个口碑产生的根源,就是产品质量本身。
而第二种范围包括的就比较大了,如果是上市公司,那么你的财务状况是否良好;组织结构是不是频繁大调整;员工整体对外的信息放射是否正面;网络媒体,传统媒体传播的信息是否有利公司发展(不管是不是软文),这些,都是用户或者潜在用户、普通人可能接触到的一面,这也是一个无形的体验。
4.引领用户的“体验”
在初步发展阶段,无数产品和服务都是跟随用户需求,用户需要什么,就给什么,以找准需求点为重中之重,这个是对的,但到了产品成熟期,到了市场占有率足够高后,需要考虑的,就是引导潮流,引领用户朝双赢的方向。web中的视觉概念设计,汽车中的概念车,走的,就是这个路线。
5.核心产品体验
这个放在最后是因为是人都知道,核心产品,必须做好可用性,通过不断迭代,适当做好减法,提供一个体验好的产品。具体到各个产品和服务各不相同,无需展开。
总之,用户体验设计并不复杂,但需要耐得住性子,需要注意触角,因为,从接触这个品牌那一刻起,用户体验就在进行,是叠加还是消耗呢?就看能否尽量做到人人UE,能否将这些好的idea引导、聚合。
一,关于CSS Sprite
CSS Sprites是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了。对于当前网络流行的速度而言,不高于200KB的单张图片的所需载入时间基本是差不多的,所以无需 顾忌这个问题。
按照yahoo的rules for high performance web sites的原则,应当较少Client与Server端间 的HTTP Request次数。通过CSS Sprites方法将多张图片组装成单独的一张图片,可以有效减少HTTP请求 的次数。
当整幅图片载入完成后,你就可以使用CSS方法通过设置背景位置的方式完成所需图片的准确调用。
加速的关键,不是降低重量,而是减少个数。传统切图讲究精细,图片规格越小越好,重量越小越好,其实规格大小无所谓,计算机统一都按byte计算。客户端每显示一张图片都会向服务器发送请求,所以,图片越多请求次数越多,造成延迟的可能性也就越大。
二,CSS Sprite的使用
有几篇关于CSS Sprites的文章,基本上把其原理和机制说明得很清楚。
What Are CSS Sprites?
How to create CSS sprites
Creating Rollover Effects with CSS Sprites
Building a Dynamic Banner with CSS Sprites
High Performance Web Sites中关于CSS Sprites的内容3.2. CSS Sprites
三,CSS Sprite的例子
[原文:http://blog.rexsong.com/?p=746#comments]
1. 图片限制(Image Slicing)
典型如文本编辑器,小图标特别多,打开时一张张跑出来,给用户的感觉很不好。如果能用一张图解决,则不会有这个问题,比如百度空间、163博客、Gmail都是这么做的。
Image Slicing’s Kiss of Death
http://www.alistapart.com/articles/sprites
2. 单图转滚(Single-image Rollovers)
触发切换图片的需求,传统方案得重新请求新图片,因为网络问题经常造成停留或等待。如果能把多种状态合并成一张图,就能完美解决,然后再使用背景图技术模拟动态效果。
ColorScheme Ratings
http://demo.rexsong.com/200608/colorscheme_ratings/
3. 延长背景(Extend Background Image)
如果图片的某边可以背景平铺无限延长,则不需要每个角、每条边单独搞出来,图片能少一个就少一个。其实,这个理论还可以扩展到四角容器里,好处是能大大简化HTML Structure。
Extend Background Image
http://demo.rexsong.com/200705/extend_background_image/
综合案例
Google Korea(1和2技巧)
http://demo.rexsong.com/200705/google_korea/
CSS Menus(2和3技巧)
http://demo.rexsong.com/200705/css_background_menus/
四,CSS Sprites的问题
由于IE6存在的background的flicker问题IE6/Win, background image on <a>, cache=‘check every visit’: flicker!,有人针对此问题提出了解决方案Fast Rollovers Without Preload
关于IE6的flicker问题,fivesevensix.com上有一篇很不错的研究文章Minimize Flickering CSS Background Images in IE6
另外:brunildo.org的CSS tests and experiments是关于css各种功能不错的参考手册和测试工具。
五,相关资源
What Are CSS Sprites?
http://www.peachpit.com/articles/printerfriendly.aspx?p=447210&rl=1
CSS Sprites: Image Slicing’s Kiss of Death
http://www.alistapart.com/articles/sprites/
CSS Sprites Generator
http://www.csssprites.com/
http://spritegen.website-performance.org/
Fast Rollovers Without Preload
http://wellstyled.com/css-nopreload-rollovers.html
JavaScript Sprite Animation Using jQuery
http://www.sitepoint.com/blogs/2007/07/20/javascript-sprite-animation-using-jquery/
http://www.sitepoint.com/blogs/2007/07/05/css-using-percentages-in-background-image/
How to create CSS sprites
http://fatagnus.com/how-to-create-css-sprites/
Creating Rollover Effects with CSS Sprites
http://www.devarticles.com/c/a/Web-Style-Sheets/Creating-Rollover-Effects-with-CSS-Sprites/
Building a Dynamic Banner with CSS Sprites
http://www.devarticles.com/c/a/Web-Style-Sheets/Building-a-Dynamic-Banner-with-CSS-Sprites/
CSS Sprites and IE/Win Flicker Issue
http://www.brajeshwar.com/2006/css-sprites-and-iewin-flicker-issue/
css用法测试工具:CSS tests and experiments
http://www.brunildo.org/test/index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript" language="javascript" >
<!--
window.onload=function(){
document.getElementById("box").style.backgroundImage="url(1.jpg)";
var box=document.getElementById("box");
box.onclick=function(){
//alert(box.style.backgroundImage);
//alert(typeof(box.style.backgroundImage));
if(box.style.backgroundImage.indexOf("1.jpg")!=-1)
{box.style.backgroundImage="url(2.jpg)";}else {box.style.backgroundImage="url(1.jpg)"}
}
}
-->
</script>
<style type="text/css">
<!--
#box{width:800px;height:600px;}
-->
</style>
</head
<body>
<div id="box">
</div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
<!--
#wrap{background:#000;}
#content{margin-left:250px;height:1000px;background:#963;}
#sideber{width:240px;float:left;height:1000px;background:#369;}
-->
</style>
</head>
<body>
<div id="wrap">
<div id="sideber"> </div> <!--要让浮动元素放前面-->
<div id="content"> </div>
</div>
</body>
</html>
不同的浏览器对CSS的解释都有一点出入,特别是padding, line-height这些要细微控制的地方,下面的hack基本可以解决这个问题:
• 在属性前加下划线(_),那么此属性只会被IE6解释
• 在属性前加星号(*),此属性只会被IE7解释
• 在属性值后面加"\9",表示此属性只会被IE8解释
详细出处参考:http://www.jb51.net/css/24946.html
各浏览器CSS hack兼容表:
整体测试代码示例:
复制代码代码如下:
.test{
color:#000000;
color:#0000FF\0;
[color:#00FF00;
*color:#FFFF00;
_color:#FF0000;
}
复制代码代码如下:
#menu { line-height: 23px; }/* firefox 浏览器实行这句定义 */
#menu { line-height: 26px\9; }/*ie6,ie7,ie8 这句定义主要尖对IE8来hack*/
#menu { *line-height: 23px; }/*ie6,ie7 这句定义主要尖对IE7来hack*/
#menu { _line-height: 23px; }/*ie6 浏览器优先实行这句定义*/
或者写成一句,注意顺序
#menu { line-height:23px; line-height: 26px\9; *line-height: 23px; _line-height:23px; }
或者
* html #menu { line-height: 23px; } /* IE6 浏览器实行这句定义 */
*+html #menu { line-height: 23px; }/* IE7 浏览器实行这句定义*/
其他说明:
1、如果你的页面对IE7兼容没有问题,又不想大量修改现有代码,同时又能在IE8中正常使用,微软声称,开发商仅需要在目前兼容IE7的网站上添加一行代码即可解决问题,此代码如下:
<meta http-equiv="x-ua-compatible" content="ie=7" />
2、body:nth-of-type(1) 如果这样写,表示全局查找body,将会对应第一个<body>。
3、还有其他写法,比如:
*html #test{}或者 *+html #test{}
4、*+html 对IE7的hack 必须保证HTML顶部有如下声明:
http://www.w3.org/TR/html4/loose.dtd
5、顺序:Firefox、IE8、IE7、IE6依次排列。
小知识:什么是CSS hack?
由于不同的浏览器,比如IE6、IE7、IE8、Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。
这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。
这个针对不同的浏览器写不同的CSS code的过程,就叫CSS hack,也叫写CSS hack。
下面是补充:
复制代码代码如下:
selector{
property:value; /* 所有浏览器 */
property:value\9; /* 所有IE浏览器 */
+property:value; /* IE7 */
_property:value; /* IE6 */
}
详细出处参考:http://www.jb51.net/css/24946.html
border-radius(圆角)的几点说明.
border-radius(圆角)的几点说明:
border-radius:长度
Firefox支持border-radius(圆角):-moz-border-radius:2px;
webkit内核的Safari和Chrome支持border-radius(圆角):-webkit-border-radius:2px;
Opera支持border-radius(圆角):border-radius:2px;
IE不支持border-radius(圆角)
我们还可以随意指定圆角的位置,左上、左下、右上、右下四个方向。在firefox、webkit内核的Safari和Chrome和opera(css3)、中的具体书写格式如下:
-moz-border-radius-topleft / -webkit-border-top-left-radius / border-top-left-radius
-moz-border-radius-topright / -webkit-border-top-right-radius / border-top-right-radius
-moz-border-radius-bottomleft / -webkit-border-bottom-left-radius / border-bottom-left-radius
-moz-border-radius-bottomright / -webkit-border-bottom-right-radius /border-bottom-right-radius
border-radius(圆角)还有其他一些用法,Firefox、webkit内核的Safari和Chrome和opera(css3)其他写法有些略微的差异,具体可以查看以下网址:https://developer.mozilla.org/en/CSS:-moz-border-radius
http://www.the-art-of-web.com/css/border-radius/
http://dancewithnet.com/2008/12/27/border-radius-and-rounded-corner/
eg:/* content */
.blockcommon{
margin-left: 10px;
margin-right: 10px;
-moz-border-radius: 3px;
-khtml-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
background: #fff;
border: 1px solid #eed8c6;
}
CSS代码简化在工作中是非常有益的,也是必要的。在编写CSS代码时,经常会出现冗余的代码,为了提高代码的质量及文件压缩到最小,使代码具有可读性,不得不把CSS代码简化。
margin
margin-top:1px;
margin-right:1px;
margin-bottom:1px;
margin-left:1px;
代码简化为:margin:1px
margin-top:1px;
margin-right:2px;
margin-bottom:1px;
margin-left:2px;
代码简化为:margin:1px 2px
margin-top:1px;
margin-right:2px;
margin-bottom:3px;
margin-left:2px;
代码简化为:margin:1px 2px 3px
margin-top:1px;
margin-right:2px;
margin-bottom:3px;
margin-left:4px;
代码简化为:margin:1px 2px 3px 4px
注意:当属性值是0的时候单位可以不写如:0px 直接就写成0
padding
padding的书写方法和margin相类似
padding-top:1px;
padding-right:1px;
padding-bottom:1px;
padding-left:1px;
代码简化为:padding:1px
padding-top:1px;
padding-right:2px;
padding-bottom:1px;
padding-left:2px;
代码简化为:padding:1px 2px
padding-top:1px;
padding-right:2px;
padding-bottom:3px;
padding-left:2px;
代码简化为:padding:1px 2px 3px
padding-top:1px;
padding-right:2px;
padding-bottom:3px;
padding-left:4px;
代码简化为:padding:1px 2px 3px 4px
border
border-width:1px;
border-style:solid;
border-color:#000000;
代码简化为:border:1px solid #000
background
background-color:#CCFFFF;
background-image:url(图片路径);
background-repeat:repeat-x;
background-position:5px 4px;
代码简化为:background:#CFF url(图片路径) repeat-x 5px 4px
font
font-size:26px;
font-weight:bold;
font-family: “宋体”;
代码简化为:font:26px bold “宋体”
color属性值
color:#000000;
color:#ff0000;
代码简化为:color:#000, color:#f00
CSS中的!important是一个非常重要的属性,有时候发挥着非常大的作用,52CSS.com这方面的知识并不是非常多,我们看下面的文章,对它作比较感观的了解。
前几天写一些CSS代码的时候又难为我了,因为那个该死的IE6对CSS的支持是如此的差劲,以前我还没注意过,因为做的东西基本都是基于IE的,可是我这次为博客写的CSS要支持不止IE一个浏览器,可恨的是我装的Windows 7,这里面自带的是IE8浏览器,我自认为已经没有问题了,可是打开IE6,仍然出现错位,于是我决定看看IE6到底是什么情况。
我把所有的CSS块儿全部使用边框包起来,结果看到在IE中两个div之间的距离明显要宽于其他浏览器,比如你写一个div的margin属性为20px,那么在IE中就好像是40px一样,这也就是为什么本来精度计算的刚刚好,在IE下却偏偏错位的原因。
后来我看到了!important这个属性,这个属性其实也是css规范中的,结果IE6愣是不支持,也正因为它不支持,才让很多的CSSer们找到了解决的方法。一般来讲,在css中,如果在同一个css块中写下两个同样的属性,那么其实是按照最下面的来执行的,比如说:
Example Source Code [www.52css.com]
.home{
margin-left:20px;
margin-left:40px;
}
那么在执行的时候其实是按照40px来执行的,!important的出现就是为了让用户自己设置被执行语句的优先级。如果把上面的语句改为:
Example Source Code [www.52css.com]
.home{
margin-left:20px!important;
margin-left:40px;
}
那么在火狐、google浏览器以及IE7以上版本下将会按照20px来执行,而在IE6下却仍然按照40px来执行,因为IE6并不支持!important规范,我们就可以按照这个规则来满足IE6的设计需要,什么时候发现IE6和其他浏览器显示效果不同,那么就设置两个,在上面的一个加入!important标记,而下面的一句则不需要添加,这样IE6就按照下面的来执行了。资深的CSSer说:如今的CSS处处!important。这可都是天杀的IE6惹的祸,大家说IE6就是一坨代谢产物一点也不为过。
记录学习,工作中遇到的点点滴滴的问题。
1、需要把 background-attachment 属性设置为 "fixed",才能保证该属性在 Firefox 和 Opera 中正常工作。
例子:
<html>
<head>
<style type="text/css">
body
{
background-image:url('eg_bg_03.gif');
background-repeat:no-repeat;
background-position:center;
background-attachment:fixed;
}
</style>
</head>
<body>
</body>
</html>
2、
CSS中 clear:both;可以终结在出现他之前的浮动
语法: clear : none | left |right | both
参数:
none : 允许两边都可以有浮动对象
both : 不允许有浮动对象
left : 不允许左边有浮动对象
right : 不允许右边有浮动对象
说明: 该属性的值指出了不允许有浮动对象的边。请参阅float属性。 对应的脚本特性为clear
示例:
div { clear : left }
img { float: right }
<div style="clear:both;"></div>
主要是用在div套div的结构中。如果内div是浮动的,一般都需要clear浮动,不然的话内div会超出外div的框架
所用什么时候用clear:both;就很重要,一般我们在需要清除浮动的时候用到clear:both;不要轻意用到clear:both;因为它也有副伯用.
我们写一个clear:both;的例子:
<div style="float:left;width:100px;"> clear:both第1行第1列,</div>
<div style="float:left;width:700px;"> clear:both第1行第2列,</div>
<div style="clear:both;"> clear:both第2行。</div>
<div style="float:left;width:100px;"> 第1列,</div>
<div style="float:left;width:700px;"> 第2列,</div>
<div>第三列</div>
------------------------------------------------------------------------------------------------
<div style="float:left;width:100px;"> 第1列,</div>
<div style="float:left;width:700px;"> 第2列,</div>
<div style="clear:both;"></div>
<div>第三列</div>
3css疑难问题收集
表格与内联对象不换行:
table{
width:30em;
table-layout:fixed;/* 只有定义了表格的布局算法为fixed,下面td的定义才能起作用。 */
}
td{
width:100%;
word-break:keep-all;/* 不换行 */
white-space:nowrap;/* 不换行 */
overflow:hidden;/* 内容超出宽度时隐藏超出部分的内容 */
text-overflow:ellipsis;/* 当对象内文本溢出时显示省略标记(...) ;需与overflow:hidden;一起使用。*/
}
.text-overflow {
display:block;/*内联对象需加*/
width:31em;
word-break:keep-all;/* 不换行 */
white-space:nowrap;/* 不换行 */
overflow:hidden;/* 内容超出宽度时隐藏超出部分的内容 */
text-overflow:ellipsis;/* 当对象内文本溢出时显示省略标记(...) ;需与overflow:hidden;一起使用。*/
}
关于随机显示图片的代码很多,但有的只能在IE下才有效果,如果换在Firefox或其他浏览器下就会失去效果,能做到两全的JS真的很少,今天给大家介绍一个很简单的JS随机显示图片的代码。
以下是代码:
// JavaScript Document
var m=10; //随机显示图片的总数量
var n=Math.floor(Math.random()*m+1)
document.write ("<img src='/banner/banner_"+n+".gif' border=0 galleryimg=no>");
//
上面代码的意思是图片保存在/banner/文件夹下,根据设置的图片总数量,分别放入10张从banner_01.gif到banner_10.gif的图片,在执行这个JS时,它会随机显示从banner_01.gif到banner_10.gif的图片。
保存这个JS为banner.js。
在网页相应的地方写入调用代码
以下是代码:
<script language="JavaScript" src="/Js/banner.js"></script>//-->
//调用
这段代码可以在IE和Firefox下有效显示。
简单的JavaScript随机显示图片广告的效果
兼容性:IE6+ FireFox2+ Opera9+
<script>
/******************************************************
* 简单的JavaScript随机显示图片广告的效果 Share JavaScript (http://www.ShareJS.com)
* 使用此脚本程序,请保留此声明
* 获取此脚本以及更多的JavaScript程序,请访问 http://www.ShareJS.com
******************************************************/
var str=new Array("http://www.sharejs.com/code/image/img/1.jpg","http://www.sharejs.com/code/image/img/2.jpg","http://www.sharejs.com/code/image/img/3.jpg");
var a;
a=str[parseInt(Math.random()*(str.length))];
document.write("<img src="+a+">");
</script>
这个选择器的正式名称(根据W3C)是临近同属组合器。我觉得这个名称既长又复杂,因此把它简称为相邻选择器。虽说是"相邻",但相邻选择器选取的却是一个元素的下一个元素。基于图3-14中的标记,图3-24中的标记示范了相邻选择器的形式。
注意:
IE 6本身并不支持相邻选择器;请查阅本书的网址www.wrox.com/go/beginning_css2e以获取兼容性方面的帮助。
|
图 3-24 |
在图3-24中,可以看到加号被用来表示两个元素之间的相邻关系。你在这点上也许会有疑问:这么做看起来很舒服,但实际用途是什么?难道不能单独引用div#body来达到同样的效果吗?为什么需要一个相邻选择器?很高兴你这样问。在特定的情况下这个选择器会发挥作用,比如当几份HTML文档引用同一份样式表时。在一部分文档中,带有id名称heading的<div>元素和带有id名称body的<div>元素是相邻的,即它们在源文件中相继出现。在其他文档中这两个元素或许不是相邻的。如果你对这两种理论上不同的文档有不同的模板需求的话,自然会想通过某种方法来引用那些相邻的元素,这就是相邻选择器实际应用的一个例子。正如我在上一节"直接子选择器"中提到的那样,有时你不想创建新的id和类名。在某些情况下,当你使用相邻选择器时,能够避免创建新的类和id名称。
在接下来的概念验证型例子中,你将亲自试验相邻选择器。
试一试 相邻选择器
例3-5 按以下步骤,了解相邻选择器是如何工作的。
1. 在文本编辑器中输入以下标记:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en'>
<head>
<title>Next Sibling Selectors</title>
<link rel='stylesheet' type='text/css' href='Example_3-5.css' />
</head>
<body>
<h1>Next Sibling Selectors</h1>
<p>
The next sibling selector (or adjacent sibling combinator as
it's officially called) allows you to select an element based on
its sibling. This paragraph has a lightyellow background and
darkkhaki text.
</p>
<p>
This paragraph has a yellowgreen background and green text.
</p>
<p>
This paragraph has no colored background, border, or text.
</p>
</body>
</html>
|
2. 保存上述标记为Example_3-5.html。
3. 在文本编辑器中输入以下CSS:
body {
font: 12px sans-serif;
}
p {
padding: 5px;
}
h1 + p {
background: lightyellow;
color: darkkhaki;
border: 1px solid darkkhaki;
}
h1 + p + p {
background: yellowgreen;
color: green;
border: 1px solid green;
}
|
4.保存样式表为Example_3-5.css。将它在支持相邻选择器的浏览器中载入,你将看到如图3-25所示的结果。
|
(点击查看大图)图 3-25 |
工作原理
相邻选择器基于相邻关系应用样式。下面是对Example_3-5.css中有关样式的分析。
Example_3-5.css中的第一个样式应用于Example_3-5.html的第一段。h1 + p表示如果<p>元素是直接跟在<h1>元素后的元素,则应用本规则中的声明。
h1 + p {
background: lightyellow;
color: darkkhaki;
border: 1px solid darkkhaki;
}
|
只有当<p>元素是直接与<h1>元素相邻的元素时,这条规则才起作用。
第二条规则里使用了一个更为复杂的相邻选择器。它表示如果一个<p>元素直接相邻于另一个<p>元素,并且后者也直接相邻于一个<h1>元素时,应用本规则中的声明。
h1 + p + p {
background: yellowgreen;
color: green;
border: 1px solid green;
}
|
就像直接子选择器可以基于父子关系应用样式一样,相邻选择器可以基于相邻关系应用样式。
在很多时候,如果能基于元素的属性或属性值应用样式会很有用。
LI代码的格式化:
A).运用CSS格式化列表符: ul li{
list-style-type:none;
}
B).如果你想将列表符换成图像,则: ul li{
list-style-type:none;
list-style-image: url(/blog/images/icon.gif);
}
C).为了左对齐,可以用如下代码: ul{
list-style-type:none;
margin:0px;
}
D).如果想给列表加背景色,可以用如下代码: ul{
list-style-type: none;
margin:0px;
}
ul li{
background:#CCC;
}
E).如果想给列表加MOUSEOVER背景变色效果,可以用如下代码: ul{ list-style-type: none; margin:0px; }
ul li a{ display:block; width: 100%; background:#ccc; }
ul li a:hover{ background:#999; }说明:display:block;这一行必须要加的,这样才能块状显示!
F).LI中的元素水平排列,关键FLOAT:LEFT: ul{
list-style-type:none;
width:100%;
}
ul li{
width:80px;
float:left;
}
<ul><li>的区别
<LI> 的参数设定(常用):
例如: <li type="square" value="4">
type="square"
只适用于非顺序清单,设定符号款式,其值有三种,如下,内定为 type="disc":
符号 是当 type="disc" 时的列项符号。
符号 if" width=10 height=10 border=0> 是当 type="circle" 时的列项符号。
符号 是当 type="square" 时的列项符号。
value="4"
只适用于顺序清单,设定该一项的数目,其後各项将以此作为起始数目而递增,但前面各项则不受影响,其值只能是 1,2,3.. 等整数,没有内定值。
<UL>称为无序清单标记。
所谓无序清单就是在每一项前面加上 、、等符号,故又称符号清单。
<UL> 的参数设定(常用):
例如: <UL type="square">
type="square"
设定符号款式,其值有三种,如下,内定为 type="disc":
符号 是当 type="disc" 时的列项符号。
符号 是当 type="circle" 时的列项符号。
符号 是当 type="square" 时的列项符号。
<ul>是项目列表,<li>是列表项,项目列表就是用符号来列的,所以你列出来默认的就是黑点啦,还有一个是<ol>这个是编号列表,用数字来列的,也是用<li>做列表项
<li>是 list item 即列表项,但列表有很两种,所以外面得有 <ul> 或者 <ol> 用来区别无序列表(小点点)和有序列表(1,2,3...)。
网页设计制作,CSS实现隔行换色的2种方法:
第1种方法:
<style type="text/css">
UL.myul1 LI{background-color: expression(this.sourceIndex%2==0?'#9FB7F6':'#B6C8F8');
}
</style>
<ul class="myul1">
<li id="li1">111</li>
<li id="li2">222</li>
<li id="li2">333</li>
<li id="li2">444</li>
<li id="li2">555</li>
<li id="li2">666</li>
</ul>
第2种方法:
<style type="text/css">
<!--
.li01 { background:#FFF; }
.li02 { background:#000; }
li a{width:100%;display:block;}
li a:hover{background:red;}
-->
</style>
<div id="list01"><ul>
<li class="title"><a href="#">title</a></li>
<li><a href="#">111</a></li>
<li><a href="#">222</a></li>
<li><a href="#">333</a></li>
<li><a href="#">444</a></li>
<li><a href="#">555</a></li>
<li><a href="#">666</a></li>
</ul></div>
<script Language="Javascript1.2">
objName=document.getElementById("list01").getElementsByTagName("li")
for (i=0;i<objName.length;i++) {
(i%2==0)?(objName(i).className = "li01"):(objName(i).className = "li02");
}
</script>
通常在DIV布局中,自适应高度一直是比较头疼的问题,一般大都采用背景图、外套DIV、右栏覆盖左栏来解决。现在加了脚本后,简单多了,假如有三个水平并列的DIV,fbox、mbox、sbox,只要在标签中写入:onload="P7_equalCols('fbox','mbox','sbox')",测试条件:ie5.x、ie6.0、FF1.03、NS7.2、opera8.01
JS代码:版权归原作者,仅供学习研究.
Example Source Code om]
/*
------------------------------------------------
PVII Equal CSS Columns scripts
Copyright (c) 2005 Project Seven Development
www.projectseven.com
Version: 1.5.0
------------------------------------------------
*/
function P7_colH(){ //v1.5 by PVII-www.projectseven.com
var i,oh,hh,h=0,dA=document.p7eqc,an=document.p7eqa;if(dA&&dA.length){
for(i=0;i
oh=dA[i].offsetHeight;h=(oh>h)?oh:h;}for(i=0;i
dA[i].style.height=h+'px';}else{P7_eqA(dA[i].id,dA[i].offsetHeight,h);}}if(an){
for(i=0;ih){
dA[i].style.height=(h-(hh-h))+'px';}}}else{document.p7eqa=1;}
document.p7eqth=document.body.offsetHeight;
document.p7eqtw=document.body.offsetWidth;}
}
function P7_eqT(){ //v1.5 by PVII-www.projectseven.com
if(document.p7eqth!=document.body.offsetHeight||document.p7eqtw! =document.body.offsetWidth){
P7_colH();}
}
function P7_equalCols(){ //v1.5 by PVII-www.projectseven.com
if(document.getElementById){document.p7eqc=new Array;for(i=0;i
document.p7eqc[i]=document.getElementById(arguments[i]);} setInterval("P7_eqT()",10);}
}
function P7_eqA(el,h,ht){ //v1.5 by PVII-www.projectseven.com
var sp=10,inc=10,nh=h,g=document.getElementById(el),oh=g.offsetHeight,ch=parseInt(g.style.height) ;
ch=(ch)?ch:h;var ad=oh-ch,adT=ht-ad;nh+=inc;nh=(nh>adT)?adT:nh;g.style.height=nh+'px';
oh=g.offsetHeight;if(oh>ht){nh=(ht-(oh-ht));g.style.height=nh+'px';}
if(nh
CSS布局常用的方法
float:none|left|right
取值:
none: 默认值。对象不飘浮
left: 文本流向对象的右边
right: 文本流向对象的左边
它是怎样工作的,看个一行两列的例子
xhtml代码:
Example Source Code
<div id="wrap">
<div id="column1">这里是第一列</div>
<div id="column2">这里是第二列</div>
<div class="clear"></div> /*这是违背web标准意图的,只是想说明在它下面的元素需要清除浮动*/
</div>
CSS代码:
Example Source Code
#wrap{width:100;height:auto;}
#column1{float:left;width:40;}
#column2{float:right;width:60;}
.clear{clear:both;}
position:static|absolute|fixed|relative
取值:
static: 默认值。无特殊定位,对象遵循HTML定位规则
absolute: 将对象从文档流中拖出,使用left,right,top,bottom等属性相对于其最接近的一个最有定位设置的父对象进行绝对定位。如果不存在这样的父对象,则依据body对象。而其层叠通过z-index属性定义
fixed: 未支持。对象定位遵从绝对(absolute)方式。但是要遵守一些规范
relative: 对象不可层叠,但将依据left,right,top,bottom等属性在正常文档流中偏移位置
它来实现一行两列的例子
xhtml代码:
Example Source Code
<div id="wrap">
<div id="column1">这里是第一列</div>
<div id="column2">这里是第二列</div>
</div>
CSS代码:
Example Source Code
#wrap{position:relative;/*相对定位*/width:770px;}
#column1{position:absolute;top:0;left:0;width:300px;}
#column2{position:absolute;top:0;right:0;width:470px;}
他们的区别在哪?
显然,float是相对定位的,会随着浏览器的大小和分辨率的变化而改变,而position就不行了,所以一般情况下还是float布局!
CSS常用布局实例
单行一列
Example Source Code
body{margin:0px;padding:0px;text-align:center;}
#content{margin-left:auto;margin-right:auto;width:400px;}
两行一列
Example Source Code
body{margin:0px;padding:0px;text-align:center;}
#content-top{margin-left:auto;margin-right:auto;width:400px;}
#content-end{margin-left:auto;margin-right:auto;width:400px;}
三行一列
Example Source Code
body{margin:0px;padding:0px;text-align:center;}
#content-top{margin-left:auto;margin-right:auto;width:400px;width:370px;}
#content-mid{margin-left:auto;margin-right:auto;width:400px;}
#content-end{margin-left:auto;margin-right:auto;width:400px;}
单行两列
Example Source Code
#bodycenter{width:700px;margin-right:auto;margin-left:auto;overflow:auto;}
#bodycenter#dv1{float:left;width:280px;}
#bodycenter#dv2{float:right;width:420px;}
两行两列
Example Source Code
#header{width:700px;margin-right:auto;margin-left:auto;overflow:auto;}
#bodycenter{width:700px;margin-right:auto;margin-left:auto;overflow:auto;}
#bodycenter#dv1{float:left;width:280px;}
#bodycenter#dv2{float:right;width:420px;}
三行两列
Example Source Code
#header{width:700px;margin-right:auto;margin-left:auto;}
#bodycenter{width:700px;margin-right:auto;margin-left:auto;}
#bodycenter#dv1{float:left;width:280px;}
#bodycenter#dv2{float:right;width:420px;}
#footer{width:700px;margin-right:auto;margin-left:auto;overflow:auto;clear:both;}
单行三列
绝对定位
Example Source Code
#left{position:absolute;top:0px;left:0px;width:120px;}
#middle{margin:0px190px0px190px;}
#right{position:absolute;top:0px;right:0px;width:120px;}
float定位一
xhtml代码:
Example Source Code
<div id="wrap">
<div id="column">
<div id="column1">这里是第一列</div>
<div id="column2">这里是第二列</div>
<div class="clear"></div>/*用法web标准不建议,但是记住下面元素需要清除浮动*/
</div>
<divid="column3">这里是第三列</div>
<divclass="clear"></div>/*用法web标准不建议,但是记住下面元素需要清除浮动*/
</div>
CSS代码:
Example Source Code
#wrap{width:100;height:auto;}
#column{float:left;width:60;}
#column1{float:left;width:30;}
#column2{float:right;width:30;}
#column3{float:right;width:40;}
.clear{clear:both;}
float定位二
xhtml代码:
Example Source Code
<div id="center"class="column">
<h1>Thisisthemaincontent.</h1>
</div>
<div id="left"class="column">
<h2>Thisistheleftsidebar.</h2>
</div>
<div id="right"class="column">
<h2>Thisistherightsidebar.</h2>
</div>
CSS代码:
Example Source Code
body{
margin:0;
padding-left:200px;/*LCfullwidth*/
padding-right:190px;/*RCfullwidth CCpadding*/
min-width:200px;/*LCfullwidth CCpadding*/
}
.column{
position:relative;
float:left;
}
#center{
width:100;
}
#left{
width:200px;/*LCwidth*/
right:200px;/*LCfullwidth*/
margin-left:-100;
}
#right{
width:190px;/*RCwidth*/
margin-right:-100;
}
原文:http://andymao.com/andy/post/76.html
屏蔽IE浏览器(也就是IE下不显示)
*:lang(zh) select {font:12px !important;} /*FF的专用*/
select:empty {font:12px !important;} /*safari可见*/
这里select是选择符,根据情况更换。第二句是MAC上safari浏览器独有的。
仅IE7识别
*+html {…}
当面临需要只针对IE7做样式的时候就可以采用这个HACK。
IE6及IE6以下识别
* html {…}
这个地方要特别注意很多地主都写了是IE6的HACK其实IE5.x同样可以识别这个HACK。其它浏览器不识别。
html/**/ >body select {……}
这句与上一句的作用相同。
仅IE6不识别
select { display /*IE6不识别*/:none;}
这里主要是通过CSS注释分开一个属性与值,流释在冒号前。
仅IE6与IE5不识别
select/**/ { display /*IE6,IE5不识别*/:none;}
这里与上面一句不同的是在选择符与花括号之间多了一个CSS注释。
仅IE5不识别
select/*IE5不识别*/ { display:none;}
这一句是在上一句中去掉了属性区的注释。只有IE5不识别
盒模型解决方法
selct {width:IE5.x宽度; voice-family :"\"}\""; voice-family:inherit; width:正确宽度;}
盒模型的清除方法不是通过!important来处理的。这点要明确。
清除浮动
select:after {content:"."; display:block; height:0; clear:both; visibility:hidden;}
在Firefox中,当子级都为浮动时,那么父级的高度就无法完全的包住整个子级,那么这时用这个清除浮动的HACK来对父级做一次定义,那么就可以解决这个问题 。
截字省略号
select { -o-text-overflow:ellipsis; text-overflow:ellipsis; white-space:nowrap; overflow:hidden; }
这个是在越出长度后会自行的截掉多出部分的文字,并以省略号结尾,很好的一个技术。只是目前Firefox并不支持。
只有Opera识别
@media all and (min-width: 0px){ select {……} }
针对Opera浏览器做单独的设定。
以上都是写CSS中的一些HACK,这些都是用来解决局部的兼容性问题,如果希望把兼容性的内容也分离出来,不妨试一下下面的几种过滤器。这些过滤器有的是写在CSS中通过过滤器导入特别的样式,也有的是写在HTML中的通过条件来链接或是导入需要的补丁样式。
IE5.x的过滤器,只有IE5.x可见
@media tty {
i{content:"\";/*" "*/}} @import 'ie5win.css'; /*";}
}/* */
IE5/MAC的过滤器,一般用不着
[Copy to clipboard] [ - ]CODE:
/*\*//*/
@import "ie5mac.css";
/**/
IE的if条件Hack
<!--[if IE]> Only IE <![endif]-->
所有的IE可识别
<!--[if IE 5.0]> Only IE 5.0 <![endif]-->
只有IE5.0可以识别
<!--[if gt IE 5.0]> Only IE 5.0+ <![endif]-->
IE5.0包换IE5.5都可以识别
<!--[if lt IE 6]> Only IE 6- <![endif]-->
仅IE6可识别
<!--[if gte IE 6]> Only IE 6/+ <![endif]-->
IE6以及IE6以下的IE5.x都可识别
<!--[if lte IE 7]> Only IE 7/- <![endif]-->
仅IE7可识别
高度:没有一个固定值,因为每个人的浏览器的工具栏不同。
宽度:
1、在IE6.0下,宽度为显示器分辨率减21,比如1024的宽度-21就变成1003。但值得注意的是IE6.0(或更低)无论你的网页多高都会有右侧的滚动条框。
2、在Firefox下,宽度的分率辨减19。比如1024的宽度-19就变成1005
3、在Opear下,宽度的分率辨减23。比如1024的宽度-23就变成1001
注:Firefox或Opear在内容少于浏览器高度时不显示右侧滚动条。
所以如果是1024的分辨率,你的网页不如设成1000安全一点。
如果是800的分辨率一般都设成770
一 软件应用能力(选2题):
1.Ps或者其他图像处理软件做一个如图的渐变按钮
2.Flash做一个简单的图形遮罩效果
3.把网站童车列表页的结构美感重新设计
4.用ps或者Fw等图像处理软件对一个网页平面图做切片(例图为:)
二 网页设计分析能力
1. 购物网站的主色调应该是什么样色?交友网站?体育网站?软件网站?年轻的互联网?搜索引擎?
2. 一个网站最多有几种色彩
3. 百度和google,你看哪个觉得更舒服一点?
4. 列出你所知道的几种图像格式,并说出它们之间的不同点和大部分的用途
5. 一般网站的版式有哪几种?
6. 如果背景是黑色,那么字体用什么颜色能突出字体,且不显得刺眼?
7. 在在红色中加入少量的黑色,你觉得应该是种什么感觉?
三 网页制作能力
1. 用table和div分别设计一个三行三列的网页(头部,身体,底部;身体部分为三列)
2. 列出你所用过的Html元素
3. 用li做一个横向的导航菜单,不少于三个菜单
4.背景的哪个属性来确定背景图像是否固定?
四 高级应用能力(选做)
1. 用js代码写出一个页面加载后能不断变换背景的效果
2. 利用DOM知识是列出一个ul中li的总数,li中的内容
3. 写出你会用的兼容个中不同浏览器的hack css代码,如IE7 FF
4. 说出你所知道的web标准方面的知识
5. 高级图像处理(可网上查询教程):模仿例图
6. Form表单的哪个属性是表单数据的传送方式?
7. /images/123.jpg 与 images/123.jpg,那种写法是相对根目录的?
即使是CSS高手,也难免在书写CSS代码的时候出一些小错误,或者说,任何一种代码都是如此。小错误却往往造成大问题,浪费很多无辜的时间来调试和排错。查看下面这份CSS网页布局中易犯的10个小错误,努力的修正你可能会犯的错误,加速你的前端开发效率。
1. 检查html元素是否有拼写错误、是否忘记结束标记
即使是老手也经常会弄错div的嵌套关系。可以用dreamweaver的验证功能检查一下有无错误。
2. 检查CSS是否书写正确
检查一下有无拼写错误、是否忘记结尾的 } 等。可以利用CleanCSS来检查 CSS的拼写错误。CleanCSS本是为CSS减肥的工具,但也能检查出拼写错误。
3. 用删除法确定错误发生的位置
如果错误影响了整体布局,则可以逐个删除div块,直到删除某个div块后显示恢复正常,即可确定错误发生的位置。
4. 利用border属性确定出错元素的布局特性
使用float属性布局一不小心就会出错。这时为元素添加border属性确定元素边界,错误原因即水落石出。
5. float元素的父元素不能指定clear属性
MacIE下如果对float的元素的父元素使用clear属性,周围的float元素布局就会混乱。这是MacIE的著名的bug,倘若不知道就会走弯路。
6. float元素务必指定width属性
很多浏览器在显示未指定width的float元素时会有bug。所以不管float元素的内容如何,一定要为其指定width属性。
另外指定元素时尽量使用em而不是px做单位。
7. float元素不能指定margin和padding等属性
IE在显示指定了margin和padding的float元素时有bug。因此不要对float元素指定margin和padding属性(可以在float元素内部嵌套一个div来设置margin和padding)。也可以使用hack方法为IE指定特别的值。
8. float元素的宽度之和要小于100%
如果float元素的宽度之和正好是100%,某些古老的浏览器将不能正常显示。因此请保证宽度之和小于99%。
9. 是否重设了默认的样式?
某些属性如margin、padding等,不同浏览器会有不同的解释。因此最好在开发前首先将全体的margin、padding设置为0、列表样式设置为none等。
10. 是否忘记了写DTD?
如果无论怎样调整不同浏览器显示结果还是不一样,那么可以检查一下页面开头是不是忘了写下DTD声明。
注: 本文来源于网络,出处不明。
通常用户看到的页面的样式会受到三层控制,第一层是浏览器的默认样式,第二层是网页定义样式,第三层是用户自定义样式。和CSS一样,后面的优先级高于前面的,也就是说网页定义样式可以覆盖浏览器的默认样式,而用户自定义样式优先级最高。实际情况是虽然浏览器都或多或少提供了用户自定义样式的功能,但是极少数会有用户去自定义,一般用也是高级用户。而浏览器默认的样式往往在不同的浏览器、不同的语言版本甚至不同的系统版本都有不同的设置,这就导致如果直接利用默认样式的页面在各个浏览器下显示非常不一致,于是就有了类似YUI的reset之类用来尽量重写浏览器的默认设置保证各个浏览器样式一致性的做法。
拿字体来说,各个浏览器默认的字体种类、字体大小和字体行高都不一样,比如IE8的中文版在Windows XP下显示网页时默认字体是宋体,而英文版肯定不会如此。所以我们需要统一设置默认的字体样式,以便实现一致的显示效果来保证设计的一致性和提高开发效率。
以后准备使用如下默认字体样式:
body{
font: 12px/1.5 arial;
}
我们页面的绝大部分内容字符都是中文,毫无疑问目前为止在网页上最常用也是最通用的显示中文的字体是宋体,但是宋体在显示英文、数字和英文符号时过于糟糕,比如©字符,所以我们一般期望通过CSS来实现用更好的字体样式来显示它们,然后用宋体来显示中文和中文符号。之所以选择arial是因为:
- Windows和Mac都预装了这款字体,应该是使用最广泛的网页字体了。它的潜在对手
tahoma 和helvetica 就没有这么幸运了。
- 视觉设计的专业人士可能会认为在Windows中使用tahoma、在Mac中使用helvetica更好,比如淘宝的默认字体样式是
font: 12px/1 Tahoma, Helvetica, Arial, "\5b8b\4f53", sans-serif;
这是一个很不错的选择,但是你也会发现Google、YAHOO、Youtube、Bing甚至MSN的新版都使用arial 作为第一默认字体。所以从美观和可读性上来讲arial 应该是完全可以接受的。
- 一般情况下设置font-family都会在最后设置通用字体族以保证其安全性,比如Google的设置为
font-family:arial,sans-serif; ,但是至少在非中文版的Win7下当编码是GBK时,IE8会因sans-serif 来渲染宋体,导致字体出现变形,这就是为什么淘宝需要在sans-serif 前加上宋体而Google无需这样做的原因。
- 因为中文字体的选择非常有限,所以目前所有的主流浏览器都设置使用宋体来显示中文。Baidu的首页和搜索结果页使用
font-family:arial; 可以从侧面说明这样做的安全性。可能有人注意到Firefox中国版默认显示的中文字体是微软雅黑,这是因为谋智网络擅自修改了用户自定义样式,不允许网页的样式覆盖浏览器设置的样式。也是由于类似的情况,我们要弹性设计网页非常重要。
使用英文字体作为第一默认字体会导致的问题之一就是中英文以及符号混排时的对齐问题、通过设置行高和hasLayout能解决绝大部分情况,但是都不会很完美,如果把字体改成“宋体”能彻底的解决问题。很明显,这个问题只出现在IE上。所以,如果你的网站很少使用英文、数字和英文符号,那么直接设置{font-family:\5b8b\4f53;} 也是很合理的选择。
大小:12px
- 12px是宋体能显示的极限,虽然微软雅黑能显示更小的字体,但目前的应用环境尚未成熟。由于宋体基本上是目前显示中文唯一的通用Web字体,所以12px成为最常用的字体大小。我们当然可以依据产品的需要来修改这个默认值。
- 不用考虑基于字体大小(em)的设计。
- 在Chrome3.0之后的中文版中,字体大小最小值是12px,比如你设置最小字体为10px,最后也变成12px。
行高:1.5倍
- 这是一个经验值,不同的产品对这个值要求可能不同,但我们一般会设置最常用的为默认值。比如YUI的font中是
font:13px/1.231 arial,helvetica,clean,sans-serif; 即字体大小默认值是13px,行高是13*1.231=16.003px,默认的行高是默认字体的1.231倍。对于中文来说,常用的字体大小12px、14px、16px、18px等偶数大小,在IE6和IE7设置其行高也为偶数能解决一些特殊情况下的字体对其问题。
- 在IE6和IE7中,行高值必须大于字体的2px才能保证字体的完整显示或当其作为链接时能有效显示下划线。
- 设置
line-height 时,注意不要使用单位(包括%在内),因为子节点会继承经过运算后的line-height值,所以当使用单位后浏览器会把line-height 计算成第一次定义的绝对值,而不会随着字体大小的变化而变化,而无单位的数值表示是所在容器的font-size 的倍数,所以设置为无单位的数值是最佳选择。
- 深入CSS 行高非常有利于理解
line-height ,值得一读。
性能和效率
- 大部分平台都有
arial ,减少浏览器的查找时间。
- 代码最少,书写方便。
arial 基本上是名字最短的字体了,可以节约CSS的大小。
- 所有的字母都小写,目前Google就是这样做的,好处是既可以编写更快也能提升Gzip压缩的效率。
- 中文最好用unicode表示,比如使用宋体是
{font-family:\5b8b\4f53;} ,使用微软雅黑是{font-family:\5fae\8f6f\96c5\9ed1;} ,这样的好处是避免编码问题,同时能得到所有的主流浏览器的支持。
- 使用正确的字体种类写法,避免使用引号,这样可以缩小CSS的大小。中文字体可以按上一条方式来编写。
未来
- 通过对中英文及符号混排的测试,我发现微软雅黑其实表现相当不错,包括英文数字和英文字符以及在IE6和IE7的显示效果上,但唯一的遗憾是在XP下如果安装了微软雅黑字体的用户没有打开“使用屏幕字体的边缘平滑”选项的话,在Firefox、Safari和Opera、特别是IE6下会非常模糊难以辨认。针对这个问题目前并没有很好的解决方案,所以只有等到IE6使用比率非常小的时候才可能正式的使用它。或许需要到2014年,XP死掉的时候。
- 虽然很早就有了@font-face,但是浏览器的支持、网速和商业问题,导致它很少被应用。最近关于字体的好消息是Firefox3.6将支持Web Open Font Forma。关于Web字体未来的相关信息可以看Web 字体的未来、关于 Web 字体:现状与未来和再谈 Web 字体的现状与未来。
最后推荐一下玉伯的《再谈 Web 默认字体》
DIV+CSS结合js控制页面滚动的效果,非常实用,兼容ie,ff。
<head>
<style type="text/css">
#container{
text-align: left;
background-color: #faf7ec;
width: 500px;
margin: 20px auto 0 auto;
padding: 0;
font-family:Arial, Helvetica, sans-serif;
font-size:12px;
}
#block0, #block1, #block2, #block3, #block4, #block5
{
border-top: solid 1px #785a3c;
margin: 0;
padding: 10px;
}
.active { background-color: #fff;}
.visited { background-color: #ede7da;}
#block0, #block0.active, #block0.visited
{
text-align: center;
background-color: #a0dcf8;
border-top: none;
border-bottom: solid 4px #785a3c;
}
</style>
<script>
var ScrollWin = {
w3c : document.getElementById,
iex : document.all,
scrollLoop : false,
scrollInterval : null, // setInterval id
currentBlock : null, // object reference
getWindowHeight : function(){
if(this.iex) return (document.documentElement.clientHeight) ?
document.documentElement.clientHeight : document.body.clientHeight;
else return window.innerHeight;
},
getScrollLeft : function(){
if(this.iex) return (document.documentElement.scrollLeft) ?
document.documentElement.scrollLeft : document.body.scrollLeft;
else return window.pageXOffset;
},
getScrollTop : function(){
if(this.iex) return (document.documentElement.scrollTop) ?
document.documentElement.scrollTop : document.body.scrollTop;
else return window.pageYOffset;
},
getElementYpos : function(el){
var y = 0;
while(el.offsetParent){
y += el.offsetTop
el = el.offsetParent;
}
return y;
},
scroll : function(num){
if(!this.w3c){
location.href = "#"+this.anchorName+num;
return;
}
if(this.scrollLoop){
clearInterval(this.scrollInterval);
this.scrollLoop = false;
this.scrollInterval = null;
}
if(this.currentBlock != null) this.currentBlock.className = this.offClassName;
this.currentBlock = document.getElementById(this.blockName+num);
this.currentBlock.className = this.onClassName;
var doc = document.getElementById(this.containerName);
var documentHeight = this.getElementYpos(doc) + doc.offsetHeight;
var windowHeight = this.getWindowHeight();
var ypos = this.getElementYpos(this.currentBlock);
if(ypos > documentHeight - windowHeight) ypos = documentHeight - windowHeight;
this.scrollTo(0,ypos);
},
scrollTo : function(x,y){
if(this.scrollLoop){
var left = this.getScrollLeft();
var top = this.getScrollTop();
if(Math.abs(left-x) <= 1 && Math.abs(top-y) <= 1){
window.scrollTo(x,y);
clearInterval(this.scrollInterval);
this.scrollLoop = false;
this.scrollInterval = null;
}else{
window.scrollTo(left+(x-left)/10, top+(y-top)/10);
}
}else{
this.scrollInterval = setInterval("ScrollWin.scrollTo("+x+","+y+")",20);
this.scrollLoop = true;
}
}
};
ScrollWin.containerName = "container";
ScrollWin.anchorName = "anchor";
ScrollWin.blockName = "block";
ScrollWin.onClassName = "active";
ScrollWin.offClassName = "visited";
</script>
</head>
<body>
<div align="center">
<div id="container">
<a name="anchor0"></a>
<div id="block0">
<a href="javascript:ScrollWin.scroll('1')">链接 1</a> |
<a href="javascript:ScrollWin.scroll('2')">链接 2</a> |
<a href="javascript:ScrollWin.scroll('3')">链接 3</a> |
<a href="javascript:ScrollWin.scroll('4')">链接 4</a> |
<a href="javascript:ScrollWin.scroll('5')">链接 5</a>
</div>
<a name="anchor1"></a>
<div id="block1">
<h3><a href="#" onclick="javascript:ScrollWin.scroll('0'); return false;">顶部</a>
链接 1</h3>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
</div>
<a name="anchor2"></a>
<div id="block2">
<h3><a href="#" onclick="javascript:ScrollWin.scroll('0'); return false;">顶部</a>
链接 2</h3>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
</div>
<a name="anchor3"></a>
<div id="block3">
<h3><a href="#" onclick="javascript:ScrollWin.scroll('0'); return false;">顶部</a>
链接 3</h3>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
</div>
<a name="anchor4"></a>
<div id="block4">
<h3><a href="#" onclick="javascript:ScrollWin.scroll('0'); return false;">顶部</a>
链接 4</h3>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
</div>
<a name="anchor5"></a>
<div id="block5">
<h3><a href="#" onclick="javascript:ScrollWin.scroll('0'); return false;">顶部</a>
链接 5</h3>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
<p>内容</p>
</div>
</div>
</div>
</body>
|