在中国,让百度K掉的网站不计其数,或许这个数目百度可以知道。
让百度干了的网站最大的特点就是你永远没有机会了,解封的机会是很小的。
所以我很郁闷,我的网站让干掉了,我还有机会吗,或许永远没了。
百度官方解释了为什么要干你的站,一般是因为你网站上不对头的地方,然后K你。
其实百度解释的只是解释,那里的话只是说了一方面。
其实还有些地方也会让百度把你的站干掉的。
比如:
1、你的网站改版频繁,优化厉害,特别是网站刚上线的时候,改动太多的东西都不行。
2、你没有交保护费,这不用我多说。
但愿这个全球最大的中文搜索引擎可以对中国人自己好一点。
中国的互联网不能没有百度,百度也绝对不可能没有中国的互联网。
百度为什么要把你的站K掉
Jun 12
用了10-15小时就可以画到这样的效果,真厉害啊!有空学习一下!
1. Sketching
The images below show how I sketched out the phoenix in abstract form. I started off by drawing the phoenix’s body, flowing towards the wings, feathers, and then filling in the details.






Inspired by Nature
A lot of my design patterns are inspired by natural elements such as:
- DNA Helix
- blowing dandelions
- and the patch patterns on the butterfly wings and tree leaves.
2. Adobe Illustrator – Vectorization
After the sketch was done, I imported it into Illustrator for vector tracing. Here is a tip for tracing artwork in Illustrator:
i) Import the sketch in the first layer, adjust the layer opacity to 20 to 30%, and lock the layer.

ii) Create a new layer on top, hold down the Cmd key and click on the visibility icon to view the layer in outline mode (in this way you can see the sketch underneath).

Final Vector Outlines
3. Coloring
For color theme palettes, I go to Adobe’s kuler site and ColourLovers.com. Personally, I like ColourLovers because it allows me to copy and paste the color images directly to Illustrator. I just randomly pick the color palettes from the site and paste them in the artboard. To quickly fill in the color, use the Eyedropper tool to sample the colors and gradients.

Final Vector Artwork
As I was vectorizng the artwork, I added more elements such as the sky background and the phoenix’s tail.

4. Photoshop Polishing
Then, I imported the vector art in Photoshop and used my Vector Polishing Techniques to spice up the illustration.
Pastel-like Background
To make the background look pastel-like, I used the Pencil tool and lightly brushed up the sky background.

Particle Effects
The particle effects are done by using the layer Dissolve mode (see tutorial: Vector Polishing Techniques).

Depth
I blurred some elements to add more depth to the illustration.

Final Design
How Long Did It Take?
The sketch took about 1 hour, vectoring took 12 hours, and the Photoshop polishing took about 10 to 15 hours.
Two New Illustrations
Jun 11
It has been a while since last time I drew any illustration (traditional and digital). Finally, I have two new pieces that I would like to share. These two illustrations were presented in the design conference (Future of Web Design 2008) in New York (check out the presentation slides to see the design process). The first piece is called Abstract Peacock and the second one is Abstract Phoenix. You can download a high resolution jpg of the new illustrations for your desktop wallpaper.
Update: Don’t forget to see the Design Process of the Phoenix.


如果你是网站前端开发人员,那么对你来说,也许做一个漂亮导航菜单会很得心应手。但今天暴风彬彬要为大家总结各种导航菜单的资源,以便让大家的网站前端开发的工作更方便更快速,只要选择现成的例子就可以应用于自己的网站了。暴风彬彬收集的这些资源,从非常简单的HTML和CSS导航菜单,到非常复杂和高级的JQuery、JavaScript和MooTools技术,这都可以让你轻松实现褪色、滑动、拖动等效果。如果您觉得这些资源值得一用,那就快把本网页收藏以备日后查阅吧!
1.Fancy menu - 非常酷的导航菜单:
2. 专为Mac爱好者开发的CSS dock菜单,使用jQuery框架。
4.这个导航五年前就有了,但现在看来依然很棒!
5.漂亮的JQuery滑动效果菜单,有四种不同的例子。
6.更新jquery嵌套标签设置,有演示;
7.垂直JavaScript菜单,含子菜单效果。 查看演示
8.13个精选纵向及横向CSS菜单
10.很全的收集CSS纵向菜单的网站:dynamicdrive.com
11.CSSplay.com,一个非常全面的收集各种CSS菜单的网站,而且经常有更新,推荐!
12.有显示/隐藏效果的菜单 - 有 CSS 和 MooTools两种;
13.Superfish v1.4.8 – jQuery 菜单插件
14.方便的图片标签翻转菜单;
15.模仿Digg.com风格的CSS纵向菜单
17.独特的使用jQuery和MooTools的导航菜单; 查看演示
18.CSSmenumaker.com - 提供专业的CSS菜单;
19. 非常酷的 JavaScript 菜单 ,摘自 JavaScriptkit.com;
20. 使用CSS创建的多级下拉菜单并用JQuery进行了改善。查看演示
21. jdMenu 多层次菜单插件 , jQuery框架 - 纵向多级下拉菜单列表
22. 难以置信的Apple风格导航菜单:
23.折叠风格JQuery菜单
24. 非常酷的使用CSS和 jQuery制作的动画导航菜单:
25. jQuery树插件
26. 35种独特的JQuery菜单演示
27.Jquery 快速导航 - 点击 toogle 菜单, 以弹出导航菜单:

