10 个前端开发必备的工具或使用方法

工欲善其事必先利其器,有了本文介绍的工具和一些功能,你就可以高效的处理任务和信息。下面的这些工具都是本人平时经常用到的,如果你有更好的更有效率的工具,请告知一声,补充一下!

火狐浏览器

使用火狐浏览器

前端要看网页,浏览器是必备的,但为什么要选择火狐浏览器而不是谷歌、IE、opera、360?首先,IE 就不要谈了,360 那些国产的也不要提了,opera 国内使用率并不高。使用谷歌浏览器也是一个好的选择,但是我本人倾向于使用火狐。因为在之前的使用过程中,感觉 chrome 是拿来上网用的,而 Firefox 才是拿来开发用的,特别是下面介绍的一些功能插件都是基于火狐浏览器的。当然谷歌浏览器上面也有一套不错的开发工具。

Firebug

FireBug

这个插件具有非常强大的功能,它把网页的 HTML 结构进行了整理,查看和修改 CSS 也非常方便。这只是基础的功能,还有控制台等可以调试 JavaScript 等,是前端不可缺少的工具。具体使用方法不再赘述。

查看选中部分源代码

查看选中部分源代码

这是火狐浏览器中内置的一个功能,通过选取网页上的一快内容,然后右击查看选中部分源代码,可以快速查看到你选中部分的源代码内容。这样就可以非常快速的了解到某个区域的 HTML 结构,从而避免从海量文件中寻找对应代码。

Yslow

使用 Yslow

网站性能优化也是前端的一个重要任务,而雅虎出品的 Yslow 插件,就是进行网站性能测试的工具。使用它进行测试之后,会给出一个等级以及存在哪些问题以及如何进行修正。官方地址:点击这里

查看元素(三维视图)

查看元素 三维视图

火狐浏览器自带的查看源代码功能还是比较弱的,于是有 查看元素 这个功能。使用鼠标放在某个元素上,右击 查看元素 ,即可看到这个元素的 HTML 结构和对应的 CSS 样式,也可以很方便的修改。但是通常使用 FireBUG 来完成这个任务,因为自带的功能不是特别强。这里主要介绍的是 查看元素 功能中的 三维视图 功能。这个功能可以把你的网页变成三维视图,从而可以非常方便的查看到网站的结构是否合理、是否正确闭合、是否嵌套层数太多。

自适应设计视图

自适应设计视图

目前响应式设计越来越流行,这个功能就是来测试网页的响应式布局效果。同样也是火狐浏览器中内置的功能,在 菜单 中 Web 开发者 选项中可以找到。虽然网上也有一些网页版的响应式测试工具,但是我个人觉得还是浏览器自带的比较方便实用,速度也比较快。此外,据说 chrome 上面也有类似的工具。

IE9

IE9

IE9 是用来做兼容性测试用的。如何做 IE 兼容性测试呢?IE9 已经像 firefox chrome 一样,内置了非常简陋、难用的页面调试功能,但是其中有一个非常重要的功能,就是设置浏览器和文档解析模式。它可以方便的切换到 IE7 、IE8 文档渲染模式,此外还有怪异模式等等。这样,用 IE9 就可以同时做 IE7 和 IE8 的兼容性测试。对了,IE6 呢,IE6 怎么办。原来你还在费力的做 IE6 的兼容?

有道云笔记

有道云笔记

前端也是需要不断学习的,包括一些总结或者网上的资料。以及一些优秀作品的网页截图、图片资源等等,都是需要分类整理的。面多这么多的信息,你如果用文件夹和 Word 文档或者浏览器的收藏夹来整理,那简直是弱爆了。有道云笔记是我用过最好的比较,容量大,使用方便。可以直接使用网易邮箱登陆开通,如果你还没有账号,可以通过我的邀请链接注册。

火狐剪报

火狐剪报

快速对当前网页进行截图,并且可以进行简单编辑。搭配有道云笔记,可以记录优秀的设计,提供一些灵感。此外有很多类似的网页截图工具。

notepad++

NotePad ++

非常小巧好用的文本编辑器。用来快速高效的搜索修改代码。如果你想修改一点小代码的时候,却要忍受几秒的编辑软件启动时间,那么就用这个吧。无论是写代码还是修改代码,个人觉得都比那些功能齐全的编辑软件好很多。当然文本编辑器也有很多,但是用了一遍我个人觉得这是最好的。

DD_belatedPNG 与 unitpngfix 两种解决 IE6 中 PNG 文件透明问题方案横向对比

虽然 IE6 骂声不断,但是仍然还有不少的市场份额。而在网页中,png 文件体积小、无锯齿、透明度好而被广泛使用。当这两件事情碰在一起,问题就来了,IE6 不支持 png 的透明,它会把透明的部分显示成白色的。

有问题就会有解决方法,可以使用早期 IE6 支持的滤镜来实现透明效果,有些牛人就根据这个原理进行了封装,做成了 JS 来使用。所以,我们只需要调用他们编写 JS 文件即可。在网上有众多解决这种问题的方法和插件,但是实际上目前有这两种方式比较有效,那就是 DD_belatedPNG.js 和 unitpngfix.js 这两种方法。本文就是简单介绍一下使用方法和特点,然后将其进行一个对比。

DD_belatedPNG.js 方法

DD_belatedPNG.js 这个插件功能非常强大,强大的背后就是复杂的使用方法和体积大小。首先要下载这个 JS 文件,然后引用到页面中,之后就要为其填写配置一些参数。通常要用两个参数,一个是 CSS 选择器,使用这个选择需要处理的层或者图片,另一个是类型,就是这个图片是作为 img 图片还是 background 背景图片来使用的。插件体积的话,压缩版也有 7KB。

知更鸟已经写了一篇比较简单的使用方法:使用 DD_belatedPNG 让 IE6 支持 PNG 透明图片

官方的英文版提供了更加详细的教程:点击这里

unitpngfix.js 方法

unitpngfix.js 这个插件使用起来非常简单,不需要配置什么参数,只需要引入 JS 插件即可。而且非常小巧,只有 2KB,不需要进行任何配置。但是要注意,JS 文件里面还要配置一个小图片地址,这个图片就是一个 1 像素的透明图片,是这个插件必须的素材。所以你需要上传或者在网上找个,然后填写进去。

更加详细的使用方法请看官方页面:点击这里

上面介绍两种方法的两种方法的使用方法,下面我们从实际应用来对比一下。

实践对比测试

介绍的再怎么好,也要通过实践检验。下面就来动手做个 Demo 亲自测试一下使用过程和效果。Demo 页面非常简单,就是一个带有透明 png 背景图片的 div ,并且把背景图片放在了右下角,关键代码:

div{width:400px;height:400px;margin:20px;background:url(222.png) bottom right no-repeat;border:1px solid #000;}

打开之后的效果是正常的

png 正常效果

现在我们启动伟大的经常无条件崩溃的 ieTest ,使用 IE6 来加载这个页面

IE6 下 png 文件的出错效果

成功的显示出了白色的背景,哦也!

使用 DD_belatedPNG.js 方法:先引用 JS 文件,然后设置上属性和参数。具体代码如下:

<!–[if IE 6]>
<script src="DD_belatedPNG_0.0.8a-min.js"></script>
<script>
DD_belatedPNG.fix('div,background');
</script>
<![endif]–>

DD_belatedPNG 在 IE6 下修正效果

刷新之后,成功修正!

使用 unitpngfix.js 方法:上传并且设置好小图片,然后引用 JS 文件。具体代码如下:

<script src="unitpngfix.js"></script>

Unitpngfix 在 IE6 下的修正效果

但是刷新之后,背景图片却出不来了。当然这个与 IEtest 的不稳定也有关,在原生 IE6 下测试应该不会出现这种情况(未测试),在之前的实际使用中,偶尔会出现这种情况。大部分时候,作为背景图片会跑到左上方,因为 unitpngfix 对 background 的属性支持不太好(官方有提到)。

用户体验对比

DD_belatedPNG.js 的使用效果比较好,达到了要求,但是使用起来比较繁琐,需要针对性的对要使用的图片添加参数,这样就不便于后期的修改。当然,可以新建一个专用的类,为所有需要处理的图片,添加这个类即可,总体上也是比较方便的。此外体积也稍大。

unitpngfix.js 使用起来非常简单,只需要引入这个文件,就可以对页面中所有的 png 图片进行处理。但是对于原图片的 background 属性支持不太好。尤其对 background-position、background-repeat 等属性,容易失效。而且有时不太稳定(未在原生 IE6 下测试)。体积较小。

从效果出发,自然是选择 DD_belatedPNG.js ,但 unitpngfix.js 也是有价值的。如果要你为一个包含很多 png 图片的页面做兼容处理,你是选择使用 DD_belatedPNG.js ,为图片一一添加属性或者把选择器一一填上,还是直接引用一个 unitpngfix.js ,忍受一点效果的缺失?

一种新型超链接交互样式设计与实现

超链接是网页中,必不可少的内容。超链接的交互设计,也是一个网页中最重要的细节。CSS 也为链接准备了几个伪类选择器,用来设置超链接的交互操作。但是在绝大多数网站中,我们看到的超链接交互样式,通常是:改变一下链接的颜色、取消或者增加下划线、点击链接文本变色或者下划线消失等等。但实际上,超链接的交互设计,并非只能这么简单。

很久没有登录 W3C 的官方网站,今天上去看了一下,从第一眼就看到了他们的超练级的与众不同。把鼠标放上,点击,测试了一下他们的超链接交互设计,感觉非常不错,就稍微思考了一下这个设计是如何实现的。稍微思考一下之后,才发现实现这个效果非常的容易,而且兼容性较好。下面就来介绍一下。

先来看一下他们的效果图片,当然,我更推荐直接去 W3C 官方网站看效果。

w3c 的超链接交互性演示

实现原理和分析

首先,仍然是常规的超链接样式,带一条下划线,但是与普通的超链接样式不同的是,这条下划线要粗(2px 普通的 1px),同时这个下划线和文字颜色不同(用 color 和 text-decoration 定义的超链接下划线颜色是和文本相同的)。所以可以肯定,这个下划线是使用 border-bottom 属性定义的,并且 padding-bottom 了几个像素,空开一定距离。然后交互性操作就很简单了,只需要改变一下底边框的颜色就可以了。当点击事件发生的时候,超链接不是简单的改变了颜色,而是向下移动了几个像素,这样给人的错觉就是按下去了一样,这种用户体验是传统超链接仅仅变换颜色所体验不到的。关于这个的实现,需要使用 position 的 relative 属性,激活 top 属性,即可让超链接脱离原来位置向下偏移一定距离。

既然原理分析完毕,那么我们就开始写出相应代码吧。

HTML 结构

随便输入一些字,加上个链接就 OK 了。

<div>
 这里是 潜行者m 随便打的一些字,用来做链接交互样式的演示,<a href="#">链接在这里</a>。这里是 潜行者m 随便打的一些字,用来做链接交互样式的演示,<a href="#">链接在这里</a>。这里是 潜行者m 随便打的一些字,用来做链接交互样式的演示,<a href="#">链接在这里</a>。
 </div>

CSS 样式

div{width:300px;margin:20px auto;line-height:24px;}
 div a{text-decoration:none;color:#000;padding-bottom:1px;}
 div a:link,div a:visited{border-bottom:2px solid #f00;}
 div a:hover{border-bottom:2px solid #00f;}
 div a:active{border-bottom:2px solid #00f;outline:0 none;position:relative;top:1px;}

对 div 的宽度定义只是为了好看而已,对行高的定义,是为了不让下划线影响到下一行文字,这个可以自己决定。然后先对 a 标签取消默认的下划线和颜色,再就是交互性的操作。注意,对 :active 使用了 outline 属性,防止有些浏览器在点击超链接的时候,超链接会出现边框。

发散思维

既然是用了边框的方式模拟下划线,那么可不可以通过调整超链接的高度让这条线变成一条可以交互操作的 “删除线” 呢?当然是可以的,我们只需要把 height 属性调小一点同时还需要让 a 的 display 属性变成 inline-block,就可以让边框穿过文字,由于 overflow 的默认属性是 visible 所以文本仍然是可见的。

div a{text-decoration:none;color:#000;padding-bottom:1px;height:6px;display:inline-block;}

这样就实现了下图效果

具有交互性的边框模拟删除线样式

需要注意的是 a 元素是行间元素,直接对其使用 height 是没有作用的,但是对其加上 display:block 变成块元素,则会脱离文本,所以需要添加 inline-block 属性。但是这样,对于早期的 IE 浏览器兼容性不太好。

制作这样一个超链接的交互样式非常简单,而且交互效果很不错,平时我们应该多一点细心和发散思维,才能不断提高用户体验。

推荐阅读

a 标签的样式规划

inline-block 前世今生

jQuery 自定义网页滚动条样式插件 mCustomScrollbar 的介绍和使用方法

系统默认的滚动条样式,真的已经看的够恶心了。试想一下,如果在一个很有特色和创意的网页中,出现了一根系统中默认的滚动条样式,会有多么的别扭。 为了自己定义网页中的滚动条的方法,我真的已经找了很久了,就目前寻找的成果来说,找到了两个比较不错的 jQuery 插件:jScrollPane mCustomScrollbar 。关于前者,大家见过的可能比较多,但是这个插件太过于古老而且功能不强大。效果在几年前非常不错,但是放在现在就不好说了。所以我选择了后者: mCustomScrollbar。下图是两者官方示例的简单对比:

jScrollPane 和 mCustomScrollbar 的对比

本文就是介绍如何使用这个插件,大部分的内容,是根据mCustomScrollbar 官方的介绍页面进行一个翻译,但将其部分内容修改,同时增加一些自己在使用中的一些技巧。

关于 mCustomScrollbar

mCustomScrollbar 使用了 jQuery UI,可以通过灵活的通过 CSS 定义你的滚动条。同时可以定义垂直的和水平的滚动条,并且通过 Brandon Aaron jquery mouse-wheel plugin 提供了鼠标滚动的支持,滚动的过程中,还可以缓冲滚动使得滚动更加的平滑。可以自动调整滚动条的位置并且可以定义滚动到的位置等。总之,你知道非常好用就好了。

mCustomScrollbar 效果图

点击这里可以下载这个 mCustomScrollbar

点击这里可以查看这个 mCustomScrollbar 的 Demo

如何使用 mCustomScrollbar

首先,先请你下载作者提供的插件包,里面包含了所有的插件文件和一些例子。以下的四个文件时必须要上传到你的服务器上的:jquery.mCustomScrollbar.js, jquery.mousewheel.min.js, jquery.mCustomScrollbar.css and mCSBbuttons.png。_

第一步:加载插件的样式文件。

可以使用以下代码,引入插件包中的 jquery.mCustomScrollbar.css 样式表文件。

<link href="jquery.mCustomScrollbar.css" rel="stylesheet" type="text/css" />

第二步:加载必须的 JS 文件。

需要加载的文件有如下几个:jQuery、jQuery UI, jquery.mousewheel.min.js 和 jquery.mCustomScrollbar.js。jQuery 和 jQuery UI 是必须的, jquery.mousewheel.min.js 是用来提供滚动支持的,jquery.mCustomScrollbar.js 则是插件的主文件。要注意的是,加载顺序也要按照上面说的来,如果不注意加载的顺序,可能会导致失败,原因请看本人的:网页中代码的顺序是不可忽略的细节

你可以使用如下代码加载:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<script src="jquery.mousewheel.min.js"></script>
<script src="jquery.mCustomScrollbar.js"></script>

你可以把这段代码放在文档的底部来缩短加载网页内容的时间,原因也可以在上面介绍的那篇文章中看到。这里的加载的代码使用了 Google 的 CDN 加速服务来获得 jQuery 和 jQuery UI,这样的有好处也有坏处。在插件包中,包含了 jQuery 和 jQuery UI(这个 UI 被作者精简了,包含这个插件必须的模块,大小只有 43KB),你当然可以把插件包中的这两个库上传到服务器上使用。它们在插件包的 jquery 目录里面。

如果当你在使用类似 Google 或者 Sina 的常用 Javascript 库的加速服务的话,更推荐采用下面的写法(以 Google 为例):

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="jquery/jquery-1.7.2.min.js"%3E%3C/script%3E'))</script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<script>!window.jQuery.ui && document.write(unescape('%3Cscript src="jquery/jquery-ui-1.8.21.custom.min.js"%3E%3C/script%3E'))</script>

如果这样写,它会在 库 加载完成之后,做一个判断:如果没有成功加载这个库,那么就生成一段新的 Javascript 引用代码,用来引用本地的文件。这样,如果外面的库无法使用,就会加载本地的库,而不会导致插件无法使用。推荐这种写法。

第三步:对 内容块 激活这个插件

<script>
    (function($){
        $(window).load(function(){
            $(".content").mCustomScrollbar();
        });
    })(jQuery);
</script>

这里我使用了(function($){ … })(jQuery);来包裹 jQuery 代码,这是为了避免 jQuery 和其他的 库 在使用中产生冲突。我还用了window load ($(window).load()) 来激活我的插件功能,因为这样,就可以保证在页面对象全部加载完成之后,加载我的插件。当然,你也可以使用常规的 jQuery 代码加载方法,但是你要明白 ready 和 load 方法之间的不同。一般的 jQuery 代码加载方法如下:

<script>
    (function($){
        $(document).ready(function(){
            $(".content").mCustomScrollbar();
        });
    })(jQuery);
</script>

第四步:在页面中添加内容和样式

没有内容当然谈不上出现这个插件的效果了。就上述示例代码来说,我们应该在页面中定义一个 class 为 content 的 内容块。并添加一些测试数据:

<div class=".content">
    <p>测试数据.......还有很多很多</p>
</div>

这样当然不算完,自定义滚动条的样式,必须要出现滚动条才可以。所以我们还要对这个块加上一些 CSS 来让它出现滚动条,否则是没有效果的。加上的样式很简单,就是定义一个宽或者高或者宽高都定义,然后再定义一个 overflow 值为 auto。这样如果内容超出了指定的宽高,就会出现一个滚动条。例:

width:100px;height:100px;overflow:auto;

完成上述的操作之后,带有滚动条的内容块的滚动条,就变成这个插件的默认样式了。

使用 mCustomScrollbar 之后的效果图

官方的默认样式相对于白色的对比度不高,所以为了显示的明显一点,我加了一个深色的背景色。

当然还有很多参数开扩展插件的功能,这些参数的使用方法过后再讲。先来说说上面用到的这些文件的用途和简单介绍:

jQuery:这个插件的必备库,你懂。

jQuery UI:扩展 jQuery 库并且为我们的滚动条提供了简单的动画和拖动功能。

jquery.mousewheel.min.js:这是 Brandon Aaron 编写的一个伟大的只有 2kb 的插件,它面向所有的操作系统和浏览器,为我们提供了鼠标滚动事件的支持。

jquery.mCustomScrollbar.js:这是我们的插件主文件。在插件包的 minified 你可以找到它的压缩版。

jquery.mCustomScrollbar.css: 这个 CSS 文件是让我们来定义边栏用的。你可以在这个文件中定义你的边栏,当然你可以在其他的 CSS 文件中定义,要注意的是,你要用 CSS 中的顺序,其中的优先级关系来覆盖这个文件中的定义。否则可能会无效,关于网页中代码顺序,详情可以看一下 潜行者 m 的这篇文章:网页中代码的顺序是不可忽略的细节

mCSB_buttons.png: 这个 png 图片文件,包含了向上向下向左向右滚动的按钮。可以使用 CSS sprites 技术,来使用这个图片中的相应按钮。插件包中包含了这个图片的 PSD 源文件(sources/mCSB_buttons.psd ),你可以根据自己的需求自定义。

完成这些,你已经可以正确的使用这个插件,并且看到了相应的效果。但是没有人愿意使用如此强大的插件来实现这个默认的效果,下面来说一下进阶的使用。

mCustomScrollbar 的参数介绍

这个插件的功能巨大,所以参数也很多,参数值当然更多。在介绍参数的时候,我想先为新手介绍两种参数值的写法,分别是直接的和合并的。

我 们平时接触的插件用的参数,都是直接跟着参数写上参数值,这个比较直观简单。在这个插件中,参数值太多,所以把一些参数合并起来写。例如下面要介绍到的 scrollButtons 这个参数,它下面有四个属性:enable、scrollType、scrollSpeed、scrollAmount,这四个属性也分别有自己的值,来 实现相应的功能。如果再加上其他的参数,那么我们应该这样写:

$("#main").mCustomScrollbar({
 scrollButtons:{
 enable:false,
 scrollType:"continuous",
 scrollSpeed:20,
 scrollAmount:40
 },
 horizontalScroll:false,
 });

一定要注意闭合的括号和语句之间的逗号,新手可能会因为不小心,没有严格的按照这个规则写导致插件无法运行。好,下面我们介绍详细的参数。

  • set_width:false | 设置你内容的宽度 值可以是像素或者百分比
  • set_height:false | 设置你内容的高度 值可以是像素或者百分比
  • horizontalScroll:Boolean | 是否创建一个水平滚动条 默认是垂直滚动条 值可为:true(创建水平滚动条) 或 false
  • scrollInertia:Integer | 滚动的惯性值 在毫秒中 使用 0 可以无滚动惯性 (滚动惯性可以使区块滚动更加平滑)
  • scrollEasing:String | 滚动动作类型 查看 jquery UI easing 可以看到所有的类型
  • mouseWheel:String/Boolean | 鼠标滚动的支持 值为:true.false,像素 默认的情况下 鼠标滚动设置成像素值 填写 false 取消鼠标滚动功能
  • mouseWheelPixels:Integer | 鼠标滚动中滚动的像素数目 值为以像素为单位的数值
  • autoDraggerLength:Boolean | 根据内容区域自动调整滚动条拖块的长度 值:true,false
  • scrollButtons:{ enable:Boolean } | 是否添加 滚动条两端按钮支持 值:true,false
  • scrollButtons:{ scrollType:String } | 滚动按钮滚动类型 值:”continuous”(当你点击滚动控制按钮时断断续续滚动) “pixels”(根据每次点击的像素数来滚动) 点击这里可以看到形象的例子
  • scrollButtons:{ scrollSpeed:Integer } | 设置点击滚动按钮时候的滚动速度(默认 20) 设置一个更高的数值可以更快的滚动
  • scrollButtons:{ scrollAmount:Integer } | 设置点击滚动按钮时候每次滚动的数值 像素单位 默认 40 像素
  • advanced:{ updateOnBrowserResize:Boolean } | 根据百分比为自适应布局 调整浏览器上滚动条的大小 值:true,false 设置 false 如果你的内容块已经被固定大小
  • advanced:{ updateOnContentResize:Boolean } | 自动根据动态变换的内容调整滚动条的大小 值:true,false 设置成 true 将会不断的检查内容的长度并且据此改变滚动条大小 建议除非必要不要设置成 true 如果页面中有很多滚动条的时候 它有可能会产生额外的移出 你可以使用 update 方法来替代这个功能
  • advanced:{ autoExpandHorizontalScroll:Boolean } | 自动扩大水平滚动条的长度 值:true,false 设置 true 你可以根据内容的动态变化自动调整大小 可以看 Demo
  • advanced:{ autoScrollOnFocus:Boolean } | 是否自动滚动到聚焦中的对象 例如表单使用类似 TAB 键那样跳转焦点 值:true false
  • callbacks:{ onScrollStart:function(){} } | 使用自定义的回调函数在滚动时间开始的时候执行 具体请看 Demo
  • callbacks:{ onScroll:function(){} } | 自定义回调函数在滚动中执行 Demo 同上
  • callbacks:{ onTotalScroll:function(){} } | 当滚动到底部的时候调用这个自定义回调函数 Demo 同上
  • callbacks:{ onTotalScrollBack:function(){} } | 当滚动到顶部的时候调用这个自定义回调函数 Demo 同上
  • callbacks:{ onTotalScrollOffset:Integer } | 设置到达顶部或者底部的偏移量 像素单位
  • callbacks:{ whileScrolling:function(){} } | 当用户正在滚动的时候执行这个自定义回调函数
  • callbacks:{ whileScrollingInterval:Integer } | 设置调用 whileScrolling 回调函数的时间间隔 毫秒单位
    下面是所有参数的列表和它们的默认值
    $(".content").mCustomScrollbar({
    set_width:false,
    set_height:false,
    horizontalScroll:false,
    scrollInertia:550,
    scrollEasing:"easeOutCirc",
    mouseWheel:"auto",
    autoDraggerLength:true,
    scrollButtons:{
      enable:false,
      scrollType:"continuous",
      scrollSpeed:20,
      scrollAmount:40
    },
    advanced:{
      updateOnBrowserResize:true,
      updateOnContentResize:false,
      autoExpandHorizontalScroll:false,
      autoScrollOnFocus:true
    },
    callbacks:{
      onScrollStart:function(){},
      onScroll:function(){},
      onTotalScroll:function(){},
      onTotalScrollBack:function(){},
      onTotalScrollOffset:0,
      whileScrolling:false,
      whileScrollingInterval:30
    }

mCustomScrollbar 的方法

update

用法:\$(selector).mCustomScrollbar(“update”);

调用 mCustomScrollbar 函数的 update 方法去实时更新滚动条当内容发生变化(例如 通过 Javascript 增加或者移除一个对象、通过 ajax 插入一段新内容、隐藏或者显示一个新内容等)

下面是例子:

$(".content .mCSB_container").append("<p>New content here...</p>");
$(".content").mCustomScrollbar("update");
$(".content .myImagesContainer").append("<img src='myNewImage.jpg' />");
$(".content .myImagesContainer img").load(function(){
  $(".content").mCustomScrollbar("update");
});
$("#content-1").animate({height:800},"slow",function(){
  $(this).mCustomScrollbar("update");
});

当新内容完全加载或者动画完成之后,update 方法一直被调用。

scrollTo

用法:\$(selector).mCustomScrollbar(“scrollTo”,position);

你可以使用这个方法自动的滚动到你想要滚动到的位置。这个位置可以使用字符串(例如 “#element-id”,“bottom” 等)描述或者是一个数值(像素单位)。下面的例子将会滚动到最下面的对象

$(".content").mCustomScrollbar("scrollTo","last");

scrollTo 方法的参数

  • \$(selector).mCustomScrollbar(“scrollTo”,String); | 滚动到某个对象的位置,字符串型的值可以是 id 或者 class 的名字
  • \$(selector).mCustomScrollbar(“scrollTo”,”top”); | 滚动到顶部(垂直滚动条)
  • \$(selector).mCustomScrollbar(“scrollTo”,”bottom”); | 滚动到底部(垂直滚动条)
  • \$(selector).mCustomScrollbar(“scrollTo”,”left”); | 滚动到最左边(水平滚动条)
  • \$(selector).mCustomScrollbar(“scrollTo”,”right”); | 滚动到最右边(水平滚动条
  • \$(selector).mCustomScrollbar(“scrollTo”,”first”); | 滚动到内容区域中的第一个对象位置
  • \$(selector).mCustomScrollbar(“scrollTo”,”last”); | 滚动到内容区域中的最后一个对象位置
  • \$(selector).mCustomScrollbar(“scrollTo”,Integer); | 滚动到某个位置(像素单位)
    scrollTo 方法还有两个额外的选项参数

moveDragger: Boolean | 滚动滚动条的滑块到某个位置像素单位,值:true,flase。例如:\$(selector).mCustomScrollbar(“scrollTo”,200,{ moveDragger:true });

callback:Boolean | 执行回调函数当 scroll-to 完成之后,值:true,false 例如:\$(selector).mCustomScrollbar(“scrollTo”,200,{ callback:true });

disable

用法:\$(selector).mCustomScrollbar(“disable”);

调用 disable 方法去使滚动条不可用。如果想使其重新可用,调用 update 方法。disable 方法使用一个可选参数(默认 false)你可以设置 true 如果你想重新让内容区域滚动当 scrollbar 不可用时。例如:

$(".content").mCustomScrollbar("disable",true);

可以看一些使用 disable 的例子

destroy

用法:\$(selector).mCustomScrollbar(“destroy”);

调用 destroy 方法可以移除某个对象的自定义滚动条并且恢复默认样式

可以看一些使用 destroy 的例子

mCustomScrollbar 的原理

通过潜行者 m 对这些插件的使用,对这些插件的实现原理也做了一些分析。原理就是这样的:

首先获取要修改滚动条样式的内容区块,然后使用 CSS 隐藏掉默认滚动条,然后使用 Javascript 添加很多 HTML 结构,再配合 CSS 做出一个滚动条的效果。然后再使用 CSS 定义滚动条的样式,使用 Javascript 相应鼠标的滚动事件,产生滚动下滑的效果。

明白了这点,下面我们就可以看一下滚动条的结构,然后使用 CSS 对其进行定义了。

定义滚动条外观

先了解一下滚动条的 HTML 结构,下面是默认的垂直滚动条结构:

<div class="content mCustomScrollbar _mCS_1">
  <div class="mCustomScrollBox">
    <div class="mCSB_container">
      <!-- your long content here... -->
    </div>
    <div class="mCSB_scrollTools">
      <a class="mCSB_buttonUp"></a>
      <div class="mCSB_draggerContainer">
        <div class="mCSB_dragger ui-draggable">
          <div class="mCSB_dragger_bar"></div>
        </div>
        <div class="mCSB_draggerRail"></div>
      </div>
      <a class="mCSB_buttonDown"></a>
    </div>
  </div>
</div>

mCSB_buttonUp 和 mCSB_buttonDown 这两个 a 标签只有当你启用了 scroll buttons 功能的时候,才可用。下面这个结构是 水平滚动条 的结构:

<div class="content mCustomScrollbar _mCS_1">
  <div class="mCustomScrollBox mCSB_horizontal">
    <div class="mCSB_container">
      <!-- your long content here... -->
    </div>
    <div class="mCSB_scrollTools">
      <a class="mCSB_buttonLeft"></a>
      <div class="mCSB_draggerContainer">
        <div class="mCSB_dragger ui-draggable">
          <div class="mCSB_dragger_bar"></div>
        </div>
        <div class="mCSB_draggerRail"></div>
      </div>
      <a class="mCSB_buttonRight"></a>
    </div>
  </div>
</div>

知道这些之后,我们就可以来定义滚动条样式了,对于同一页面多个滚动条,官方推荐如下的写法:

._mCS_1 .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
    /* 1st scrollbar dragger style... */
}
._mCS_2 .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
    /* 2nd scrollbar dragger style... */
}
._mCS_3 .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
    /* 3rd scrollbar dragger style... */
}

为了更加直观的看到要定义的滚动条区域,官方给出了一张非常形象的图片

mCustomScrollbar 的滚动条结构图

根据这张图片,就可以很容易的定义滚动条的样式了。

更加进阶的使用

修改浏览器的滚动条

单单是修改某个内容区域的边栏已经无法满足我们的需求了,我们还想修改浏览器边栏应该怎么办?这当然是无法用 Javascript 来实现,因为浏览器是一个容器,Javascript 是容器里面的代码,怎么会把容器修改了呢?当然,有问题就肯定有解决方法。面对这个问题,解决方法很简单,就是虚拟出来一个浏览器窗口。

我们先添加一个 div 块,然后对这个 div 添加 position:absolute 属性,然后就可以指定它的 width 和 height 为 100% 或者稍微小点的 98%。这样,这个 div 就扩充到了整个浏览器界面,这样就可以被当做是一个网页的 body。然后加上 overflow:auto 让其超出自动出现滚动条。这样就可以模拟出修改了浏览器滚动条的效果。

关于更多的进阶使用和技巧,欢迎跟我交流,也可以关注本文,会在后面陆续添加。

字体是网页设计中最重要的细节

一个非创意性质的网页,最重要的内容,就是文字。出现了文字,就会出现文字排版、字体选择、字体颜色大小粗细等细节。而这些细节,往往是非常重要的细节。

好的字体排版,可以让人耐心的看完那些文字,然后得到其中的重要信息,还可以影响到浏览者阅读的心情。同时,字体的选择、大小等,还应该配合企业的 VI 识别系统,还需要配合你作品需要表达的思想感情来确定(例如古典风格,应该选择哥特式字体等)。

好了,关于字体的重要性,我就说这么多,再多说也是废话,只要大家知道很重要,要好好选择调整就好了。

字体的分类和格式

衬线和无衬线

衬线算是一种辅助性的小细节,笼统的谈,太过于抽象,我们来看两个例子:

这两个字体,是有衬线字体,大家可以看到在边角的位置,会多出一些修饰。这样的好处就是,可以清晰的分辨出字母和文字,分辨笔划的起始和终止。但是,这种字体如果设置字体大小太小的话、或者你里文字较远,则会受到衬线影响,分辨不清晰。同时,由于中文系统,默认的字体为宋体,见的太多导致审美疲劳,所以衬线字体比较适合打印文字以及正规文档中使用,通常不太适合使用在网页中。

这两个字体,就是无衬线字体,没有边角的修饰,令人看起来很整齐光滑,没有毛刺。比较适合用在网页中,让浏览者获取大量的文字信息而不会疲劳。

字体系列

字体之间最大的差异并不在于有无衬线,而在于字体与字体之间,形体的差异。但是很多字体(特别是英文字体)之间,差异不大,有些新字体甚至是对已有字体进行了细微的改造后产生的。

于是,就把字体分成了几个大的系列,同一个系列中的字体,大体相同,称作通用字体系列。其中包括以下五个系列:

serif:带衬线字体。Times New Roman 是默认的 serif 字体,中文字体的话,是宋体、仿宋之类的字体。

sans serif:无衬线字体。Arial 是默认的 sans-serif 字体,中文字体中,微软雅黑、黑体等都是这类字体。

monospace:等宽字体。这个字体里面的每个字母都有相同的宽度。通常用于显示程序代码等,Courier 是默认的 monospace 字体。而对于中文,每个汉字都是等宽的。

cursive:模仿手写字体。手写体,比较个性,通常用于标题、logo 等等。这个字体系列没有默认字体,英文来说,通常用 Comic Sans,中文的话,行书系列、草书系列的字体等,都可以算作手写字体。

fantasy:装饰用字体。多数用于标题,极具个性,字体繁多,艺术字体。无法对其的大小、形状下一个统一的定论,所以没有默认字体,在网页中,也通常很少用到,除非你有特殊的用处创意性的设计。

关于通用字体系列的更多解释、描述和字体举例,推荐大家查看在 W3school 上的资料。

字体的格式

格式就是指字体表现出来的粗细、宽度和姿态等等特征。看下面的这张图片:

里面的字,是相同大小的,同时排放在一条竖线上。为其应用了四种不同的字体后,体现出来了不同的形态和粗细大小。在中文字体中,不同的字体,在字间距中通常没有很大的变化。而在英文字体中,不同的字体会改变字母的大小,导致整体的尺寸布局不同,进而导致整个排版混乱。

相同的字体大小,在不同的字体下面,显示的效果几乎完全不同。这是英文字体选择中,比较麻烦和头疼的问题。

字体的选择

上面的这些理论,从某些角度和意义上来说,都是废话。如何选择合适的字体,才真正切合实际。那么我们应该如何选择在网页中使用的字体呢?

解决这个问题,我们先应该知道为什么要纠结于选择字体这个问题。我个人认为应该存在 实用性创意性 这两个方面的因素。创意性很好理解,就是想突破常规,配合自己的网页中的设计思想而选择相应的字体,例如表达程序员的思维,就对代码使用等宽字体,表达恐怖、古典,使用哥特式字体等等。这点自己去找字体好了,不再赘述。最主要的问题是在于 实用性 的方面。

实用性问题,即不需要太过于华丽的字体,只需要大家看的都舒服、稍微带点自己的特色即可。你会说,很容易啊,直接 CSS 定义一条,填上个字体就好了。如果真这样,那就太好了。浏览器解析字体的过程实际上是这样的,当浏览器加载 CSS 后,解析到有关字体的样式,它会在你的系统中查找这个字体,只有找到了相应的字体文件,才会根据那个字体文件对网页中的文字进行渲染,显示出你想要的效果。

既然这样,如果你的操作系统中,并没有安装网页中定义的那种字体,就无法渲染出那种字体的效果,而通常使用当前系统的默认字体来渲染。那么你原有的设计,就不行了,你设计时觉得挺好,字体、位置、大小合适,但在别人的电脑上,清一色的宋体。所以这个问题,才是选择字体的难处所在。当然,有问题就有解决方式:

使用经典通用字体

不同操作系统都有不同的字体系统,但既然是字体,总有一些比较经典老牌的字体共同存在于各个系统中。例如无衬线的 Arial 字体,它产生的时间比较早,同时价格低廉,所以从早期就被 windows 操作系统使用,在其他的操作系统中,也会有较好的不同于默认字体的显示效果。所以 我爱水煮鱼潜行者 m 博客 这些网站,直接在 CSS 中声明使用一个字体:Arial。

使用多个字体属性

上面的方法很简单,但是不灵活,注重简单而不注重细节。CSS 做的很好,它可以在一个网页中,声明指定多个字体,这样当写在前面的字体,在当前操作系统中没有的话,就会使用后面字体顶替。所以当你看一些网页作品的时候,会发现它的 CSS 中的 font-family 属性,指定了一大堆的 字体 名称。但这个也不是可以随便指定的,也有一些注意事项。

你应该这样做,先确定你网页中需要用到的字体,然后确定属于哪个字体系列有无其他的相近字体以及衍生字体,然后编写字体属性。顺序如下:最想用的字体》》可以代替的相近字体》》相近通用字体。例如如下写法:

font-family: Times, TimesNR, 'New Century Schoolbook',Georgia, 'New York', serif;

这样的意思就是,优先使用 Times 字体,然后系统没有的话,查找同型异名的 TimesNR 字体,如果没有,寻找系统中的相近字体 New Century Schoolbook 等其他字体,最后如果都无法找到,就使用通用字体 serif ,这样浏览器就会寻找系统中的 无衬线 的默认字体,来代替。

字体的大小选择

形容字体大小的单位

在 CSS 中,最常用的描述字体大小的单位有两个:empx。通常认为 em 为相对大小单位,px 为绝对大小单位。但从实际应用中来讲,px 像素其实也是一种相对大小单位。例如,在一块 15 寸分辨率为 800x600 像素的屏幕上,10px 大小的文字,要比一块 10 寸分辨率 1024x768 像素的屏幕上的 10px 大小的文字显得更大一些。下面来说一下它们的区别和用法等。

px:像素单位,10px 表示 10 个像素大小,在现在的网页设计中,常被用来表示字体大小。很方便很直观,但是有一些弊端。对于可用性不太友好,因为是“绝对”单位,所以有些浏览器(早期)的字体放大缩小功能失效。浏览器的默认字体大小为 16px ,早期的网页,由于屏幕分辨率比较低,通常采用 12px 作为网页正文的标准字体大小。但是在现在,感觉有点偏小,比较长的文章来说,浏览者看起来费劲。现在我更主张使用 14px 作为标准字体,16px 作为中等字体,18px 作为较大字体,12px 作为偏小字体比较合适。

em:相对大小,它表示的字体大小不固定,根据基础字体大小进行相对大小的处理。浏览器默认的字体大小为 16px,如果你对一段文字指定 1em,那么表现出来的就是 16px 大小,2em 就是 32px 大小。相对大小单位有很广泛的用途,由于它的相对性,所以对跨平台跨设备的字体大小处理上有得天独厚的优势,同时对于响应式的布局设计也有很大的帮助。但是缺点很明显,你无法直观的看到大小,而且对于不同的大小,你需要精确的计算。

字体实际表现出来的大小

上面只是说了两种形容字体大小的单位,但实际上表现出来的字体大小,并非简单的单位前面的数值。除了数值之外,潜行者 m 个人认为还跟 设备视距 有关。

设备就是指显示设备的分辨率及屏幕大小,跟前面解释 px 单位的相对性相同,如果在一块非常大的分辨率非常低的屏幕(像广场电子屏),即使很小的像素,也会展示出很大的字。这也就是为什么早期的 800x600 像素横行的时候,大家都是用 12px 大小的原因。因为显示的文字已经够大了。

视距就是指浏览者看文字的距离。很明显的道理,眼睛距离屏幕越远,看起来上面的文字就变小了。

所以在选择网页中字体大小的时候,还需要考虑你的用户的实际使用习惯。同一个网页,在笔记本上和在手机上使用的时候,字体大小就不应该相同,因为电脑屏幕大分辨率高,而且视距通常比较近而且固定,手机等屏幕小分辨率较低,视距更近(大家都喜欢躺着或者趴着玩手机啦),所以这些都要考虑,才能得到一个合理的大小。

为什么是偶数字体大小

通过上面的单位介绍,对于 px 单位中,我举得例子都是 12px、14px、16px、18px 等等,为啥不是 11px、15px?这涉及到一个锯齿的问题,特别是在早期的显示器中,往往不能很好的处理文字的锯齿问题,而使用单数的像素,极有可能造成锯齿,所以默认的通常使用偶数大小。

字体的颜色选择

字体的颜色选择同样是一个重要的细节,但是涉及到配色了,已经超出本文要讨论的范围,所以在这里,我只好简单的说一下有关网页中字体颜色的禁忌。

字体的颜色要朴素、正常

什么叫朴素正常?通常来说,文章都是白底黑字,黑色的。所以网页中的文字,通常使用黑色,或者浅灰色,这样更加符合大众的口味。如果不是一些很有创意的设计,请不要随便的使用颜色。就像 我爱水煮鱼 博客里面的一篇文章

如果我为它加上蓝色,你会怎么想?

颜色要与背景有一定的对比度

低对比度,容易导致字体看不清楚。所以要用高对比度的颜色,例如白底黑字,黑底白字等。不信看下图:

如果你在看一篇文章,字体的颜色是上图中,最下面的那个,你还会再看下去吗?

避免特殊颜色

这里要避免的一些特殊颜色,是指网页中的一些默认颜色。特别是蓝色,因为蓝色代表着网页中的超链接,如果网页中有一段蓝色的文字,会让人误以为是可以点击的超链接。所以这种颜色要尽量避免。但是有些时候在设计中,必须要用到这种颜色的设计,所以也有一些其他的方法来解决这个问题。

例如潜行者 m 博客的 Qetro 主题,采用了蓝色调,在正文排版布局的时候思考过关于加粗文字的样式。如果使用常规的粗体黑色来说,较多的加粗内容,会导致页面文字的混乱。加粗的目的是为了醒目,告诉浏览者这是段重要的文字。所以我对文字添加蓝色处理。但是这个蓝色恰巧就跟超链接的默认样式颜色相同。非常容易让人迷惑,于是我将超链接的样式带有默认的下划线。

当用户看到蓝色的时候,可能会试图放在上面看一下,结果无法点击也没有变成手指。再往下拉,看到超链接的时候,一眼就可以看出下划线是可以点击的超链接。这也是一种还不错的折中方法。

与字体有关的 CSS 属性

与字体有关的 CSS 属性,通常有以下几个:font-family、font-style、font-weight、font-size、line-height、letter-spacing、word-spacing、text-align、text-decoration。

font-family:用于定义字体,上面有演示不多说。更详细的资料请看:font-family

font-style:用于定义字体的样式,包括正常、斜体、倾斜等,对应的属性值为:normal - 文本正常显示、italic - 文本斜体显示、oblique - 文本倾斜显示。

font-weight:用于定义文字的粗细,详细的属性值请看:font-weight。

font-size:设置字体大小,不再赘述。

line-height:用于设置文字中的行间距,合适的行间距对用户阅读带来良好体验。同时还可以用于垂直布局单行文字。

letter-spacing:设置文字之间的字间距,使文字之间的距离增大或者减小。

word-spacing:用于调整单词的间距。

text-align:用来对齐文字,例如左对齐、右对齐、居中对齐等。

text-decoration:用来修饰一段文本,例如添加下划线等。常对 a 标签使用这个属性消除其默认的下划线。

上面是与字体相关,比较常用的 CSS 属性,还有其他更加具体的,可以参考网上的资料,推荐 W3school 上面的有关字体的资料。

使用在线字体

在 CSS3 中,引入了一个非常强大而且实用的功能来面对上面的字体选择问题。传统的字体选择,要你的操作系统中安装相应字体才可以显示。如果你在网页作品中,使用了其他的创意字体,那么你需要生成相应的文字图片来替换,否则不会显示。CSS3 中的这个功能,就是 Web Fonts,网页中可以使用安装在服务器端的字体。你可以将选择好的字体,上传到服务器中,然后使用 CSS3 新增的 @font-face 属性,来调用服务器上的字体,然后来渲染网页。

支持 CSS3 这一功能的浏览器,会首先找到服务器上的字体,然后下载下来进行渲染。这样就彻底解决了本地操作系统中,没有对应字体的问题。关于 @font-face 的具体使用方法,由于比较多,在本文不再赘述,请大家自行百度之:@font-face 的使用方法

既然如此,那么选择的余地就很大了,只需要有字体文件就可以。于是一些人就开始想,我可不可以提供一个在线字体的服务,大家可以直接看到字体的效果,然后获取代码引用这个字体?于是就出现了在线字体,比较有名的有 Google 在线字体

不要高兴的太早了,自定义字体,目前只能应用在英文中。为什么呢?你下载个字体看一下就知道了,通常英文字体只有几百 KB,因为它只需要包含数字、标点、英文字母即可。而中文字体通常十几 M,最小的也要好几 M。因为汉字实在是太多,而且还需要对每个汉字进行设计制作。这样的话,汉字就没法应用了,因为你要打开一个网页,还需要先下载个几 M 的汉字字体,在目前国内的网速是不现实的。

参考和推荐文献

本文部分参考并引用了以下网络资料,同时也推荐以下资料:

网页中代码的顺序是不可忽略的细节

仿佛奇怪的问题总是喜欢找上那些初学者。当我在学习制作网页的时候,经常遇到一些很特别的问题。例如:刚刚添加的样式不起作用、jQuery的代码老是不起作用等等。这往往是不关注细节导致的。而今天我要谈的这个细节,就是关于网页中代码的顺序。没错,代码也是有顺序的,顺序不对有可能会出现一些意外的情况。

HTML 相关的代码顺序

下面先来介绍 HTML 中的代码顺序。

HTML 代码的排序原理

排序原理很简单,因为当浏览器访问一个网页的时候,要下载这个网页。现在的网速,对于一个几百K的网页来说,很快就能下载完。但是如果网页比较大或者网速比较卡,网页下载就会需要一定的时间。这样的话,浏览器显示网页的过程就很明显了。从 HTML 代码的上到下,依次下载。重要的内容要优先加载,所以就产生了 HTML 代码排序的问题。

head 里面的元素排序

HTML 中的 head 元素里面,通常放置着文档的描述信息。一般有:网页编码、title标题、meta 描述网页关键字、link 引入 CSS 文件、script 引入 Javascript 文件等等。下面就这几个内容进行一个讨论(以 HTML5 为例):

首先,先是标准的 DOCTYPE 声明、HTML 结构那一套。

<!DOCTYPE html>
<html>
<head></head>
<body></body>
</html>
其次,编写网页编码,我个人认为编码是网页中最重要的,因为它决定浏览器采用什么编码来解析你的网页,如果编码没有设置好的话,网页显示出来就是一整个乱码。关于网页编码的更详细的文章,可以看一下 [潜行者m](http://www.qianxingzhem.com) 写的 [网页编码就是那点事](http://www.qianxingzhem.com/post-1499.html) 。编码写完之后,应该让浏览器立刻显示出网页的标题,这时候就应该写出 title 标题了。
<meta charset="utf-8" />
<title>标题</title>
接下来,就应该是声明文档的各种信息,例如 关键词、描述、作者等等信息。之后就要加载 CSS 样式表。让浏览器先下载好 CSS 样式表,之后下载的网页内容,就会立刻加上 CSS 的样式效果,谁也不希望打开网页的时候,是没有样式的,然后加载完内容之后才出现正常的页面。这也就是为什么 CSS 引用要写在 head 里面。
<meta name="keywords" content="潜行者m,网站建设,前端设计,Web开发" />
<meta name="description" content="潜行者m 博客,是由 潜行者m 个人设计制作,完全原创写作,关注网站建设/前端设计/Web开发相关的独立博客。欢迎各位观看学习,并且与本人交流!!" />

<link rel="stylesheet" type="text/css" media="screen" href="http://www.qianxingzhem.com/wp-content/themes/qetro/style.css"/>
关于 JavaScript 的位置一直比较有争议。因为 JavaScript 比较灵活,可以添加在页面的任何位置。通常推荐的是加在页面的最底部。因为JavaScript 文件通常比较大,浏览器下载比较费时间,由于 JavaScript 可能会影响到当前页面的结构内容,所以浏览器通常会先下载完JavaScript 代码,“运行” 之后,再下载网页的正文内容。这就导致了加载速度比较慢,因为要先加载 JavaScript 代码才会显示网页内容。所以要放在页面底部。这样浏览器会先下载网页的内容显示出来,然后再下载 JavaScript 对当前的网页进行处理。 ### body 主体内容的排序 前面说过浏览器先依次下载网页然后显示,那么网页主体内容的排版布局就很明显了:**重要的内容排在前面**。 例如一个博客类型的网页,最重要的内容肯定是 文章 。所以文章的内容要尽量放在网页的顶部。虽然它可能要显示在下面,但是也要放在代码的上面,然后通过 CSS 布局等放在下面。当网速很卡的时候,排版合理的博客很明显就可以看到,先显示出来头部、文章主体内容,之后再显示 边栏、底部 内容。这就是为了让用户最快的看到他们想要看的内容,即使网速很卡下载很慢,内容出来了边栏等都下载不下来,用户也会得到他需要的内容。这就是 body 元素里面的代码排序原则。 ## CSS 代码的排序 CSS中有很多排序的小细节需要注意,不注意的话很有可能就出现一些意外情况。 ### 顺序解决样式冲突问题 当你对一个元素赋予了 background-color 属性,你在其他地方,忘了之前的设置,又对这个元素赋予了一个属性值与之前不同的 background-color 属性。那么浏览器究竟会对这个元素渲染哪一个背景颜色呢?答案是代码排在后面的属性值。冲突的内容,后面的属性值就会覆盖前面的属性值。因此要注意,一些 [CSS reset](http://www.qianxingzhem.com/post-610.html) 等要先加载,然后在后面加载自己写的属性值。例如:CSS reset 通常会取消 strong 的加粗,但有时我们的网页作品中,要 strong 显示成加粗效果,所以我们要设置 strong{font-weight:bold;} 这样的样式。但如果 CSS reset 代码放在后面,它之前对 strong 的取消加粗属性就会覆盖掉你的 加粗效果。所以无论刷新网页多少遍,你的 strong 标签里面的内容,还没有加粗。 如果有时候,你真的无法修改加载文件的顺序,那么面对这种情况,你可以使用 CSS 中的 !important 语法,告诉浏览器要使用这个属性解决冲突。 ### 链接的交互排序 一个超链接,默认是蓝色的,当我们把鼠标移动上去,会变色,点击的过程也会变色,访问过后回来一看,通常也不会是原来的蓝色了。控制这些颜色的,分别是 CSS 中的 :link 、:visited 、:hover、:active 这四个伪类选择器,从名称就可以看出,控制的状态分别是:默认显示、访问过后、鼠标移动上去、点击激活。有时候会出现一些意外情况,例如:同时设置了 :visited 和 :hover 的样式,但一旦超链接访问后,hover 的样式就不出现了等。这是因为,这四个伪类选择器对 a 元素定义的时候,是有一个顺序的。如果不按照这个顺序,就会出现一些意外情况。 这个顺序有一个很好记的方法,那就是:love hate,即 l(link)ov(visited)e h(hover )a(active)te。
a:link{color:#666666; text-decoration:none;}
a:visited{color:#666666; text-decoration:none;}
a:hover{color:#666666; text-decoration:underline;}
a:active{color:#666666; text-decoration:none;}

属性值的顺序

CSS 中,有的属性既可以分开写,也可以合并起来写。例如 margin 属性,你可以分别制定 margin-left 、margin-right、margin-top、margin-bottom 的值,也可以直接写成 margin:top right bottom left; 也可以写两个参数,分别代表上下和左右的外边距。这样的写法简练而且灵活,但是对不熟练的新手来说,比较容易搞混。当类似 margin 、 padding 这样的属性,写四个参数的时候,以 top 开始,顺时针旋转。

除此之外,还有类似 font、background 这样的属性,它的属性值也要有顺序(虽然对顺序要求不严格),它们的参数有缺省值,所以不需要全部定义,只需要定义自己需要的样式即可。但是 border 这样的属性,就必须严格的按照语法编写属性值的顺序。例如:border :1px solid #ccc;如果 1px solid #ccc 这三个值的顺序出问题了,那么浏览器就可能无法解读这段 CSS 的样式。

JavaScript 代码的顺序

JavaScript 文件加载顺序

jQuery 是一个比较常用的 JavaScript 库,通常我们还要配合它强大的插件使用。对于新手来说,经常会遇到没有产生相应效果的问题。就是说,代码没有检查出问题,但就是没有执行显示应有的效果。原因就出在加载顺序上面。你编写的 JavaScript 代码以及调用的 jQuery 插件,都需要基于 jQuery 库,所以应该在所有 JavaScript 代码之前,先引入 jQuery 库。浏览器先把库下载完了,才会识别后面的依赖这个库的代码实现相应的功能。同样的,激活使用某个插件的代码,也需要放在插件的后面才会有效。

<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="jquery/jquery.lazyload.js"></script>
<script type="text/javascript" src="jquery/插件.js"></script>
<script type="text/javascript" src="自己编写的js/js.js"></script>

使用 HTML5 正确合理的重构你的网页

这可能是我在建博之后到现在为止,写过的最长的一篇文章,不过也是在这个博客里面,文章最短的。什么意思呢?

这里的这篇文章,我就写这么几个字。但是这篇文章,我写了大约两天,包括构思,查阅资料,排版等等。

denis 的水煮鱼博客,不知道编辑器抽了风,编辑起来好麻烦。

好了,直接给出地址:http://fairyfish.net/article/designing-with-html5/ ,我懒得复制过来排版了。

设计中默认样式的强大威力

默认样式,就是最原生态的样式。就像大家经常用的按钮或者蓝色有下划线的超链接。本文,潜行者 m 将从两个元素来讨论默认样式在设计中的应用。

超链接的默认样式

超链接的默认样式 超链接是网页中最常用最基础的元素,可以说是必不可少的。我们设置超链接,也是希望人们去点击,去使用它。那么我们拿什么让人们知道,这是一个超链接呢?你可以在旁边说,这里有个超链接,快来点击我。但是,当人们看到这几个字的时候,是需要思考的,实际情况下,人们是不想思考的。所以,我们设计的目的,就是让人们一看上去,就觉得这是一个可以点击的超链接。这里几个超链接,我分别为他们加上了样式,请看下图:

请你告诉我,这里面究竟哪一个才是可以点击的超链接?很显然,第一个超链接是默认样式,这种蓝色下划线的样式,已经深入人心,任何一个经常上网的朋友,看到这个就知道它是一个可以点击的超链接。但是有个非常明显的问题,这种蓝色下划线的样式实在是太丑了。而且和我的设计风格不相似。那么,我们就可能会考虑后面三种。

现在,我们的任务就变成了,如何让后面的这三个超链接,变得让人以为这是一个可以点击的超链接。这时,我们需要结合具体的文境来说。请看下面这张图,我已经把上面这三个超链接加入了文章中:

这是比较常见的文章环境,当超链接在文章中时,我们就会发现一些东西。现在请你告诉我,这四个链接的位置以及究竟哪一个链接可以点击?很显然,第一个下划线的可以点击。然后红色、蓝色链接也可以轻易找到,但是黑色的却不见了。因为它的样式和文章的一样。

当我们抛开第一个,请你再告诉我,究竟哪个是可以点击的超链接?很显然,是红色后面的蓝色超链接,因为蓝色是超链接的默认颜色,是标志性的颜色,所以我们会认为蓝色是可以点击超链接。如果排除蓝色链接,你还会点击什么?这时候,你会发现文中突然黑字里面出现了一个红色超链接。这是你的大脑会进行短暂的思考,这个红色超链接是什么,为什么别的都是黑色的,它是红色的?它是不是有特殊的功能,是不是可以点击?要不我把鼠标移动上去,看看吧。

当我们把鼠标移动上去之后,发现鼠标变成了小手状,红色还变了色,而且还加了下划线。OK,这个就是可以点击的超链接了。

至于黑色超链接,潜行者 m 就直接找不到了,碰巧鼠标移动到什么,可能会变成小手。但是一般人是无法注意到了。

通过这个案例,我们可以分析出,超链接应当如何定义:

  1. 尽可能的使用默认的蓝色,甚至加上下划线。如果与风格不符,请使用与其他文字差别较大的色彩来表示,这是一段与众不同的文字,它有特殊的含义。
  2. 当鼠标移动上去的时候,请定义:hover,让其进行变色,并且加上下划线,因为这是一个超链接默认的样式,经过这样处理之后,能够让人深信不疑的认为这是一个超链接。
  3. 如果你无法合理的配色或者你的作品无法使用多种色彩,请尝试让字体变大或者变小或者倾斜,让超链接变得与众不同,这样就会让人产生疑问。
  4. 如果你无法比较合理的完成上面三条,请不要使用默认样式。

按钮的默认样式

按钮也是使用比较广泛的网页元素,通常用于表单提交,或者其他需要点击的地方。通常有以下三种形式的定义

第一种就是默认情况下的,而第二种只是简单的个边框,使其去掉默认样式平面化,第三中则可以代表使用图片背景的自定义按钮。

当你第一眼看到这三个按钮的时候,很显然,第一个是最想按钮,并且可以让人产生点击欲望的按钮。除了第一个之外的后面两个呢?这里需要注意一下,第三个是有一个变色处理的,当鼠标移动到上面,会变成这样:

默认的按钮样式以及满足不了我们网站的风格,所以我们目前的任务,就是让后面两个按钮,变得像可以点击的按钮。我们主要来分析一下,为什么后面两个按钮不像前面那个可以点击的按钮,有什么特点和区别。

1,外观要像一个按钮,其中第三个要比第二个更像按钮,因为它是圆角、椭圆形的,它要比直来直去的方框更容易给人以按钮的感觉。

2,要有 3d 突出感,按钮是一个突出的东西,给人一种 3d 突出的感觉更让人容易相信这是一个可以点击的按钮,例如淘宝购买按钮

可以通过添加阴影或者渐变等,制造这种突出的效果。

3,要有变换特效,及时的和浏览者沟通,告诉他们,这是一个可以点击的按钮。

4,如果你的设计,无法很好的完成上面说的三点,请使用默认样式。

全代码打造简洁美观回到顶部按钮

这次,潜行者m带来一个jquery的比较实用的教程,就是为你的网站添加一个纯代码画出来的、简洁美观的回到顶部按钮。这个按钮的效果就是,当页面滑动一段距离之后,就会浮现出来这个按钮,点击这个按钮之后,就自动滚动到顶部。具体效果如下:

点击之后就会跳转到顶部,然后这个按钮平滑消失。与网上的相比,潜行者m版的是纯代码,加载速度更快,效果色彩控制好;代码精简,只有数条而已,拒绝大坨大坨的代码。废话不多说,下面就开始制作。

html结构

我使用了a标签作为这个结构,可能不太标准,但是比较方便。在a标签中,内置了一个span标签,用来显示三角号。具体代码如下:

<a id=”gotop” href=”#”>
<span class=”gotop-shang”>▲</span>
</a>

对,你没看错,就这么简单的一句代码,直接在a标签中,填写一个三角号。剩下的就是使用css进行样式控制。

css代码

a[id=”gotop”]{
display:block;
width:60px;
height:60px;
position:fixed;
bottom:50px;
right:40px;
border-radius:10px 10px 10px 10px;
text-decoration:none;
display:none;
background-color:#999999;
}

上面这段代码,定义了a标签的外观样式,定义display为block,这样,我们才能指定它的width和height。定义position为fixed,让它固定在右下角。同时为它指定圆角,就是使用border-radius属性,定于半径为10px的圆角。

span{
display:block;
width:60px;
color:#dddddd;
}
span:hover{
color:#cccccc;
}
span[class=”gotop-shang”]{
font-size:40px;
text-align:center;
margin-top:4px;
}

上面这一段,就是定义了span标签里面的三角号,如果你不会打三角号,可以看本人的这篇文章:亲自打造属于自己网站风格的工具边栏,里面有提到这个。这几句代码意思很简单,就是定义了三角号的外观样式,同时制定了颜色变化,这是为了用户体验。最下面的margin-top:4px,则是用来准确定位三角号,让它居中显示。

jquery代码

具体的javascript代码如下,解析已经写在注释里面了:

$(function(){

$(window).scroll(function(){  //只要窗口滚动,就触发下面代码
    var scrollt = document.documentElement.scrollTop + document.body.scrollTop; //获取滚动后的高度
    if( scrollt &gt;200 ){  //判断滚动后高度超过200px,就显示
        $("#gotop").fadeIn(400); //淡出
    }else{
            $("#gotop").stop().fadeOut(400); //如果返回或者没有超过,就淡入.必须加上stop()停止之前动画,否则会出现闪动
    }
});</pre>


$(“#gotop”).click(function(){ //当点击标签的时候,使用animate在200毫秒的时间内,滚到顶部
$(“html,body”).animate({scrollTop:”0px”},200);
});
});

怎么样,简单吧?就用这几句代码而已,就可以出现这个功能,而且可以方便的修改颜色、形状、大小等。当然缺点也是有的,就是在IE6等过时的浏览器中,可能不会兼容,无法实现。

 

亲自打造属于自己网站风格的工具边栏

首先请允许潜行者 m 介绍一下自创的名词“工具边栏”。现在大家在浏览网站的时候,经常会发现一些浮动的条状栏,通常具有向上向下的功能,当你点击一下,就可以方便的回到顶部或者前往底部。其实打造这样一个工具边栏,并不是很难,使用 jquery 很容易就可以做出来。下面,你跟随我的步骤,一步一步的做一下,就可以做出来了,然后你可以根据这个代码,进行一些修改,自定义一些东西。

废话不多说,先说一下我做的这个工具边栏。这个工具边栏是符合我自己做的模板“Q21”,Q21 模板的特点是黑白对比,所以这个工具边栏要突出黑白变化。经过构思之后,我决定这个边栏的样式是这样的:

当鼠标移动到“分享”按钮上之后,会自动滑出一个黑条,然后黑条上是各个分享按钮。具体的演示效果,你可以下载最后代码包查看。下面我们来开始动手一步一步的制作。

建立 html 结构

用 span 标签也行,不过我还是喜欢用 div,所以就用 div 来建立 html 结构。结构很明确了吧,一个大 div 包含三个小 div,分别是上中下三个按钮,其中分享按钮中,还需要再包含一个 div,用来滑出分享按钮。好了,结构就建好了。

<div id="tooltip" >
    <div id="toolt">▲</div>
    <div id="toolc" >
        <div id="sharetxt">分享</div>
        <div id="shareit" class="none">这里是分享代码</div>
    </div>
    <div id="toolb">▼</div>
</div>

注意,向上向下按钮,我使用的是字符,而不是图片。如果是图片的话,需要加载,而且动态变化,需要替换图片更加的不方便。至于如何打出这个上下两个三角号,就靠你的搜狗输入法了,如下图:

好了,有了 html 结构,我们再来定义一些 css。

CSS 代码

首先定义全局的字体

:root{font-family:"5FAE8F6F96C59ED1",helvetica,Arial;}

经测试,这个边栏,在微软雅黑的字体下效果最好,所以要规定网页使用微软雅黑。上面这句代码,:root 表示选择 html 根,对所有文档中的元素生效,其中 5FAE8F6F96C59ED1 表示的就是微软雅黑,至于为什么这样写而不写成“微软雅黑”,如果用户电脑是英文的,那肯定找不到微软雅黑这个字体,这样写法,只要有微软雅黑字体,就可以使用。

定位工具条位置

div[id="tooltip"]{
    width:40px;
    height:120px;
    position:fixed;
    bottom:50%;
    right:20px;
    }

这几句 css 定义了工具边栏的高度和宽度,同时 position:fixed 表示让它固定在页面中,不会根据滚动条的滚动而移动。bottom:50%,让它保持在页面中部位置,right:20px 表示让它距离右边 20 个像素。

响应操作

div[id^="tool"]{
    font-size:38px;
    cursor:pointer;
    color:#000000;
    }
div[id^="tool"]:hover{
    color:#999999;
    }

响应操作可以让工具更加人性化,例如上图效果,当我们把鼠标移动到箭头的时候,它会变成灰色,表示你已经把箭头移动到上面了。在这里,我使用了新型的选择器 div[id^=”tool”]它的意思是,选取所有以 tool 开头的 div 标签。定义字体大小为 38px,调整三角形成为合适大小。设定 cursor:pointer 属性,当你鼠标移动到上面的时候,会显示成手指形状,让你误以为是一个可以点击的链接。下面的语句,当你鼠标移动到上面的时候,颜色变成#999999。这是响应操作,提高用户体验。

中部 CSS 代码

div[id="toolc"]{
    font-size:22px;
    float:right;
    width:40px;
    height:70px;
    overflow:hidden;
     }

div[id="sharetxt"]{
    width:26px;
    margin-right:8px;
     float:right;
     height:70px;
     display:inline;
    margin-top:4px;
    }
div[id="shareit"]{
    width:304px;
    height:62px;
    float:right;
    height:30px;
    margin:15px 0px;
    }
.none{
    display:none;
    }
.inline{
    display:inline;
    }

比较简单,没有什么亮点,自己看看就行了。重点在于如何实现滑动出现分享按钮。我采用的方法是,定义两个 div,浮动放置,其中分享按钮那个 div 默认是隐藏的,只有鼠标移动上去触发之后,它才会显示出来。

Jquery 代码

在添加 jquery 代码之前,我们需要彻底理清滑出分享按钮的实现方式。jquery 并没有提供横向滑动出现的方法,那要怎么实现呢?可以这样实现,先把底色变成黑色,让装载分享按钮的 div 框出现,但是这时候由于宽度不够显示分享按钮 div,所以你暂时看不到。使用 jquery 的 animate 方法,让宽度逐渐变宽,直到完全显示分享按钮 div。这样就会造成一个假象,黑色滑出,然后出现分享按钮。

具体的实现代码如下

$(function(){
    $("#toolc").mouseenter(function(){  //这里使用mouseenter方法来触发,当鼠标移动上去之后,触发这个方法
        $("#toolc").css({"color":"#ffffff","backgroundColor":"#000000"}); //先对中部添加背景,并且把文字变成白色
        $("#shareit").removeClass("none").addClass("inline"); //去掉shareit的none,让它显示出来,但由于宽度不够,无法显示
        $("#toolc").animate({width:"350px"},200); //使用animate方法,动态的改变宽度,直到显示出来分享按钮
    }).mouseleave(function(){ //当鼠标从目标区域中移走,就触发下面这个事件
        $("#toolc").css({"color":"#000000","backgroundColor":"#ffffff"}); //同反
        $("#shareit").removeClass("inline").addClass("none"); //同反
        $("#toolc").animate({width:"40px"},200); //同反,你懂的
    });
    $("#toolt").click(function(){
        $("html,body").animate({scrollTop:"-=900px"},200); //每点击一下,就向上滑动900px
    });
    $("#toolb").click(function(){
        $("html,body").animate({scrollTop:"+=900px"},200); //每点击一下,就向下滑动900px
    });
});

注释我已经写在上面代码中了,仔细耐心看一下。这里,我想说的是向上向下滑动 900px。我并没有让它点击直接到顶部或者底部。因为我觉得,如果文章比较长,浏览者并不一定想直接滑动到底部,而是想看看下面的内容。如果他真想滑动到底部,也只需要点两次或者三次按钮即可。这也是一个用户体验的细节。

当然,你还需要申请分享代码

可以去 bshare jiathis 百度分享那里,申请一下代码,粘贴到 shareit div 中就可以了。怎么样,其实原理也非常简单,动一下脑子就可以了。