28. jQuery id标签 - 8种不同的很酷的JQuery菜单例子
29. jQuery ContextMenu;轻量级JQuery插件,可以自定义右键弹出的菜单
30. jQuery UI tabs - 可以自定义不同效果的标签菜单,比如:幻灯片效果、淡出效果等…查看演示
31. iconDock jQuery - 有一个模仿 MAC OS X dock效果的菜单;
32.SlidingMenu - 很简单的滑动菜单效果
33. 标签导航
11个使用了滑动门技术的菜单,并且兼容IE浏览器
34.另一种CSS标签导航菜单
35.9种不同的CSS块级菜单
36.12种以上不同的CSS菜单
37. ADxMenu-4种非常酷的导航菜单
38.在CSSmenubuilde你可以自己选择喜欢的菜单风格,这个网站有一个庞大的菜单列表供你选择
40. 很多不同的菜单风格
41.CSS菜单,纵向、横向都有
42.非常棒的导航菜单,其中有一种是非常有人气的折叠菜单;
CSS Sprites + 圆角
May 21
初步介绍
当然,我知道现在有成千上万个关于 用CSS处理圆角 的教程,但不管怎么说,我仍然想把这篇文章展示给您。也希望您会发现这篇文章会非常有用。需要重点指出的是,这篇教程彻底地应用高级CSS技术,但是,我会尽力使初学者看起来简单。CSS3 在这里还没有得到完全的应用,所以,知道现在,我会保持W3C验证的有效。
您还可以参考一下文章:
43个PSD转XHTML, CSS创建布局及导航辅导教程,解析事件背后的每一个步骤
我们将怎样来处理?
我处理圆角的版本是由内置的绝对定位的四个div组成,每个div都有唯一的圆角图片作CSS Sprite操作。我们将会这样做:
是什么方式导致这项技术表现得这么了不起呢(What makes this technique cool)?
通过可变的宽度和高度处理毗邻的元素的能力。没有极限。(The ability to make rounded-bordered elements with fluid width and height. No limits whatsoever.) 这项技术,正如我之前提到的,是与 CSS Sprites 结合操作完成的。如果您不知道这是项怎样的技术或者说不知道怎么使用它,那么请先阅读我 之前的文章。CSS sprites 都学会了吗? 那我们就开始吧!
第一步: 创建我们的 Sprite
1、为矩形圆角图片处理选择一款编辑器 (在这个案例中我选择的是Firework).

2、切割并且导出圆角到本地临时位置 (我们将会在之后用到).

3、新创建一个文件,将圆角导入到这个新文件中,复制三次,然后旋转这三个新切片得到另外的三个圆角。

4、合成四个圆角为一张图片, 并用 1px 的红线 来区分它们.

5、导出合成图片,sprite 也就大功告成了。
第二步: HTML 代码
首先,我们会给容器 div 一个 .roundedBox
类 :
| 以下为引用的内容:
<div class=”roundedBox”></div> |
现在,我们必须再增加四个 div ,这会在将来创建圆角的时候用到。之后必须给每个加载一个类 .corner,同时也标识一个类来指定它们格子的位置。
| 以下为引用的内容:
<div class=”roundedBox”> <div class=”corner bottomLeft”></div> |
一切搞定? 嗯,让我们把注意力再转移到 CSS 代码上来。
第三步: CSS 代码
如你所知, (或者您会在这里快速学习到) 绝对定位元素通常都依照相对定位的父元素进行定位。. If this element is not defined, they will take as their parent relatively-positioned element, the body tag.如果这个父元素无法界定,那么它会去最近作相对定位的那个父元素,直至 body 标签。 哈?! – 好了,如果到此为止您仍没有掌握,不用担心,我们将在第二部分了解它。(翻译得有点拗,附上原文:Ok, if you didn’t get this, don’t worry, you’ll catch it in an second.)
让我们先来定义下所有的圆角:
所有的圆角都必须定义绝对定位,并且注明高度跟宽度。 我的圆角定义的宽度跟高度都是 17px.

| 以下为引用的内容:
.corner { position:absolute; width:17px; height:17px; } |
如果您是第一次切割矩形圆角,那么宽度跟高度很可能会不一样 (咄!)。
现在开始定义 div 容器样式:
| 以下为引用的内容:
.roundedBox {position:relative;} |
任何定义有类 .roundedBox 的元素内,绝对定位元素都会相对于这个元素进行定位,而不是标签 body。 我们也必须设置一些padding值,如果没有设置,圆角将会覆盖我们的文本,这肯定不是我们想要的效果。 重要提示: top 和 bottom padding 值必须 等价于圆角的 height。left 和 right padding 值必须等价于圆角的宽度。 正如您已经知道的,我的圆角宽度跟高度是相等的,因此,四个边角的padding 值也是相等的:
.roundedBox {position:relative; padding:17px; margin:10px 0;}
我也通过 margin 给我们的 div 流出了一定的空隙
最后,让我们对没有圆角作单独定义
我们会对每个圆角作绝对定位设置,并且定位背景图的位置 (根据我们的 sprite):
| 以下为引用的内容:
.roundedBox {position:relative; padding:17px; margin:10px 0;} .corner {position:absolute; width:17px; height:17px;} .topLeft {top:0; left:0; background-position:-1px -1px;} .topRight {top:0; right:0; background-position:-19px -1px;} .bottomLeft {bottom:0; left:0; background-position:-1px -19px;} .bottomRight {bottom:0; right:0; background-position:-19px -19px;} |
您可能已经注意到,我们的样式仍然还没有下载 sprite。我们一般不会去定义它们的原因是,我们会使用另外的方法。
圆形盒模型 1 (蓝色)
HTML 代码:
| 以下为引用的内容:
<div class=”roundedBox” id=”type1″> <div class=”corner topLeft”></div> |
我们必须给容器 div 定义一个ID为 #type1,用来实施特殊背景。
CSS 代码:
首先,我们得给 #type1 匹配一个背景色,使之融合于 sprite 中的圆角:
#type1 {background-color:#CCDEDE;}
![]()
之后,通过定义 .corner 类来协助圆形盒模型载入 Sprite 样式:
#type1 {background-color:#CCDEDE;}
#type1 .corner {background-image:url(../images/corners-type1.gif);}
![]()
好了,我们的第一个圆角矩形大功告成了!预览圆角矩形模型1 (蓝色)
圆形盒模型 2 (绿色) / 圆形盒模型 3 (紫色)
模型1,模型2跟模型3的唯一差别就是它们的颜色,所以我们也仅仅只修改这些。
模型 2 (绿色)
HTML 代码:
| 以下为引用的内容:
<div class=”roundedBox” id=”type2″> <div class=”corner topLeft”></div> |
CSS 代码 (仅仅修改 sprites 的颜色及背景色)
![]()
#type2 {background-color:#CDDFCA;}
#type2 .corner {background-image:url(../images/corners-type2.gif);}
预览圆角矩形模型2 (绿色)
模型 3 (紫色)
HTML 代码:
| 以下为引用的内容:
<div class=”roundedBox” id=”type3″> <div class=”corner topRight”></div> |
CSS 代码 (仅仅修改 sprites 的颜色及背景色)
![]()
| 以下为引用的内容:
#type3 {background-color:#D3CADF;} |
预览圆角矩形模型 3 (紫色). 都学会了吗?好,现在我们再进一步学习。
模型 4 (红色边框)
模型4 跟模型1、2、3又有什么区别呢?边框和颜色,让我们来解决这些因素吧。
HTML 代码:
| 以下为引用的内容:
<div class=”roundedBox” id=”type4″> <div class=”corner topRight”></div> |
CSS 代码 (在 sprite 中给您的边角的边框都添上边框,并使 .roundedBox 类的背景及边框融合 sprite。)
![]()
| 以下为引用的内容:
#type4 {background-color:#CCACAE; border:1px solid #AD9396;} |
![]()
好了,这个就是截图效果。我们的边角还不能正确地覆盖 #type4 边框。所以我们必须矫正它们的定位来覆盖早期的定位样式。让我们做到这一点:
| 以下为引用的内容:
#type4 {background-color:#CCACAE; border:1px solid #AD9396;} |
好了,这就是我们完成的模型 4。预览圆角矩形模型4 (红色边框). We are almost there, don’t quit now :p模型
5 (垂直渐变)
好了,模型5会需要更多的工作量,我们应该这样:
修改上下边角的高度 (由渐变度决定(depending on your gradient))。
修改上下边角的背景图定位 (由渐变度决定)。
通过重复平铺 1px 的背景图片来创建容器 div 的渐变效果。
值得注意的是,我们必须给内容设置一个大小,或者给容器设置一个最小高度(由渐变度决定)。
让我们开始吧。
HTML 代码 (跟之前的一样):
| 以下为引用的内容:
<div class=”roundedBox” id=”type5″> <div class=”corner bottomLeft”></div> |
CSS 代码:
我的渐变是从上到下垂直的。所以我们必须增加上边角的高度,以及更改下边角的背景图位置。当您看到我的新的 sprite 就会明白为什么会这么处理。就是下面这张:
![]()
我的div中的背景图片是这样的:
![]()
1px 的宽度,它的确是存在的。 我的下边角有一条实心颜色,刚好可以匹配div的背景色。 少说话多行动。我们来继续定义容器 div :
| 以下为引用的内容:
#type5 {background:#FECBCA url(../images/roundedbox-type5-bg.png) repeat-x 0 0; min-height:110px;} |
给容器设置的背景颜色是我从底部边角中吸取的。然后将背景图片按 x 方向进行重复。最后我给它设置一个最小高度,正如我之前所说的,渐变才不会泄露。最后来加上所有的边角 (我将文件的类型修改为 .png 格式的图片,为的是能得到更好的渐变质量):
| 以下为引用的内容:
#type5 {background:#FECBCA url(../images/roundedbox-type5-bg.png) repeat-x 0 0; min-height:110px;} |
现在,我增加上边角的高度 (这是由渐变最后抵达的颜色位置决定的):
| 以下为引用的内容:
#type5 {background:#FECBCA url(../images/roundedbox-type5-bg.png) repeat-x 0 0; min-height:110px;} |
最后,我纠正下下边角的背景图定位:
| 以下为引用的内容:
#type5 {background:#FECBCA url(../images/roundedbox-type5-bg.png) repeat-x 0 0; min-height:110px;} |
全部完成! – 预览圆角矩形模型 5 (垂直渐变)
IE6 版本
这项技术在这一令人讨厌的浏览器中是有问题的。我们必须给容器 (.roundedBox, or #type1, #type2, 等等) 确定宽度跟高度。如果您没有定义它,那么它会泄露到盒模型之外。 使用 IE6 条件式注释法来定义它。
最后的想法
我希望这项技术对您会有帮组,并且不会显得太难。垂直渐变、透明的角落,只要多加练习,您的脑袋会变得更加好用,也会更加容易定义样式。
一行代码轻松实现拖动效果
May 21
写JS实现拖动需要一大堆不便维护的代码,实属麻烦,Google了大半天,发现了一个优秀的Jquery插件EasyDrag,只需要一行代码便可轻松在主流浏览器上
实现拖动效果.
| 以下为引用的内容:
$(document).ready( function() |
Html 代码
| 以下为引用的内容:
<div id=“divPanel“ style=“width:300px;height:300px;background:white;border:1px solid #000000;position:absolute;left:5px;top:50px“ > |
EasyDrag还可以指定可拖动的区域,比如只能通过标题拖动整个div,我们JS可以这样写
| 以下为引用的内容:
$(document).ready ( function() |
一个setHandler搞定,不错开源是个好东西,Jquery更是好东西,插件扩展机制不是一般的好。
下载:http://fromvega.com/wordpress/2007/07/14/easydrag-jquery-plugin/
弹性+固宽布局[窄屏With宽屏]
May 21
在当今用户的显示器越来越大的今天,之前的1024*768固宽布局有点越来越不合时宜,对大屏幕的用户而言,两侧空空的留白给人第一眼的印象是严重的屏幕浪费,作为网页设计师的你有责任给这一批用户一个良好的用户界面。
当然为了减少这种屏幕的浪费,采用弹性流体布局是最好的解决方案,它可以充分利用屏幕空间,无论你是多大分辩率的用户,都能尽情满屏展示内容。然而因为种种限制,目前的网页完全采用流体弹性布局条件还不具备(特别是浏览器厂商对标准的肆意蹂躏以及CSS标准的不完全支持等等)。作为夹在用户和厂商的中间者,我们只能以一种兼容的心态去适应两者的差距。所以,作为一种过渡的解决方案,有了这样一种布局:弹性+固宽布局。
这里所说有弹性,指的是背景去自适应屏幕宽度,而固宽呢,则是让正文内容无论在宽屏还是窄屏中都能自动居中。夹缝中求生存,以满足不同大小分辩率用户的需要。如下图所示的设计就是一个典型的样例。

图一
废话少说,言归正传,我们就来制作一个这样的布局结构:
首先构建结构层:
| 以下为引用的内容: <div id=”wrapper”> <div id=”main” class=”clearfix”> <div id=”header”> <div id=”inheader”></div> </div> <div id=”content”></div> </div> </div> <div id=”footer”> <div id=”infoot”></div> </div> |
分析一下结构层,一个网页一般包括页头,内容区和页脚三大部分,我们将页头和内容放在一个容器层,取名为wrapper,而将页脚独立出来,取名为footer,为什么要这样设计,我们想让这个页脚在内容区不满一屏的情况下也是绝对居底的。其具体的实现原理可以参考这篇文章:《CSS Sticky Footer: 完美的CSS绝对底部》。
我们将wrapper和footer这两个容器设置100%的宽度,让它自动适应屏幕的宽度。并且也将header页头区域也设置成100%宽度。这样我们可以在页头和页脚中插入一张可以水平平铺的图片,使页头和页脚的背景在大屏幕下能水平充满整个屏幕空间。
作为正文内容,我们一般的做法是,当分辩率变大,让它居中显示,两侧留出空白。因为页头区域已经设置为100%宽度,所以我们在header中再添加一个容器层inheader,它来作为真正的页头文字内容的载体,我们再给它设置一个固定的宽度值,比如是960像素宽,然后让它自动居中。
| 以下为引用的内容: #inheader{width:960px;height:110px; margin:0 auto; } |
这样页头的正文浮动haeader的上层,这两个层可以设置不同的背景图片,形成一个叠加的页头效果,它能自动适应更大的屏幕分辩率。
同样的道理,页脚也可以采用这种方法来实现。
在上面的结构层,我在中间内容区没有采用这种方法,而是做了一点变通,我们可以看到在content这个内容区中,没有内嵌一个容器,而只有一个容器。如果我们为了让正文内容的两侧在大分辩率下两侧不显得太空洞,该怎么办呢,当然你可以采用页头和页脚的做法,在它的内容再加一个div。当然为了减少嵌套,我们可以采用变通的办法。我们可以将一张超大的图片加在body中背景中,并用background-position来定位居中显示这张图片,这样在内容区两侧的图片就显示出来了。
本博客就是一个具体案例,在大分辩率下看看本博客两侧图片,然后缩小窗口,就可以看到两侧图片在1024*768时只显示了一小块,而正文内容始终居中显示的。
为了演示效果,我们加入一些其它颜色调置,最后的样式如下所示:
| 以下为引用的内容: *{margin:0;padding:0;} html, body, #wrapper {height: 100%;font-size:12px;} #wrapper{width:100%;background:#777;} body > #wrapper {height:auto; min-height:100%;} #main {padding-bottom: 54px;min-width:960px;}/* 必须使用和footer相同的高度,最小宽度ie6中加JS解决 */ #header{text-align:center;color:#fff;background:#333;} #inheader{width:960px;height:110px;line-height:110px;margin:0 auto;background:#CC9933;} h3{font-size:14px;line-height:50px;} #inheader p{font-size:12px;line-height:30px;} #footer { position: relative; margin-top: -54px; /* footer高度的负值 */ height: 54px;/* footer高度*/ width:100%; min-width:960px;/*最小宽度ie6中加JS解决*/ clear:both; background:#666; text-align:center; color:#fff; } #infoot{height:54px;line-height:54px;width:960px;margin:0 auto;background:#CC9966;} #footer p{line-height:26px;} #content{background:#999;width:960px;margin:0 auto;height:692px;} #content p{line-height:30px;padding:0 30px;color:#fff;} /*说明: 需要注意的就是#main的padding值、footer的高度和负margin值,需要保持一致。下面是著名的万能float闭合Clearfix Hack*/ .clearfix:after { content: “.”; display: block; height: 0; clear: both; visibility: hidden;} .clearfix {display: inline-block;} /* Hides from IE-mac \*/ * html .clearfix { height: 1%;} .clearfix {display: block;} /* End hide from IE-mac */ |
10个CSS简写技巧让你永远受用
May 21
CSS简写就是指将多行的CSS属性声明化成一行,又称为CSS代码优化。CSS简写的最大好处就是能够显著减少CSS文件的大小,其实还有很多其他益处。臃肿而杂乱的CSS样式表会使你遇到问题是难以调试。尤其是当一个团队在进行设计的时候,你的臃肿的CSS代码会使你的团队其他成员的工作效率下降。
今天,暴风彬彬整理了一些CSS简写技巧,它们其实是CSS最常用的写法,但是太多的人使用Dreamweaver这种所见即所得软件来编写CSS,使得代码过于臃肿。不过没关系,看过本文之后,你一能能掌握CSS代码优化的技巧,今后让你的每一个CSS样式表都看起来整洁而简短吧。
属性值为0
书写原则是如果CSS属性值为0,那么你不必为其添加单位(如:px/em),你可能会这样写:
padding: 10px 5px 0px 0px;
试试这样吧:
padding: 10px 5px 0 0;
移除选择器
选择器是你在为一些元素应用CSS样式时的基本方法,比如h1, h2, h2, div, strong, pre, ul, ol等等…如果你使用了class(.类名)或ID(#id名),那么就不用再在声明CSS时包含选择器了。
div#logowrap
尝试扔掉多余的选择器吧:
#logowrap
在这个例子中所谓的那个选择器就是div
*总爱和你开玩笑
要明智的使用*而避免它在整个CSS样式表中乱开玩笑,*是个通配符,你可以使用它来为你的设计部分或全部进行一系列CSS声明。例如:
* {
margin: 0;
}
这个声明会将所有元素的margin值设置为0,同样的,为了严谨起见,你可以尝试这样设置:
#menu * {
margin: 0;
}
这样的声明是指将#menu下的所有元素的margin设为0。
背景
背景(background)属性可能会包含设置背景色、背景图、背景图的位置和背景图重复方式的参数,你可能会写成:
background-image: url(”logo.png”);
background-position: top center;
background-repeat: no-repeat;
其实可以写成:
background: url(logo.png) no-repeat top center;
颜色
颜色(color)属性在CSS通常指定为一个十六进制的值,一个#加6位数,他的简写方式是如果颜色值由成对儿出现的三对而数字组成,你可以省略掉没对中的一个数字。
#000000 可以写成 #000, #336699 可以写成 #369
这种简写技巧只适用于成对出现的颜色值,其它颜色值不适用这种技巧,比如:
#010101, #223345, #FFF000
Margin(外边距/空白边)
声明CSS magin值得时候通常会写成这样:
margin-top:0px;
margin-right:10px;
margin-bottom:0px;
margin-left:10px;
让我们试试把值为0的单位去掉,并把4条声明合并成一条声明:
margin:0 10px 0 10px;
当你生命padding、margin、border(还有一些其他属性)时,记得要把按照顺时针的方向来声明属性值,也就是按照上-右-下-左的方向。关于这些属性还有另一个更加简单的写法,看看属性中上和下、左和右是否值是相等的,如果是那么就可以进一步优化了,你可以省略掉后两个值,剩下的两个值前者指上下,后者指左右:
margin:0 10px;
它是指左右的值为10px,上下的值为0;
Padding(内边距)
padding的简写技巧等同于margin:
padding-top:0px;
padding-right:10px;
padding-bottom:0px;
padding-left:10px;
可以写成:
padding: 0 10px;
Borders(边框)
边框的简写方式相比其它生命来说会比较复杂,很多CSSer一开始都容易记混它的简写顺序,如果你想声明一个1像素宽的实线黑色边框,可能会写成:
border-width:1px;
border-style:solid;
border-color:#000;
其实可以写成:
border:1px solid #000;
注意:这里的颜色值已经使用了上面讲过的颜色简写方法了哦。
我们还可以为四个边设置不同的宽度:
border-top-width:1px;
border-right-width:2px;
border-bottom-width:3px;
border-left-width:4px;
可以简写成:
border-width:1px 2px 3px 4px;
最后,我们还可以只设置右和下边框的样式:
border-right:1px solid #000;
border-bottom:1px solid #000;
虽然并没减少多少代码,但暴风彬彬建议写成这样:
border:1px solid #000;
border-width:0 1px 1px 0;
先设置四个边的默认风格,然后声明具体的哪个边要显示。
文字
文字属性也有很多可能会用到的属性值,像背景一样,你可能会声明这种复杂的文字样式:
font-style:italic;
font-variant:small-caps;
font-weight:bold;
font-size:1em;
line-height:150%;
font-family:宋体, Arial, sans-serif;
其实可以优化成一行:
font:italic small-caps bold 1em/150% 宋体, Arial, sans-serif;
列表
list-style-type:square;
list-style-position:inside;
list-style-image:url(filename.gif);
可以写成:
list-style:square inside url(filename.gif);
Web UI 设计(网页设计)命名规范
May 21

最近工作实在是繁忙,所以好久没有更新自己的博客了,实在是对不起各位读者。今天好不容易闲下来半天,所以和大家分享一下我之前总结的一套Web UI 设计命名规范,也就是网站用户界面设计(俗称网页设计)命名规范。
这套规范并非单纯的CSS、html或JavaScript命名规范,它涉及了很多使用PhotoShop这类设计工具进行网页设计过程中的命名规范。(好久没写文章了,有点罗嗦,吼吼~)。首先我是出于公司几位美工的设计效果图源文件没有对图层命名而开始考虑总结一套的,还有一个原因就是网上大多命名规范都是关于编码的,也就是那些css、html、js和一些服务器端语言的,至于设计方面的命名规范实在是很少。但是毕竟设计师也是技术团队的成员,而且前端开发工程师是要使用设计师的效果图源文件的,所以统一命名规范和设计规范对于团队的协作和工作效率肯定是有好处的。
这套WebUI设计命名规范总结自我的一些Web设计经验和国外设计师的命名方式推荐。
Web UI 设计命名规范
一.网站设计及基本框架结构:

1. Container
“container“ 就是将页面中的所有元素包在一起的部分,这部分还可以命名为: “wrapper“, “wrap“, “page“.
2. Header
“header” 是网站页面的头部区域,一般来讲,它包含网站的logo和一些其他元素。这部分还可以命名为:“page-header” (或 pageHeader).
3. Navbar
“navbar“等同于横向的导航栏,是最典型的网页元素。这部分还可以命名为:“nav”, “navigation”, “nav-wrapper”.
4. Menu
“Menu”区域包含一般的链接和菜单,这部分还可以命名为: “subNav “, “links“,“sidebar-main”.
5. Main
“Main”是网站的主要区域,如果是博客的话它将包含的日志。这部分还可以命名为: “content“, “main-content” (或“mainContent”)。
6. Sidebar
“Sidebar” 部分可以包含网站的次要内容,比如最近更新内容列表、关于网站的介绍或广告元素等…这部分还可以命名为: “subNav “, “side-panel“, “secondary-content“.
7. Footer
“Footer”包含网站的一些附加信息,这部分还可以命名为: “copyright“.
二.需要注意的几点:
1.尽量考虑为元素命名其本身的作用或”用意”,达到语义化。不要使用表面形式的命名.
如:red/left/big等。
2.组合命名规则:
[元素类型]-[元素作用/内容]
如:搜索按钮: btn-search
登录表单:form-login
新闻列表:list-news
3.涉及到交互行为的元素命名:
凡涉及交互行为的元素通常会有正常、悬停、点击和已浏览等不同样式,命名可参考以下规则:
鼠标悬停::hover 点击:click 已浏览:visited
如:搜索按钮: btn-search、btn-search-hover、btn-search-visited
三.Photoshop图层结构规范:
Photoshop图层命名遵循树形结构,凡某元素组成的图层大于3层,即可形成组,所有图层尽量避免使用默认命名(图层+编号)。
第一级图层结构如下图:

第二级结构图例(医院网站):

第三级结构图例及效果图对比(医院新闻栏目):

效果图
图层命名结构
四.常用命名汇总:
页头:header
登录条:loginbar
标志:logo
侧栏:sidebar
广告条:banner
导航:nav
子导航:subNav
菜单:menu
子菜单:subMenu
下拉菜单:dropMenu
工具条: toolbar
表单:form
栏目:column
箭头:arrow
搜索:search
搜索按钮:btn-search
滚动条:scroll
内容:content
标签页:tab
文章列表:list
提示信息:msg
小技巧:tips
栏目标题:title
链接:links
页脚:footer
服务:service
热点:hot
新闻:news
下载:download
注册:regsiter
状态:status
按钮:btn
投票:vote
合作伙伴:partner
版权:copyright
网站地图: sitemap
以上命名规范仅供参考。如果大家对于Web UI设计规范有自己的见解,欢迎大家在此留言一同讨论,互相学习,共同进步:)
Javascript对象概念大全
May 21
本文介绍了几乎所有关于对象的基本概念,什么是对象,如何创建对象,对象的属性的设置和读取,删除属性的方法,构造函数,对象原型,父类,子类,继承等等。
/*
1.对象
对象是一种复合数据类型,它们将多个数据值集中在一个单元中,而且运行使用名字来存取这些值。解释对象的另一种方式是,对象是一个无序的属性集合,每个属性都有自己的名字和值。存储在对象中的已命名的值可以是数字和字符串这样的原始值,也可以是对象。
*/
var o = new Object();
/*
2.对象直接量创建对象
对象直接量由属性说明列表构成,列表包含在大括号中,其中的属性说明由逗号隔开。
对象直接量中的每个属性说明都由属性名加上冒号和属性值构成。
*/
var zhangsan = {name:”zhangsan”, age:34, married:true};
window.alert(typeof zhangsan); //输出object
/*
3.属性的读取和设置
* 对象的属性通过点号运算符读取和设置。对象的新属性可以通过直接创建。
*/
window.alert(zhangsan.car); //输出undefined
zhangsan.car=”BMW”; //直接赋值
window.alert(zhangsan.car); //输出BMW
/*
4.属性的枚举
* 通过for循环枚举每一个属性,顺序不能保证固定。
* 注意枚举出的是属性名称,并不是属性值。
*/
var values = “”;
for(var v in zhangsan)values += v+”\n”; //枚举每一个属性
window.alert(values);
/*
5.属性的删除使用delete,如delete zhangsan.car
*/
/*
6.构造函数
* 构造函数是具有两个特性的javascript函数:
* (1)它由new 运算符调用;
* (2)传递给它的是一个对新创建的空对象的应用,将该引用作为关键字this的值,而且它还要对新创建的对象进行适当的初始化。
* 记住:构造函数只是初始化对象,并不返回新创建的对象。
*/
function Rectangle(w, h){
this.width = w;
this.height = h;
}
var ret1 = new Rectangle(2, 1);
//注意构造函数是如何使用它的参数来初始化this关键字所引用的对象的属性
/*
7.对象的方法
* 所谓方法,就是通过对象调用的javascript函数。我们知道,函数就是数值,它们所使用的名字没有任何特殊之处,可以将函数赋给任何变量,甚至赋给一个对象的任何属性,那么这个属性就是对象的方法了。
* 在对象的方法体内,关键字this的值就成了调用该方法的对象。
*/
function print(){}
ret1.print = print;
/*
8.关于this的讨论
* 任何一个用作方法的函数都会得到一个额外的实际参数,即调用该函数的对象。由于方法通常是对那个对象执行某种操作,所以要表达函数作用于对象这一事实,最好采用方法的调用语法。
* 如rect.setSize(width, height);
* setSize(rect, width, height);
* 虽然这两行代码对对象rect执行相同的操作,但是第一行代码在表达对象rect是操作的焦点(或者说操作的目标)这一观点时显然清楚得多。
*
* 虽然有区别地对待函数和方法比较有用,但实际上它们之间的差别并不大。回忆一下,函数是存储在变量中的值,而那个变量也不过是全局对象的一个属性。因此,当你调用一个函数时,实际上调用的是全局对象的一个方法。
* 在这样的函数中,关键字this引用的是全局对象。所以函数和方法之间在技术上没有差别,真正的差别在于设计和目的上,方法是用来对this对象进行操作的,而函数通常会是独立的,并不需要使用this对象。
*/
(function f(){
var values = “”;
for(var v in this)values += v + ” “;
window.alert(values);
})(); //返回window对象的所有属性和方法名称
/*
9.原型对象和继承
* javascript每个对象都有原型对象,每个对象都继承原型对象的所有属性。
* 一个对象的原型是由创建并初始化该对象的构造函数定义的。javascript中的所有函数都有prototype属性,它引用了一个对象。虽然原型对象初始化时是空的,
* 但是你在其中定义的任何属性都会被该构造函数创建的所有对象继承。
*
* 构造函数定义了对象的类,并初始化了类中状态变量的属性,如width和height。因为原型对象和构造函数关联在一起,所以类的每个成员都从原型对象继承了相同的属性。
* 这说明原型对象是存放方法和其他常量属性的理想场所。
* 注意,继承是在查询一个属性值时自动发生的。属性并非从原型对象复制到新的对象的,它们只不过看起来像是那些对象的属性。这其中有两点重要的含义。
* 一是使用原型对象可以大量减少每个对象对内存的需求量,因为对象可以继承许多属性。二是即使属性在对象被创建之后才添加到它的原型对象中,对象也能够继承这些属性。
*
* 每个类都有一个原型对象,这个原型对象都具有一套属性。但是实际上却有大量的类实例,每个实例都能继承原型对象的属性。由于一个原型对象能够被多个对象继承,所以javascript
* 必须强化读写属性值之间的不对称性。在读对象o的属性p时,javas会首先检查o是否具有一个名为p的属性。如果o没有这个属性,javascript就会再检查o的原型对象是否具有这个属性。这样才使得以原型为基础的继承机制起作用。
*
* 但是当写一个属性的值时,javascript并不会检查原型对象中是否有这个属性的值。因为,如果允许改变原型对象的这一属性,那就改变了整个对象类的p值,包括其他new出来的对象变量的属性值。
*
* 因此,属性的继承只发生在读属性值时,而不会发生在写属性值时。如果你设置的对象o的属性p是对象o从它的原型对象继承而来的,那么结果就是你直接在对象o中创建了一个新属性p。现在o已经有了一个自己的名为p的属性,它就不会再从它的原型对象继承p的值了。当你读p的值时,java首先查询o的属性。
* 由于它发现了o中定义的p,就不必再查询原型对象,也就不会再发现原型对象中定义的p值了。我们称之为o中的p”遮蔽”了或者说”隐藏”了原型对象中的属性p。
*
* 因为原型对象的属性被一个类的所有对象共享,所以通常只用它们来定义类中所有对象的相同的属性。这使得原型对象适用于方法定义和常量的定义。
*/
/*
10. 实例属性、实例方法、类属性、类方法
* 每个对象都有它自己单独的实例属性的副本。我们说javas中的实例属性是那些在对象中用构造函数创建的或初始化的属性。
*
* 实例方法是由特定对象或实例调用的。实例方法使用了关键字this来引用它们要操作的对象或实例。虽然一个类的任何实例都可以调用实例方法,并不意味着每个对象都像实例属性那样含有自己专有的方法副本。相反,每个实例方法都是由类的所有实例共享的。在javascript中,给类定义一个实例方法,是通过把构造函数的原型对象中的一个属性设置为函数值来实现的。
* 这样,由那个构造函数创建的所有实例都会共享一个已继承的对函数的引用。
*
* 类属性表示在所有类实例中只有一个副本。在javascript中,类属性本质上就是全局变量。但是它们与一个类关联在一起,在javascript的名字空间中拥有一个逻辑位置,这样它们就不会被其他的同名属性覆盖。
* 如Circle.PI=3.14。虽然Circle是一个构造函数,但是由于javascript函数是对象,所以我们可以创建函数的属性,就像创建对象的属性一样。
*
* 类方法与类属性相似。在javascript中,要定义一个类方法,只需要用合适的函数作为构造函数的属性即可。
*/
/*
11. 父类和子类
* 在javascript中,Object类所有类的父类,处于类层次图的最上层。所有的类都继承了Object类的所有方法。
*
* 我们已经学会了对象如何从它们构造函数的原型对象中继承属性,那么它们又是如何继承类Object的属性哪?我们知道,原型对象本身就是一个对象,它是由构造函数Object()创建的。
* 这就意味着原型对象继承了Object.prototype属性。因此,ret1会继承Rectangle.prototype的属性,还会继承Object.prototype的属性。整因为所有对象的prototype属性会继承Object.prototype属性,
* 所以所有javascript子类都继承了Object的所有属性,也即Object类是javascript的根类,处于类层次图的最顶层。
*/
/*
12.使用[]读取和设置对象的属性
* 通常会采用点号运算符访问对象的属性,但是点号后面的属性是标识符。在javascript中,标识符必须逐字输入,它们不是一种数据类型。如果程序中属性是动态的、不确定的,那么我们将无法访问。
* 前面解释过,对象是一群属性的集合,也就是数组。那么可以使用数组访问成员的运算符[]来访问对象的属性。[]中是属性名称,是字符串类型,我们就可以动态的确定对象属性名称了。
*
* 使用[]运算符的对象我们也称之为关联数组。关联数组是一种数据结构,允许你动态地将任意值和任意字符串关联在一起。实际上,javascript对象在内部就是用关联数组实现的。使用点号运算符只是为了是他们看起来更像C++和Java的静态对象而已。
*
* 前面的for/in循环实际上是对数组的操作。
*
* 我们通常意义说的数组是将任何值和非负整数关联在一起的数据结构。
*
* 数组实际上是一个具有额外功能层的对象。如var a = new Array();window.alert(typeof a);输出Object。
*/
/*
13. Object类的属性和方法
* constructor属性表示初始化该对象的构造函数。因此,可以使用该属性来判断对象的类型。
*/
function A(){return “aaaaaaaaa”};
var a = new A();
window.alert(a.constructor); //输出的是A的函数定义
window.alert(a.constructor==A); //结果是true
window.alert(a.constructor()); //输出aaaaaaaaaa
/*
* toString()方法没有任何实际参数,它返回的是一个字符串,该字符串代表了调用它的对象的类型或值。当javascript需要将一个对象转化成字符串时就调用这个对象的toString方法。
* 例如,当用运算符”+”把一个字符串和一个对象连接到一起时,或者把一个对象传递给alert()或document.write()方法时,就会调用toString()方法。
*/



































