Quantcast
Channel: w3cplus
Viewing all 1557 articles
Browse latest View live

弄懂Favicon

$
0
0

特别声明:此篇文章由David根据的英文文章原名《Understand the Favicon》进行翻译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://www.jonathantneal.com/blog/understand-the-favicon/以及作者相关信息

——作者:

——译者:David

favicon是favorite icon的缩写,通常会显示在浏览器收藏夹(即书签)中以及地址栏左侧。中文有译作网站头像或书签图标,此处译作网站图标。

——译者:David

Alec Rust问及HTML5 Boilerplate项目是否可以提供切换成高DPI的favicon的时候,我才意识到我对网站图标(favorite icon),触摸图标(touch icons),和磁贴图标(tile icons)知之甚少。当我决定稍稍深究一下的时候却发现一些有趣的事情。

自从IE在1999年首次引入favicon以来,之后它就没再发生过什么变化。它们几乎总是ICO文件,并且放在网站的根目录下,如:/favicon.ico,或者在CMS系统中作为某个主题的favicon放在图片目录下,就像下面这样:

<link rel="shortcut icon" href="/path/to/favicon.ico">	

弄懂Favicon

传统的favicon.ico是一个16×16像素的ICO文件,通常是16位色或带alpha透明度的24位色格式。当下也有32×32像素的favicon被使用,它们在主流浏览器中会被适当地缩小。在Metro版的IE 10中,地址栏上就是使用了32×32的图标

弄懂Favicon

rel属性是favicon演变中的一个产物。IE 5本打算用shortcut icon来表示页面和图标之间的关系,但是当这份规范把rel属性值所表示的关系用空格分开后,这样理论上shortcut icon是创建了两种关系,即shortcut和icon。直到2010年HTML5规范把icon单独作为标准标识符。所以,在非IE浏览器中指定favicon时,可以不加shortcut属性。

<!-- IE6-10 -->
<link rel="shortcut icon" href="path/to/favicon.ico">
 
<!-- Everybody else -->
<link rel="icon" href="path/to/favicon.ico">	

favicon的type属性和<script>的type属性的作用几乎一样。截至2013年1月16日,据维基百科显示,无论客户端是否为IE浏览器,favicon的type属性都可能对其正常显示产生影响。事实上,IE只关心服务器MIME类型要为ICO文件,却会忽略type属性。因此,type属性可以是任意值,也可以为空。

<!-- Still works in IE6+ -->
<link rel="shortcut icon" href="path/to/favicon.ico" type="image/vnd.microsoft.icon">
 
<!-- Still works in IE6+ -->
<link rel="shortcut icon" href="path/to/favicon.ico" type="image/x-icon">
 
<!-- Still works in IE6+ -->
<link rel="shortcut icon" href="path/to/favicon.ico">	

弄懂Favicon

令我沮丧的是,Chrome,Firefox,Opera 7+,和Safari 4+都支持PNG格式的favicon,但是Chrome和Safari在两种格式都提供的情况下却会使用ICO格式,而且完全无视favicon的声明顺序。另一方面,IE不支持PNG格式的favicon,但是它会忽略PNG格式的声明以及声明顺序而直接使用ICO格式的favicon。

<!-- Chrome, Safari, IE -->
<link rel="shortcut icon" href="path/to/favicon.ico">
 
<!-- Firefox, Opera (Chrome and Safari say thanks but no thanks) -->
<link rel="icon" href="path/to/favicon.png">	

就像ICO格式一样,一个PNG格式的favicon也不适用于多种分辨率,所以我们可以写上多个含有sizes属性的声明来匹配每一种分辨率。

<link rel="icon" href="favicon-16.png" sizes="16x16">
<link rel="icon" href="favicon-32.png" sizes="32x32">
<link rel="icon" href="favicon-48.png" sizes="48x48">
<link rel="icon" href="favicon-64.png" sizes="64x64">
<link rel="icon" href="favicon-128.png" sizes="128x128">	

那些兼容PNG格式favicon的浏览器是如何确定使用哪个favicon的?Firefox和Safari会使用最后声明的那个。Chrome for Mac只会使用32×32大小的ICO格式。Chrome for Windows会首选16×16大小的ICO格式。如果在没有上述选项的情况下,两种平台的Chrome都会使用第一个声明的favicon,这点正好与Firefox和Safari相反。Chrome for Mac确实会忽略16×16的favicon而直接使用32×32的,如果在非视网膜屏的设备上就会把它缩小到16×16。Opera则完全是一种中立的态度,它会从所有声明的可用的favicon中完全随机地选择一个。我喜欢Opera这种做法。

以上说的仅仅只是开始,现在是时候让我们来了解一下IE中的注意事项。

IE8-10会在页面首次加载的时候就显示favicon。IE7则不会在页面第一次加载的时候就显示,而是在页面再次被访问的时候才显示favicon。更糟的是,IE6只会在网站被添加到收藏夹中并且在浏览器再次打开的时候才会显示favicon。只要浏览器清除缓存,favicon就会被删除。并且只有把网站再次添加的收藏夹中,favicon才会再次显示,或者是用某种手段再加载一次favicon文件。如果你不得不和IE6以及favicon同时打交道,那么你可以用下面这段JavaScript代码来强制重新加载favicon文件,最好把这段代码包裹在条件注释中。

<!-- I "support" IE6 -->
<!--[if IE 6]><script>(new Image).src="path/to/favicon.ico"</script><![endif]-->	

让我们回到高DPI的问题上来。

你有没有问过自己这样一个问题——如果所有好浏览器都支持PNG格式的favicon,并且IE只需要提供ICO格式,但是ICO格式对Chrome和Safari却是个特例,那我们为什么不把ICO格式的favicon声明包裹在IE的条件注释中?

好想法总为解决大难题而诞生。PNG文件可以代替ICO文件为你提供更大的图标。我们可以在IE中使用一个经典的32×32的ICO格式的favicon,而在除IE以外的其他浏览器中使用一个超级圆滑的96×96的PNG格式的favicon。

<!-- Just IE? -->
<!--[if IE]><link rel="shortcut icon" href="path/to/favicon.ico"><![endif]-->
 
<!-- Everybody else? -->
<link rel="icon" href="path/to/favicon.png">	

现在有个大问题是,IE 10不再支持条件注释,而且也不支持PNG格式的favicon。上面的代码在之前的IE浏览器中确实会比最新的IE浏览器有更好的效果。

如果你说“嘿——要是我们把ICO格式的favicon放到网站的根目录下,而只使用<link rel="icon">来声明PNG格式的favicon会怎么样?”

恭喜你,你赢了。根据Chrome,Safari,和IE的局限性,这个办法确实可以让每个浏览器获得最好的favicon效果。IE会忽略<link rel="icon">这样的声明而自动获取网站根目录/favicon.ico的ICO格式的favicon。而其他所有浏览器则会使用如下声明的PNG格式的favicon:

<link rel="icon" href="path/to/favicon.png">	

你又会说“但是如果我想要多个favicon或者我的CMS系统不喜欢这么做,还有……其他的办法么?”

当然有,不过你可能不会喜欢

<!-- I "support" IE -->
<script>
navigator.appName == "Microsoft Internet Explorer"&& (function (i, d, s, l) {
   i.src = "favicon.ico";
   s = d.getElementsByTagName("script")[0];
   l = s.parentNode.insertBefore(d.createElement("link"), s);
   l.rel = "shortcut icon";
   l.href = i.src;
})(new Image, document);
</script>
 
<!-- Everybody else -->
<link rel="icon" href="path/to/favicon.png">

上面这段JS脚本的意思是当客户端是IE浏览器时,构造了一条ICO格式的favicon声明,即:

<linkrel="shortcut icon"href=" favicon.ico">	

 

并插入页面文档中。

 

——译者:David

对上面的解决方案都不满意?没关系,还有办法。目前使用IE 10的大多是Windows 8的用户。Windows 8提出一种新的网站显示图标——磁贴图标。

弄懂Favicon

在Metro版的IE 10中,当网站的访问者把我们的网站附到(pin)开始屏幕上的时候,我们可以显示一个独一无二的磁贴图标。这些磁贴图标是144×144大小的PNG文件,为达到最佳效果它们使用透明背景。磁贴图标的背景色是可以用十六进制的RGB色(使用#RRGGBB这样的6位符号记法),或者CSS中的颜色名称,或者是CSS中的rgb()函数来指定。声明磁贴图标的标签非常简单。

<meta name="msapplication-TileColor" content="#D83434">
<meta name="msapplication-TileImage" content="path/to/tileicon.png">	

弄懂Favicon

OK,现在让我们来把它们合在一起,既满足IE 10的局限性,又保证其他方面的健全。

<link rel="apple-touch-icon" href="path/to/touchicon.png">
<link rel="icon" href="path/to/favicon.png">
<!--[if IE]><link rel="shortcut icon" href="path/to/favicon.ico"><![endif]-->
<!-- or, set /favicon.ico for IE10 win -->
<meta name="msapplication-TileColor" content="#D83434">
<meta name="msapplication-TileImage" content="path/to/tileicon.png">	

至少这是个不错的开始。

如果你对创建favicon想了解更多,我推荐你看看Jon Hick的《图标指南》(The Icon Handbook)中的创造完美的favicon,以及Jonathan Snook的制作好的favicon。此外,我想感谢@alrra告诉我关于磁贴图标的内容。

译者手语:整个翻译依照原文线路进行,并在翻译过程略加了个人对技术的理解。如果翻译有不对之处,还烦请同行朋友指点。谢谢!

关于David

2009年开始接触前端开发,2011年组建创业团队——[五维互动],2012年团队被“收编”并更名[创影互动],遂只身来上海发展,现在就职于FlipScript。欢迎交流共勉:腾讯微博

如需转载烦请注明出处:

英文原文:http://www.jonathantneal.com/blog/understand-the-favicon/

中文译文:http://www.w3cplus.com/css/understand-the-favicon.html


学习使用:before和:after伪元素

$
0
0

特别声明:此篇文章由胡均根据英文文章原名《Learning To Use The :before And :after Pseudo-Elements In CSS》进行翻译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://coding.smashingmagazine.com/2011/07/13/learning-to-use-the-before-and-after-pseudo-elements-in-css/以及作者相关信息

——作者:

——译者:胡均

如果你一直密切关注着各种网页设计的博客,你可能已经注意到了:before和:after伪元素已经在前端开发中获得了相当多的关注。特别是在Nicolas Gallagher的博客中,后期运用了很多伪类元素。

pseudo element

Nicolas Gallagher使用伪元素用静态的HTML标签创建84个GUI图标。

为了补充说明上述内容(和利用当前发展的趋势),我收集一些完全在伪元素下运行的东西。本文主要针对这一类人群,即已经看到了用伪元素做出了很酷的东西,但想知道所有有关before在css技术里的运用。

尽管css 规范中包含其他的伪元素,我们焦点是 :before 和 :after。因此,为了简便起见,我所说的“伪元素”泛指这两个特别的伪元素。

伪元素能做什么呢?

“伪元素”,顾名思义。它创建了一个虚假的元素,并插入到目标元素内容之前或之后。

单词“pseudo”是希腊语英译,它的基本意思是“说谎的,不诚实的,错误的。”因此叫伪元素是适合的。因为在文档中它不实际改变什么。相反的,它们是像幽灵一般的元素插入在css中,他们对用户是可见的,可以通过css控制。

基本语法

:before 和 :after 伪元素编码非常简单(和大多数的css属性一样不需要一大堆的前缀)。这里是一个简单的例子。

#example:before {
  content: "#";
}

#example:after {
  content: ".";
}	

这个例子中提到了两件事情,第一,我们用#example:before和#example:after来目标锁定相同的元素.严格的说,在代码中他们是伪元素。

第二,在内容模块中提到,伪元素如果没有设置“content”属性,伪元素是无用的。

在这个例子中,拥有属性id的元素将有一个哈希符号放置内容之前,和一个句号在内容之后。

语法笔记

你可以设置content属性值为空,并且仅仅把他当做一个内容很少的盒子。像这样:

#example:before {
  content: "";
  display: block;
  width: 100px;
  height: 100px;
}	

然而,你不可以完全的移除content属性,如果你移除了,伪元素将不会起作用。至少,content属性需要空引用作为它的值(即:content:“”)。

你也许注意到,你也可以用两个冒号(::before 和 ::after) 写伪元素,这个我以前讨论过的。简短的解释是,对于这两种语法没有什么不同,仅仅一点的不同是,伪元素(双冒号),css3中的伪类是(单冒号)

最后就语法而言。从技术上讲,你可以普遍的应用伪元素,不是放在特殊的元素上,像这样:

:before {
  content: "#";
}	

虽然上面是有效的,但是它十分的没用。代码会在DOM里的每个元素的内容之前插入散列符号。即使你删除了<body>标签和它的所有内容,你仍会在页面上看见两个散列符号:一个在<html>里,另一个在<body>标签里,浏览器会自动创建哪一个。

插入内容的特点

正如前面提及的,插入的内容在页面的源码里是不可见的。只能在css里可见

同时,插入的元素在默认情况下是内联元素(或者,在html5中,在文本语义的类别里)。因此,为了给插入的元素赋予高度,填充,边距等等,你通常必须显式地定义它是一个块级元素。

这会是对如何设计伪元素的一个简要的说明,看我下面文本编辑器的这幅图

pseudo element

在这个例子中,我高亮的样式将被应用到元素里插入到目标元素内容的前面和后面。

还要注意的是典型的CSS继承规则适用于插入的元素。例如,你有字体系列黑体,宋体,无衬线字体应用到body元素里,然后伪元素会像其他元素一样继承这些字体系列。

同样的,伪元素不会继承没有自然继承自父元素(如 padding and margins)的样式。

之前或之后是什么?

你的直觉是:before和:after伪元素可能是 插入的内容会被注入到目标元素的前或后注入。但是,正如上面提到的,不是这样的。

注入的内容将是有关联的目标元素的子元素,但它会被置于这个元素的任何内容的“前”或“后”。

为了证明这一点,看看下面的代码。首先,在HTML:

<p class="box">Other content.</p>	

下面是插入伪元素的css:

p.box {
  width: 300px;
  border: solid 1px white;
  padding: 20px;
}

p.box:before {
  content: "#";
  border: solid 1px white;
  padding: 2px;
  margin: 0 10px 0 0;
}	

在此html里,你所看的一段文字带有的是一个类的box,还有这样的文字“Other content”在里面(像你所会看到的一样,如果你看见了首页的源代码)。在css中,这段内容被设置了宽度,以及一些padding和可见的边框

然后我们有了伪元素。在这个例子中,它是一个散列符号插入到该段内容之前。随后css给了它一个边框以及一些padding和margins。

这里是浏览器中查看的结果:

pseudo element

外面的盒子是这个段落。围绕有散列符号的边框表示伪元素的边界。所以,不是插入“before”到段落,而是伪元素被置于到此段落的“Other content”的前面。

插入非文本内容

我简要的提醒,你可以把属性的值置为空字符串或是插入文本内容。你基本上有属性的值要包含什么的两个额外的选择

首先,你可以包含一个指向一个图像的URL,就像在css里包含一个背景图像一样做你能做的

p:before {
  content: url(image.jpg);
}	

注意不能使用引号。如果你将URL用引号括起来,那么它会变成一个字符串和插入文本“url(image.jpg)”作为其内容,插入的而不是图像本身。

当然,你可以包含一个Data URI代替图像引用,正如你可以用css背景一样。

你还可以选择ATRR(X)中的函数的形式。此功能,根据规范,“把X属性的值以字符串的形式返回”

下面是一个例子:

a:after {
  content: attr(href);
}	

attr()函数的功能是什么?它得到特定属性的值并把它作为插入的文本成为一个伪元素。

上面的代码会导致页面上的每一个<a>元素的href值立即被放置在每个各自的<a>元素的后面。在文档被打印时,它可以用作一个包含所有URl的打印样式表。

你也可以用这个函数去获取元素的title属性,或者甚至是microdata的值。当然,并不是所有的例子都符合自己的实际,但根据不同的情况,一个特定的属性值作为一个伪元素可以是实际的

然而,获取title或者图像的alt的值并作为实际的伪元素显示在页面上是不可能的。记住伪元素必须是被应用元素的子元素。图像,这是void(或者是空元素),没有子元素,所以它在这个列子中不可用,同样也适用于其他空元素,例如:<input>。

可怕的浏览器兼容性

任何前端技术的发展势头,第一个问题就是浏览器的支持。在这种情况之下,它不是个很大的问题。

浏览器支持:before 和 :after 伪元素栈,像这样:

  • Chrome 2+,
  • Firefox 3.5+ (3.0 had partial support),
  • Safari 1.3+,
  • Opera 9.2+,
  • IE8+ (with some minor bugs),
  • 几乎所有的移动浏览器。

唯一真正的问题是没有获得支持的(不用奇怪)IE6和IE7。所以,如果你的爱好者是在良好合适的web开发(或者其他具有较低IE版本的市场),你可以继续自由地使用伪元素。

伪元素不是决定性的

幸运的是,缺少伪元素不会造成大问题。大多数情况下,伪元素一般修饰(或者帮助)内容,不会给不支持的浏览器造成问题。所以,如果你的支持者具有较高的IE版本,你仍然可以在某种程度上使用它们。

一些提醒

正如前面提到的,伪元素不会出现在DOM中。这些元素不是真正的元素。因此,它们不是可用的。所以,不要使用伪元素生成内容,是您的网页的可用性和可访问性的关键。

另外一件需要记住的是,开发工具,例如火狐,不要用伪元素显示内容。所以,如果使用了,伪元素会造成难以维护和调试缓慢。

(更新:在评论中提到的,你可以使用谷歌的开发工具来查看一个伪元素相关联的风格,但不会出现在DOM元素里。同时,火狐在1.8版加入伪元素支持它。)

你所需要用有的理念是用这个技术以创造出实用的东西。与此同时,将来进一步研究CSS伪元素,一定要看看我们已经链接的一些文章。

译者手语:整个翻译依照原文线路进行,并在翻译过程略加了个人对技术的理解。如果翻译有不对之处,还烦请同行朋友指点。谢谢!

关于胡均/h4>

毕业于重庆理工大学软件工程专业,酷爱C++、研究算法和系统设计,在校从事JavaScript和Android开发。个人博客,希望与更多朋友一起交流。

如需转载烦请注明出处:

英文原文:http://coding.smashingmagazine.com/2011/07/13/learning-to-use-the-before-and-after-pseudo-elements-in-css

中文译文:http://www.w3cplus.com/css3/learning-to-use-the-before-and-after-pseudo-elements-in-css.html

太棒了!mask 简单构建刀光一闪效果!

$
0
0
太棒了!mask 简单构建刀光一闪效果!

今天将介绍遮罩属性 —— mask 的简单 demo。 mask 属性暂时只有 webkit 浏览器支持,使用需要加标识符。案例中用到的缩写均可展开,特别需要强调的是 mask-origin 这个属性,指定了遮罩的初始位置。默认是 padding,本例中设置为 content。

demo

HTML code

<div class="demo">原来我的真身是一把名刀</div><!-- end demo -->

CSS code

body{
	background-color:#000;
	font-size:12px;
}

.demo{
	-webkit-animation:demo-an 2.5s ease-out infinite;
	border-radius:.4em;
	color:#fff;
	font:bold 4em/normal \5FAE\8F6F\96C5\9ED1,tahoma,arial,\5b8b\4f53,sans-serif;
	margin:1em;
	-webkit-mask:-webkit-linear-gradient(left,rgba(0,0,0,0) 0%,rgba(0,0,0,1) 10%,rgba(0,0,0,0) 20%) -500px 0 no-repeat content;
	text-align:center;
	text-shadow:1px 1px 0 #ccc;
	width:12em;
}
@-webkit-keyframes demo-an{
	to{ -webkit-mask-position:500px 0; }
}

demo

转载请注明出处:http://www.w3cplus.com/node/674

2013年优秀jQuery插件连载(三期)

$
0
0
2013年优秀jQuery插件连载(三期)

2013年优秀jQuery插件已发布两期了,今天继续给大家推荐三月刊的插件,在第三期中我们同样向大家介绍十个优秀的偛件,今天这十个插件包括:Google Map嵌入到你的站点、固定边栏菜单、支持css3的transform属性的插件、文本动画效果、图片选择区域控制、图片翻转功能等。希望这些插件能给你平时制作带来思路,或者能直接运用到您的项目之中。

1、Maplace.JS

Maplace.JS

Maplace.js帮助你将google地图嵌入到你的网站,可以在地图上快速创建标记和控制菜单的位置。他的运行需要jQuery和google maps api v3。

2、Navi.JS

Navi.JS

Navi.Js方便你的网站动态的显示内容。

3、jQuery.transformlist

jQuery.transformlist

jQuery.transformlist是一个javascript插件,用来支持css3的动画转换。

4、textillate.js

textillate.js

一款简单实现文本动画效果的jQuery插件。

5、partialjs

partialjs

免费的web应用程序框架,使用JavaScript、HTML和CSS构建web站点和web应用程序。

6、imgAreaSelect

imgAreaSelect

imgAreaSelect是一个jQuery插件,用来实现选择图像的矩形区域。

7、ddSlick

ddSlick

一个免费的重量轻jQuery插件,它允许您创建一个自定义下拉与图片和描述。

8、MagicSuggest

MagicSuggest

自动生成默认标签。

9、jQuery Knob

jQuery Knob

向下兼容,可以触摸的jQuery拨号插件。

10、jQuery.WallFlip

jQuery.WallFlip

jQuery插件创建一个图片墙,点击翻转显示一些图像的描述内容。

2013年优秀jQuery插件:

  1. 2013年优秀jQuery插件连载(一期)
  2. 2013年优秀jQuery插件连载(二期)

如需转载,烦请注明出处:http://www.w3cplus.com/source/best-jquery-plus-2013-part3.html

前端开发常用API-chm版

$
0
0
APIS图片

收集和整理了10份前端常用到的 API 资源,整理自网络,版权归属原作者所有。如有侵权请联系我立即修改。

CSS
飘零雾雨版CSS API v4.0,囊括 CSS1 CSS2 CSS3 属性和浏览器私有属性,各属性兼容情况和前端编码相关的经验。全面实用。本手册由飘零雾雨编写,版权所有者为飘零雾雨。作者博客 http://blog.doyoe.com/
CSS2
苏昱版CSS API v2002,涵盖 CSS1 和 CSS2 属性,和IE滤镜等内容。很适合一些不使用CSS3的童鞋,和需要查询IE滤镜属性的童鞋使用。是经典收藏版本,版权所有者为原作者所有。作者博客已经找不到了,如果有知情的请联系,感激不尽。
w3school
收集自网络,由 w3school 页面整理而成的离线帮助文档 。主要方便查询查询 HTML 标签语义,其中内容也包括一些 css 和 javascript 的实例。可作为离线的前端入门教程使用。
w3school-html5
收集自网络,由 w3school 页面整理而成的离线帮助文档 。和上面不同的是,这份只包含 html5 的标签部分。很方便查询一些 html5 的语义化标签。
w3school-JS
收集自网络,由 w3school 页面整理而成的离线帮助文档 。和上面不同的是,这份只包含 JS 部分,但是更专注 JS 部分,更加全面。可以很方便的查询一些 JS 函数和属性。也可以作为 JS 的入门教程使用。
w3school-PHP
收集自网络,由 w3school 页面整理而成的离线帮助文档 。和上面不同的是,这份只包含 PHP 部分,可以方便的查询 PHP 的函数等内容,也可以作为离线教程使用。
JScript
收集自网络,JScript 可作为 Javascript 的 API 使用。而且这份是难得的全中文,感谢微软山寨出 JScript。这份 JS API 可以作为 w3school 版本的补充(真的还不错)。翻译的作者已经找不到了,有知情的可以提供,感激不尽。
dhtmlAPI
lemon 版网页制作 API,虽然内容涵盖 html,但是这份 API 主要是用来查询一些 js dom 操作函数使用。是难得一见的 js dom 操作的中文 api,虽然翻译不完整,但是聊胜于无。学 JS 必备!版权归原作者所有。
jQuery
黑妹版 jQuery1.8.3 API,是较为新的 jQuery api 文档,内容包含很多新的方法,主要部分是中文,学 jq 的童鞋必备。但是不易作为入门教程使用,可作为工作小助理,查询 jq 函数。版权归属原作者所有!
正则表达式
RegExLab版 全面的正则文档,2006年版本。这个文档可以作为正则的备忘教材,不容易作为入门教程。其中主要有正则的部分,并没有限制是js方面。所以需要一定的基础,但是也是会正则的童鞋必备的文档。版权归属原作者所有!

 

2013-03-12  增加初次使用注意事项:

使用 win7系统的朋友请注意!初次使用 chm 帮助文件时,如遇双击提示安全警告,则可能无法正常查阅 chm 文件。

1.请右键该 chm 文件,进入属性菜单。

2.在常规选项卡中,点击右下角的“解除锁定”按钮来激活 chm 文件

 

转载烦请注明出处:http://www.w3cplus.com/resources/676.html

了解Facebook News Feed 最新设计

$
0
0

特别声明:此篇文章由Sunnylost根据的英文文章原名《Everything You Need To Know About Facebook’s Latest News Feed Design》进行翻译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://www.hongkiat.com/blog/facebook-news-feed-design/以及作者相关信息

——作者:

——译者:Sunnylost

在下文中,大部分地方没有对Feed这个词语进行翻译,而按照惯例将「News Feed」翻译为「信息流」。关于Feed的具体含义可参照:维基,或者百度百科

——译者:Sunnylost

Facebook的最新改版与你息息相关。面对日益混乱的个人feed,Facebook试图采取一种新管理方式,它将所有你喜爱的feed放入一个称作“个人报纸”的地方,从这里你可以获取到名人、相关本地来源和你的社交圈的所有高质量内容。

在新设计的帮助下,你可以时刻关注话题的进展,也可以深入了解话题的精髓——Facebook的新设计允许你同时采取这两种方式。

facebook news feed design

新版Facebook会从Pinterest网站获取tip,将其推送到一个视觉上更具有冲击力的界面,把关注的重点从纯文本转移到图片上来。新版信息流能为我们提供更丰富的故事,更好的关于feed的筛选,和在桌面与移动Facebook之间更一致的用户体验。

接下来就是你关心的Facebook信息流最新设计的所有内容。

推荐阅读:更好的Facebook粉丝页面:基本的技巧、App与示例

——作者:

1.自定义信息流

在当前的Facebook信息流中,你真正关心的内容只占了40%。新设计将重点放在如何使故事的展现形式更生动。其中一个方式就是同时借助单张图片与完整的相册来实现更清晰、更震撼的视觉效果。

facebook news feed design

文章分享也全面改版,界面更加整洁、专业。文章摘要显示的更多,发布者的logo则更加醒目。

facebook news feed design

2. 更加容易的确定关系

放入时间线内的信息以一种更好的方式展现给来访者,有助于确定彼此之间的关系。个人照片变大,并且在对方头像右侧能查看到你和此人的共同好友。

所有能让你用于确定关系的信息都放在同一位置。页面、品牌与服务也同样如此。

facebook news feed design

3、签到更加紧密

在新的设计下,当你在某个位置签到后,你可以在地图上查看到该位置与它的介绍信息,这个点子棒极了。与其只依赖朋友的描述,现在你能够从一个清晰的照片中发现这到底是什么位置,你能够在哪里找到它。

这会更有效的使你朋友的旅行与你关联的更紧密。

facebook news feed design

4.记录你在第三方应用上做过什么的Logbook

喜欢Pinterest或者Spotify?Facebook能够帮助你记录你在这些应用上的动作,让你的朋友能够了解你在Facebook之外的活动。“把你在其他地方的活动分享给在Facebook上的朋友们”这样的重复操作现在可以由Logbook来完成,你还可以用它来将多个活动整合到一条feed中,使你的信息流看起来更加的统一。

facebook news feed design

5.突出的「多次分享」

如果相同的文章或视频被不同用户多次分享,它将不会重复的扰乱你的feed。在当前设计中我们已经解决了这个问题,但新的设计可以让你按照文章、视频左侧的好友头像顺序,进入到每个特定分享的单独对话中去。

facebook news feed design

6.简单的管理

除了文章和视频外,你还可以将同一作者的所有投稿,与一个话题或名人相关的所有头条新闻进行整合,这样访问起来就更为方便。在之前,这些内容很可能就是让你的feed变得混乱的罪魁祸首,但现在它们被聚合在一起成为一个更容易管理的设计。

facebook news feed design

Feed选择

1.Feed切换

在新设计中,你可以通过顶部右侧的切换进入到不同的feed。对于移动端,你只需要向下滑动屏幕就能找到你想要的feed。feed切换让你能够像使用报纸一样切换到不同版块(喜欢体育版块?那就翻到体育版块)。

借助于新设计,你甚至可以创建自己的feed,比如说你是一个狂热的游戏爱好者,那么你就可以创建一个游戏feed来获取所有关于你最喜欢游戏的最新信息。

facebook news feed design

2.所有好友

新设计还带来了一项旧的功能。我们恢复了「所有好友」,在这个单独的feed中,你能看到在你好友列表中的所有人的更新内容,它们全部按照时间先后排序。别担心,这还有一个单独的「亲密好友」feed,这样所有的排序对该feed依然有效。

3.音乐

你可以获得自己喜爱的音乐家的最新动态,例如在附近举办的演唱会或者新发布的专辑。当然在音乐版块里还包含了你的好友们在听的音乐。

这样在Facebook上,音乐家们就拥有了更宽广的渠道来发布他们的信息,相比而言在其他不那么流行的社交网络上则无法办到。

facebook news feed design

4.照片与页面

照片也有了自己的版块,你可以在好友们的手机或者是Instagram滤镜的帮助下,透过他们的眼睛来观察他们的生活。如果你关注了页面,这些内容将出现在同样的「关注」feed中,当你坐下并开始浏览,你将在同样的频道下看到按照时间顺序排列的所有图片。

facebook news feed design

5.Feed的优先排序

如果你经常进入音乐feed,该feed在你的feed排序策略(基于你最近交互的频率)中会自动获得更高的排名。因为你能够创建各种类型的feed,这将对你在Facebook上获得的信息带来更好、更个性化的管理。

移动端的一致性

1.全局导航

为了让Facebook在不同平台与不同尺寸的屏幕上拥有相同的外观与体验,新版设计在Facebook视图左侧增加了托盘功能。这个设计在平板电脑、智能手机与桌面电脑上是一致的。

这个设计避免了当你通过不同设备访问Facebook时对如何导航的重复学习。

facebook news feed design

2.新提醒,新外观

新故事的提醒也被重新设计,以简洁的气泡形式出现在feed顶端。这样当我们要访问新故事时,就不必滚动页面,也就不会忘记我们当前阅读到了哪里。

facebook news feed design

3.响应式设计

新的设计实际上来源于移动客户端,那种像在智能手机或者平板上在一个页面上不用回到首页就可以访问其他页面的这种模式现在被移植到了桌面系统上。

非常感谢@鬼懿群中的@Rong.l同学帮我理解这段话。非常感谢。

大漠

结论

等不及要尝试新界面了吧?加入候选名单,亲自体验新的Facebook。

整体效果,可以参照下面的缩略图:

facebook news feed design

特别声明:上图截取:https://www.facebook.com/about/newsfeed

译者手语:整个翻译依照原文线路进行,并在翻译过程略加了个人对技术的理解。如果翻译有不对之处,还烦请同行朋友指点。谢谢!

关于Sunnylost

08年开始自学java,09年加入北漂行列,从事Java Web工作,出于对JavaScript的喜爱,在2011年以外包身份进入新浪微博从事JS开发,目前就职于一淘。由于工作关系,逐步接触CSS,开始完善自身的前端技能。欢迎随时关注我:新浪微博

如需转载烦请注明出处:

英文原文:http://www.hongkiat.com/blog/facebook-news-feed-design/

中文译文:http://www.w3cplus.com/css/facebook-news-feed-design.html

扁平化设计:你在这趋势中收获了什么?

$
0
0

本文由LL根据的《Flat Design: Can You Benefit from the Trend?》所译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://designmodo.com/flat-design/,以及作者相关信息

——作者:

——译者:LL

扁平化设计—这个早在多年前非常流行的设计领域-又再一次卷土重来了。许多新网站以及需要重新设计的网站都纷纷采用了扁平化设计的方案,这种趋势无论是在网页设计或者移动端的设计方面都已经蔓延开了。

随着融汇了扁平化设计美学的windows8以及新版谷歌的推出,以及其他人气网站纷纷采用这种扁平化的主题设计,这种扁平化的趋势将很有可能受到更加多的亲睐。

你是否考虑过?你能够把它运用到你的项目当中吗?这种设计方案是否能够给你带来更加轻松的工作体验?

扁平化设计具有着一种让人心醉的美丽.没有大量的修饰,它能以一个简单直白的方式来传递一个信息或者帮助一个产品以及思想变得更加深入人心。所以说,趁在下一个新的设计潮流到来之前,我们现在就必须好好把握当前的设计趋势。

什么是扁平化设计?

leeks

negative

windows phone

thenounproject

spelltower

sagmeister

扁平化设计正是通过放弃任何附加效果的方式,创建了一个“零”3D属性的设计方案。在这里,没有drop shadows阴影效果, bevels斜角, embossing浮雕, gradients渐变等其他方法来帮助lift元素产生相对于屏幕的凹凸效果。不带有羽化边缘以及阴影效果的图标和UI元素也都是看起来非常鲜明。

扁平极简 就是Flat design的灵魂所在。

Flat design并不是彻底放弃效果。它只是不存在那些能让人产生立体感觉的深度depth 和维度dimension.我们什么甚至可以这样认为,更多的设计倾向于“准扁平化”的范畴,这时候我们从产品的大体角度来看,仍然存在很小一部分的效果。

技术

layervault

svpply

jetsetter

experiential

忘掉所有的修饰元素.它们不是扁平化设计要关注的地方。

在这里我们需要把注意力放在色彩上。扁平化的设计方案经常使用许多鲜明的色彩。从色块,色形以及色调来看,色彩确实是提升扁平化设计一个不可或缺的组成部分。在你的logo上的用色方面多加斟酌,能够使得你的网站引人入胜。在扁平化方案上仅仅使用白色和黑色就能够产生不错的效果,但你想着这效果要更进一步,那也可以采用更多的色彩。

注意字体.文字是必不可少的-他们提供了信息,它作为了一个工具在你的网站上引导你的用户该做什么。使用一些有趣且独特的字体来修饰文字,当然了,在这里你就不要再想着Arial(微软字体).挑选出字体来配合你所要表达的信息.记住扁平化方案的要旨是极简,因此在字体的运用中,我们应该考虑其如何切合这个要点.简单的sans serif类字体在这个方案中可应用的种类非常广泛.或者我们不妨做出一点稍微“越轨”的处理方法,考虑更加在一个扁平化设计方案中选择一个新奇的字体作为美术元素,这必定比简单的字体的运用更加夺人眼球。

做到惜字如金。许多扁平化设计同样也运用了少量文字来营造一个简约的风格。因此,因此,我们要确保表在每个字中都能发挥出重要的作用。

简约的用户界面 和UI元素。用于被点击的按钮不需要过于复杂的设计。只要这些风格要素有了明确的定义,就不会阻碍他们成为“称职的”按钮。这些要素包括颜色,轮廓,框架或者甚至是不同字体或者形状。

创建层级.在扁平化设计中,即便在被点击的区域中使用了shadows阴影, gradients渐变, bevels斜角等其他效果来进行特别注明,一些人还是感觉这些用于被点击的区域表现得还不够明显。这足以说明,创建一个明显的层级结构在任何一个网站上是极其重要的。我们要明确地让用户做到对你的网站一目了然。如果链接本身就拥有不同的色彩或者独立被包含同一个区域中以供用户点击,那么链接也应该要清晰地表现出来。

Flat Design的命名

围绕着“flat design.”(这里译者翻译为扁平化设计)这个名字存在着诸多争论.现在你说看到的这个名称“flat design.”也不是被大家绝对地认可。

不同的公司团体都尝试用过其他名称,例如minimal design, honest design,而微软公司甚至称它作 “authentically digital”。

对此你的看法是什么呢?让我们在Branch集思广益吧。

Flat Design启示

很多人都说扁平化设计只是刚刚在设计/开发的 团体中开始流行。下面请你借鉴下这些来自Pinterest and Dribbble的一些关于flat design 优秀资源,并以此考虑你的下一个项目该能怎么用得上他们)(我们需要注意的是:Pinterest本身不采用扁平化设计方案.

Flat UI Design Pinterest board by War Marc

pinterest flatFlat UI Pinterest board by Marco Heutink

 

pinterest2 flat

Square UI elements on Dribbble

square ui

Santa tracker icons on Dribbble

Flat UI on Dribbble

Flat UI DribbbleSquare UI on Dribbble

 

Square UI

Haraldur Thorleifsson on Dribbble

Bobby McKenna on Dribbble

Bobby McKenna

Griffin Moore on Dribbble

Griffin Moore

Kyee on Dribbble

Kyee on Dribbble

总结

得益于它自身简单的特性,扁平化设计方案才能够在信息和产品当中表现得如此突出.简单,整洁,直接。这种样式设计在小屏幕上得到了更好的表现,尤其是在手机移动端上,不过许多人觉得其在大屏幕的表现同样抢眼,安卓平台以及微软手机同样在他们的操作平台上采用了扁平化设计方案。(苹果是一个与之相对例外,它采用的的是skeuomorphic scheme

在扁平化设计上进行添加相对来说相对困难,因为再也没有那些shadows修饰效果来隐藏你设计上的不足,在这里,每一个细节,你都必须要用心顾及。扁平化设计同样在多色彩的方案中有不俗的表现。无论是艳丽的色彩,还是黑白灰都能够在扁平化的设计当中找到一席之地。在另一方面,在平面的某些设计当中仅仅设置黑白两种颜色当然无可厚非.但如果整个页面设计都是如此的话,那么确实也让人看起来有点吓人,在这个时候,我们也许能考虑采用一个“准扁平面方案”,为此保留少量的效果以作修饰。

译者手语:整个翻译依照原文线路进行,并在翻译过程略加了个人对技术的理解。如果翻译有不对之处,还烦请同行朋友指点。谢谢!

关于LL

广东某大学在读大学生,热爱Web前端,对前端技术有强烈的兴趣,在这里希望有机会和大家共同分享与交流,从而更好的提升自己。请关注我:新浪微博

如需转载烦请注明出处:

英文原文:http://designmodo.com/flat-design

中文译文:http://www.w3cplus.com/css/flat-design.html

太棒了!mask 轻松构建炫酷CSS探照特效!

$
0
0
Think different

今天 993 为大家带来 mask  的新 demo,打造过程比前作复杂一些,本作代号是:Think different,希望大家能喜欢小弟做的 demo,多提建议帮助我改进。(请在 Chrome 下浏览)

Think different 主要通过同时操作四个图片遮罩层 mask,配合三重预设的 animation ,其中 mask-size 和 animation-fill-mode 属性举足轻重。

前面所有动画运动完成后,对比度 contrast 动画再不断进行反复,作为本栗彩蛋… 好啦,话不多说,以下是 demo 效果和 code:

demodownload

HTML CODE

demo结构较简单,也没有使用伪类

<div class="demo"></div><!-- end demo -->

CSS CODE

这里所用到的CSS3知识点并不复杂,只是要对他的概念了解清楚

body{ background-color:#f5f5f5; }

.demo{
	-webkit-animation:
		mask-preheat 1s,
		mask-motion 5s 1s ease-out,
		demo-motion 2.5s 6s linear infinite;
	-webkit-animation-fill-mode:
		none,
		forwards,
		none;
	background:url(../images/main.jpg) 0 0 no-repeat;
	color:#fff;
	height:500px;
	margin:1em auto;
	-webkit-mask:center no-repeat;
	-webkit-mask-image:
		url(../images/apple.png),
		url(../images/apple.png),
		url(../images/apple.png),
		url(../images/apple.png);
	-webkit-mask-size:10%;
	width:650px;
}

@-webkit-keyframes mask-preheat{ 50%{ -webkit-mask-size:20%,20%,20%,20%; } }
@-webkit-keyframes mask-motion{
	5%{
		-webkit-mask-position:left top,center,center,center;
		-webkit-mask-size:20%,10%,10%,10%;
	}
	10%{
		-webkit-mask-position:left top,right top,center,center;
		-webkit-mask-size:20%,20%,10%,10%;
	}
	15%{
		-webkit-mask-position:left top,right top,left bottom,center;
		-webkit-mask-size:20%,20%,20%,10%;
	}
	20%{
		-webkit-mask-position:left top,right top,left bottom,right bottom;
		-webkit-mask-size:20%,20%,20%,20%;
	}
	60%{
		-webkit-mask-position:left bottom,left top,right bottom,right top;
		-webkit-mask-size:20%,20%,20%,20%;
	}
	80%{
		-webkit-mask-position:center;
		-webkit-mask-size:10%,10%,10%,10%;
	}
	90%{
		-webkit-mask-position:center;
		-webkit-mask-size:20%,20%,20%,20%;
	}
	100%{
		-webkit-mask-position:top,right,bottom,left;
		-webkit-mask-size:40%,40%,40%,40%;
	}
}

@-webkit-keyframes demo-motion{
	50%{ -webkit-filter:contrast(1.5); }
}

demodownload

如需转载,烦请注明出处:


CSS预处理器——Sass、LESS和Stylus实践

CSS预处理器——Sass、LESS和Stylus实践【未删减版】

$
0
0

CSS(Cascading Style Sheet)被译为级联样式表,做为一名前端从业人员来说,这个专业名词并不陌生,在行业中通常称之为“风格样式表(Style Sheet)”,它主要是用来进行网页风格设计的。通过设立样式表,可以统一地控制HTML(XHTML)中各标签的显示属性。可以使人更能有效的控制Web页面(或Web应用程序)外观,可以精确指定Web元素位置,外观以及创建特殊效果的能力。CSS拥有对网页对象和模型样式编辑能力,并能够进行初步交互设计,是目前基于文本展示最优秀的表现设计语言。CSS能够根据 不同使用者的理解能力,简化或者优化写法,针对各类人群有较强的易读性。

就CSS本身而言,对于大多数Web前端从业人员来说就不是问题。学过CSS的人都知道,它不是一种编程语言。你可以用它开发网页样式,但是没法用它编程。换句话说,CSS基本上是设计师的工具,不是程序员的工具。在程序员的眼里,CSS是很头痛的事情,它并不像其它程序语言,比如说PHP、Javascript等等,有自己的变量、常量、条件语句以及一些编程语法,只是一行行单纯的属性描述,写起来相当的费事,而且代码难易组织和维护。

很自然的,有人就开始在想,能不能给CSS像其他程序语言一样,加入一些编程元素,让CSS能像其他程序语言一样可以做一些预定的处理。这样一来,就有了“CSS预处器(CSS Preprocessor)”。

一、什么是CSS预处器

CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增加了一些编程的特性,将CSS作为目标生成文件,然后开发者就只要使用这种语言进行编码工作。通俗的说,CSS预处理器用一种专门的编程语言,进行Web页面样式设计,然后再编译成正常的CSS文件,以供项目使用。CSS预处理器为CSS增加一些编程的特性,无需考虑浏览器的兼容性问题,例如你可以在CSS中使用变量、简单的逻辑程序、函数等等在编程语言中的一些基本特性,可以让你的CSS更加简洁、适应性更强、可读性更佳,更易于代码的维护等诸多好处。

CSS预处理器技术已经非常的成熟,而且也涌现出了很多种不同的CSS预处理器语言,比如说:Sass(SCSS)、LESS、Stylus、Turbine、Swithch CSS、CSS Cacheer、DT CSS等。如此之多的CSS预处理器,那么“我应该选择哪种CSS预处理器?”也相应成了最近网上的一大热门话题,在Linkedin、Twitter、CSS-Trick、知呼以及各大技术论坛上,很多人为此争论不休。相比过计我们对是否应该使用CSS预处理器的话题而言,这已经是很大的进步了。

到目前为止,在众多优秀的CSS预处理器语言中就属Sass、LESS和Stylus最优秀,讨论的也多,对比的也多。本文将分别从他们产生的背景、安装、使用语法、异同等几个对比之处向你介绍这三款CSS预处理器语言。相信前端开发工程师会做出自己的选择——我要选择哪款CSS预处理器。

二、Sass、LESS和Stylus背景介绍

为了能更好的了解这三款流行的CSS预处理器,我们先从其背景入手,简单的了解一下各自的背景信息。

1.Sass背景介绍

Sass是对CSS(层叠样式表)的语法的一种扩充,诞生于2007年,最早也是最成熟的一款CSS预处理器语言,它可以使用变量、常量、嵌套、混入、函数等功能,可以更有效有弹性的写出CSS。Sass最后还是会编译出合法的CSS让浏览器使用,也就是说它本身的语法并不太容易让浏览器识别,因为它不是标准的CSS格式,在它的语法内部可以使用动态变量等,所以它更像一种极简单的动态语言。

其实现在的Sass已经有了两套语法规则:一个依旧是用缩进作为分隔符来区分代码块的;另一套规则和CSS一样采用了大括号({})作为分隔符。后一种语法规则又名SCSS,在Sass3之后的版本都支持这种语法规则。

注:Sass官网地址:http://sass-lang.com

2.LESS的背景介绍

2009年开源的一个项目,受Sass的影响较大,但又使用CSS的语法,让大部分开发者和设计师更容易上手。LESS提供了多种方式能平滑的将写好的代码转化成标准的CSS代码,在很多流行的框架和工具中已经能经常看到LESS的身影了(例如Twitter的Bootstrap框架就使用了LESS)。

根据维基百科上的介绍,其实LESS是Alexis Sellier受Sass的影响创建的一个开源项目。当时SASS采用了缩进作为分隔符来区分代码块,而不是CSS中广为使用的大括号({})。为了让CSS现有的用户使用起来更佳方便,Alexis开发了LESS并提供了类似CSS的书写功能。

注:LESS的官网:http://lesscss.org

3.Stylus背景介绍

Stylus,2010年产生,来自于Node.js社区,主要用来给Node项目进行CSS预处理支持,在此社区之内有一定支持者,在广泛的意义上人气还完全不如Sass和LESS。

Stylus被称为是一种革命性的新语言,提供一个高效、动态、和使用表达方式来生成CSS,以供浏览器使用。Stylus同时支持缩进和CSS常规样式书写规则。

注:Stylus官网:http://learnboost.github.com/stylus

三、Sass、LESS和Stylus的安装

简单了解以后,您是否有点蠢蠢欲动,想动手一试,看看哪种预处理器适合自己的编码习惯,或者说更适合自己的团队成员以及项目的开发。要试,肯定有必要了解一下三者各自的安装方法。在这一节中,主要为大家介绍三者的安装方法,以供大家对比。

1.Sass的安装

Sass是Ruby语言写的,但是两者的语法没有关系。不懂Ruby,照样可以正常使用Sass。只是必须先安装Ruby,然后再安装Sass。

首先安装Ruby,如果你使用的是IOS系统,那么你的系统已经安装好了Ruby。如果你使用的是微软的Windows系统,那么安装就有些许的麻烦。不过也不用过于担心,按照下面的步骤就能帮你快速的安装好。

到RubyInstaller官网上下载Ruby安装文件(随意选择一个版本),此处选择的是最新版本Ruby1.9.3-p385:

CSS预处理器——Sass、LESS和Stylus实践

Ruby安装文件下载好后,可以按应用软件安装步骤进行安装Ruby。在安装过程中,个人建议将其安装在C盘下,在安装过程中选择第二个选项,如下图所示:

CSS预处理器——Sass、LESS和Stylus实践

Ruby安装完成后,在开始菜单中找到新安装的Ruby,并启动Ruby的Command控制面板,如下图所示:

CSS预处理器——Sass、LESS和Stylus实践

在启动的Ruby命令控制面板中输入下面的命令:

gem install sass	

输入上面命令,回车后就会自动安装Sass:

CSS预处理器——Sass、LESS和Stylus实践

这样Sass就安装成功了,也就可以使用了。

2.LESS的安装

LESS的安装和Sass安装有所不同,他不需要依赖于Ruby环境,就能直接安装使用。不过LESS安装分为两种:客户端和服务器端安装。

a)客户端安装:

我们可以直接在客户端使用“.less”(LESS源文件),只需要在官网载一个Javascript脚本文件主“less.js”,然后在我们需要引入LESS源文件的HTML的<head>中加入如下代码:

<link rel="stylesheet/less" type="text/css" href="文件路径/styles.less">
<script src="文件路径/less.js" type="text/javascript"></script>	

需要注意的是:在引入“.less”文件中,“link”的“rel”属性要设置为“stylesheet/less”。还有更重要的一点需要注意的是:LESS源文件一定要在“less.js”引入之前引入,这样才能保证LESS源文件正确编译解析。

b)服务器端安装

LESS在服务器端的使用主要是借助于LESS的编译器,将LESS源文件编译生成最终的CSS文件,目前常用的方式是利用node的包管理器(npm)安装LESS,安装成功后就可以在Node环境中对LESS文件进行编译。如此一来,LESS在服务器的安装和Sass的安装有点相似,不同之处是他们需依赖的环境不一样,LESS需要的是Node JS环境,而Sass需要的是Ruby环境,为了让大家能更清晰的知道如何在服务器端安装LESS,此处简单的过一下安装过程(本文演示的是在Window7下的安装方法)。

首先到Node Js的官网下载一个适合Windows系统的安装文件,此处下载的是“node-v0.8.20-x86.msi”:

CSS预处理器——Sass、LESS和Stylus实践

安装文件下载后,按正常应用程序方法一样安装。安装完成后在开始菜单中启用Node js的Command控制面板:

CSS预处理器——Sass、LESS和Stylus实践

在启动的Node Js的Command控制面板直接输入下面的命令:

$ npm install less	

CSS预处理器——Sass、LESS和Stylus实践

这样就安装完LESS的编译命令,可以在本地正常编译LESS源文件。如果您想下载最新稳定版本的LESS,还可以尝试在Node JS的Command控制面板输入:

$ npm install less@latest	

3.Stylus的安装

Stylus的安装和LESS在服务器端的安装很相似,同样依赖于Node JS的环境,也就是说也要先安装Node Js(如果安装Node JS请参考前面的介绍)。唯一不同的是在Node JS的Command控制面板输入的命令不一样:

$ npm install stylus	

然后,就会自动下载安装最新的stylus库:

CSS预处理器——Sass、LESS和Stylus实践

这样就算是安装完Stylus了,也可以正常使用Stylus。

四、Sass、LESS和Stylus转译成CSS

Sass、LESS和Stylus源文件(除了LESS源文件在客户端下运行之外)都不能直接被浏览器直接识别,这样一来,要正常的使用这些源文件,就需要将其源文件转译成浏览器可以识别的CSS样式文件,这也是使用CSS预处理器很关键的一步,如果这一步不知道如何操作,那么意味着写出来的代码不可用。接下来按同样的方式,分别来看看三者之间是如何将其源文件转译成所需要的CSS样式文件。

1.Sass源文件转译成CSS文件

Sass文件就是普通的文本文件,不过其文件后缀名有两种,一种为“.sass”;另一种为“.scss”。我们一般用“.scss”就好,至于这两种文件扩展名的区别在于“.sass”是Sass语言文件的扩展后缀名,而“.scss”是SCSS语言文件的扩展后缀名,至于Sass和SCSS的详细区别这里不做介绍。你可以简单的理解为他们都是CSS预处理器语言,而且两者功能特性都一样,只是书写规则不同而以。

要转译Sass文件的前提是有文件可转,因此先在项目中创建一个Sass文件,此例中将其命名为“style.scss”,并且将其放在对应的项目样式中,如D盘的“www/workspace/Sass/css”目录下。

启动Ruby的Command控制面板,找到需要转译的Sass文件,如此例此文件放置在D盘的“www/workspace/Sass/css”目录下:

CSS预处理器——Sass、LESS和Stylus实践

如果仅针对于单文件的转译,需要将“style.scss”转译成“style.css”,只需要在对应的目录下输入下面的命令:

$ sass style.scss style.css	

这样原本在D盘的“www/workspace/Sass/css”目录下只有“style.scss”这个文件,现在增加了一个“style.css”文件,而这个CSS文件我们就可以用来调用,他也就是“style.scss”转译出来的样式文件。

当然,我们不可能每保存一次这个Sass文件就来执行一回这个转译命令。那么有没有更好的办法实现呢?回答是肯定的,可以通过下面的监听命令实现,这样一来只要Sass文件做了修改,就会自动更新对应的CSS样式文件。

单文件的监听,只需要在刚才的命令控制面板中输入:

$ sass --watch style.scss:style.css	

按下回车键(Enter),就会看到下面的提示信息:

CSS预处理器——Sass、LESS和Stylus实践

看到上图所示的提示信息就表示监听成功,这样一来,你只要修改了“style.scss”文件,“style.css”文件就会随着更新变化。

对于一个项目而言,不太可能只有一个CSS样式文件,如果有多个Sass文件需要监听时,就很有必要的组织一下。默认情况之下,我喜欢把所有的Sass文件放在“/css/sass”目录中,而生成的CSS文件则直接放在“/css”目录下。现在我们修改一下项目文件目录结构,在“/css”目录中再创建一个“sass”目录,并找刚才创建的“style.scss”文件移至“/css/sass”目录下。此时监听“css/sass”下的所有Sass文件时,可以在命令面板中输入如下格式的命令:

$ sass --watch sassFileDirectory:cssFileDirectory	

在本例中,冒号前面的“sassFileDirectory”是指“/css/sass”下的“sass”目录,冒号后面的“cssFileDirectory”是指“css”目录,对应的命令就是:

$ sass --watch css/sass:css	

回车后,同样可以得到提示信息:

CSS预处理器——Sass、LESS和Stylus实践

除了使用Ruby的Command控制面板转译Sass之外还可以考虑第三方工具,比如说有名的Compass.app和fire.app。

2.LESS文件的转译成CSS文件

LESS文件的转译和Sass文件转译可以说是大同小异,不同之处是LESS在安装的Node JS环境下通过其自己的命令来进行转译。

$ lessc style.less	

上面的命令会将编译的CSS传递给stdout,你可以将它保存到一个文件中:

$ lessc style.less > style.css	

除了上面的命令转译LESS源文件之外,现在还有很多第三方开发的工具,比较常见的有:SimpleLess、Less.app、LESS编译辅助脚本-LESS2CSS、WinLess和CodeKit.app等,我个人现在常用的是WinLess工具,简单易用,不过在IOS系统下LESS.app和CodeKit.app很好用。

3.Stylus源文件转译成CSS文件

Stylus具有可执行性,因此Stylus能将自身转换成CSS。Stylus可以读取自“stdin”输出到“stdout”,因此Stylus可以像下面转译源文件:

$ stylus –compress  <some.styl> some.css	

Stylus也像Sass一样,同时接受单个文件和整个目录的转译。例如,一个目录名为“css”将在同一个目录编译并输出“.css”文件。

$ stylus css	

下面的命令将输出到“./public/stylesheets”:

$ stylus css –out public/stylesheets	

还可以同时转译多个文件:

$ stylus one.styl two.styl	

如果你的浏览器安装了Firebug,那么可以使用FireStylus扩展

$ stylus –firebug  <path>	

五、Sass、LESS和Stylus的语法

每一种语言都有自己一定的语法规则,CSS预处理器语言也不例外,在真正使用CSS预处器语言之前还有一个不可缺少的知识点,就是对语法的理解。值得庆幸的是,这三款CSS预处理器语言的语法和CSS语法都差不多。

1.Sass语法

Sass3.0版本开始使用的是标准的CSS语法,和SCSS可以说是一样的。这样Sass代码转换成CSS代码变得更容易。默认Sass使用“.scss”扩展名。Sass语法规则可以像CSS那样书写:

/*style.sass新版语法规则*/
h1{
  color:#936;
  background-color:#333;
}	

正如你所看到的,在Sass样式中,这样的代码是在简单不过的了。

重要的一点是,Sass也同时支持老的语法,老的语法和常规的CSS语法略有不同,他需要严格的语法,任何的缩进和字符的错误都会造成样式的编译错误。Sass可以省略大括号({})和分号(;),完全依靠严格的缩进和格式化代码,而且文件使用“.sass”扩展名,他的语法类似于:

/*style.sass*/
h1
  color:#936
  background-color: #333	

2.LESS语法

LESS是CSS的一种扩展形式,它并没有阉割CSS的功能,而是在现有的CSS语法上,添加了很多额外的功能。就语法规则而言,LESS和Sass一样,都是使用CSS的标准语法,只是LESS的源文件的扩展名是“.less”,其基本语法类似于:

/*style.less*/
h1 {
  color: #963;
  background-color: #333;
}	

3.Stylus语法

Stylus的语法花样多一些,它的文件扩展名是“.styl”,Stylus也接受标准的CSS语法,但是他也像Sass老的语法规则,使用缩进控制,同时Stylus也接受不带大括号({})和分号的语法,如下所示:

/*style.styl*/
/*类似于CSS标准语法*/
h1 {
  color: #963;
  background-color:#333;
}
/*省略大括号({})*/
h1 
  color: #963;
  background-color: #333;
/*省略大括号({})和分号(;)*/
h1
  color:#963
  background-color:#333

在Stylus样式中,你也可以在同一个样式文件中使用不同的语法规则,下面这样的写法也不会报错:

/*style.styl*/
h1 {
  color  #963
}
h2 
  font-size:1.2em	

六、Sass、LESS和Stylus特性

这三款CSS预处理器语言具有一些相同的特性,例如:变量、混入、嵌套、函数等。在这一节中,我们依次来对比一下这三款CSS预处理器语言各种特性的异同之处,以及使用方法。

1.变量(Variables)

如果你是一个开发人员,变量应该是你最好朋友之一。在CSS预处理器语言中你也可以声明变量,并在整个样式表中使用。CSS预处理器语言支持任何变量(例如:颜色、数值、文本)。然后你可以在任意地方引用变量。

a)Sass的变量

Sass声明变量必须是“$”开头,后面紧跟变量名和变量值,而且变量名和变量值需要使用冒号(:)分隔开。就像CSS属性设置一样:

/*声明变量*/

$mainColor: #963;
$siteWidth: 1024px;
$borderStyle: dotted;

/*调用变量*/                              |  /*转译出来的CSS*/
------------------------------------------+------------------------------
body {                                    |  body {
  color: $mainColor;                      |    color: #963;
  border:1px $borderStyle $mainColor;     |    border:1px dotted #963;
  max-width: $siteWidth;                  |    max-width: 1024px;
}                                         |  }	

b)LESS的变量

LESS样式中声明变量和调用变量和Sass一样,唯一的区别就是变量名前面使用的是“@”字符:

/*声明变量*/

@mainColor: #963;
@siteWidth: 1024px;
@borderStyle: dotted;

/*调用变量*/                            |  /*转译出来的CSS*/
----------------------------------------+-------------------------------
body {                                  |  body {
  color: @mainColor;                    |    color:#963;
  border:1px @borderStyle @mainColor;   |    border:1px dotted #963;
  max-width: @siteWidth;                |    max-width:1024px;
}                                       |  }	

c)Stylus的变量

Stylus样式中声明变量没有任何限定,你可以使用“$”符号开始。结尾的分号(;)可有可无,但变量名和变量值之间的等号(=)是需要的。有一点需要注意的是,如果我们使用“@”符号开头来声明(0.22.4)变量,Stylus会进行编译,但其对应的值并不会赋值给变量。换句话说,在Stylus中不要使用“@”符号开头声明变量。Stylus中调用变量的方法和LESS、Sass是完全相同的。

/*声明变量*/

mainColor = #963;
siteWidth = 1024px;
$borderStyle = dotted;

/*调用变量*/                            |    /*转译出来的CSS*/
----------------------------------------+--------------------------------
body                                    | body {
  color mainColor                       |   color: #963;
  border 1px $borderStyle mainColor     |   border:1px dotted #963
  max-width siteWidth                   |   max-width:1024px;
                                        | }	

Stylus还有一个独特功能,不需要分配值给变量就可以定义引用属性:

/*水平垂直居中*/                    |  /*转译出来的CSS*/
------------------------------------+------------------------------------
#logo                               |   #logo {
  position  absolute                |     position:absolute;
  top  50%                          |     top:50%;
  left  50%                         |     left:50%;
  width  w = 150px                  |     width:150px;
  height  h = 80px                  |     height:80px;
  margin-left  -(w / 2)             |     margin-left:-75px;
margin-top  -(h / 2)                |     margin-top:-40px;
                                    |   } 	

从上面的代码中我们可以看出,CSS预处理器语言中的变量是值级别的重复使用,可以将相同的值定义成变量统一管理起来。

CSS预处理器语言中变量的特性适用于定义主题(也就是我们常说的换肤),我们可以将背景颜色、字体颜色、边框属性等常规样式统一定义,这样不同的主题只需要定义不同的变量文件就可以。

2.作用域(Scope)

CSS预处理器语言中的变量和其他程序语言一样,可以实现值的复用,同样它也存在生命周期,也就是Scope(变量范围,开发人员习惯称之为作用域),简单点讲就是局部变量还是全局变量的概念,查找变量的顺序是先在局部定义中找,如果找不到,则查找上级定义,直至全局。下面我们通过一个简单的例子来解释这三款CSS预处理器的作用域使用。

a)Sass的作用域

Sass中作用域在这三款预处理器是最差的,可以说在Sass中是不存在什么全局变量。具体来看下面的代码:

/*Sass样式*/
$color: black;
.scoped {
  $bg: blue;
  $color: white;
  color: $color;
  background-color:$bg;
}
.unscoped {
  color:$color;
}	

先看转译出来的CSS样式:

.scoped {
  color:white;/*是白色*/
  background-color:blue;
}
.unscoped {
  color:white;/*白色(无全局变量概念)*/
}	

示例明显的告诉我们,在Sass样式中定义变量,调用变量是没有全局变量一个概念存在,因此在Sass中定义了相同变量名时,在调用之时千万要多加小心,不然会给你的样式带来错误。

b)LESS的作用域

LESS中的作用域和其他程序语言中的作用域非常的相同,他首先会查找局部定义的变量,如果没有找到,会像冒泡一样,一级一级往下查找,直到根为止,同样上面的例子,我们来看看他在LESS下所起的变化。

/*LESS样式*/
@color: black;
.scoped {
  @bg: blue;
  @color: white;
  color: @color;
  background-color:@bg;
}
.unscoped {
  color:@color;
}	

转译出来的CSS样式:

.scoped {
  color:white;/*白色(调用了局部变量)*/
  background-color:blue;
}
.unscoped {
  color:black;/*黑色(调用了全局变量)*/
}	

c)Stylus的作用域

Stylus虽然起步比较晚,但其作用域的特性和LESS一样,可以支持全局变量和局变量。会向上冒泡查找,直到根为止。

3.混合(Mixins)

Mixins是CSS预处理器中语言中最强大的特性,简单点来说,Mixins可以将一部分样式抽出,作为单独定义的模块,被很多选择器重复使用。平时你在写样式时肯定有碰到过,某段CSS样式经常要用到多个元素中,这样你就需要重复的写多次。在CSS预处理器语言中,你可以为这些公用的CSS样式定义一个Mixin,然后在你CSS需要使用这些样式的地方直接调用你定义好的Mixin。这是一个非常有用的特性,Mixins被当作一个公认的选择器,还可以在Mixins中定义变量或者默认参数。

a)Sass的混合

Sass样式中声明Mixins时需要使用“@mixin”,然后后面紧跟Mixins的名,他也可以定义参数,同时可以给这个参数设置一个默认值,但参数名是使用“$”符号开始,而且和参数值之间需要使用冒号(:)分开。

在选择器调用定义好的Mixins需要使用“@include”,然后在其后紧跟你要调用的Mixins名。不过在Sass中还支持老的调用方法,就是使用加号“+”调用Mixins,在“+”后紧跟Mixins名。

一起来看个简单的例子,比如说在你的Sass样式中定义了一个名叫“error”的Mixin,这个“error”设置了一个参数“$borderWidth”,在没特别定义外,这个参数的默认值设置为“2px”:

/*声明一个Mixin叫作“error”*/
@mixin error($borderWidth:2px){
  border:$borderWidth solid #f00;
  color: #f00;
}
/*调用error Mixins*/
.generic-error {
  @include error();/*直接调用error mixins*/
}
.login-error {
  @include error(5px);/*调用error mixins,并将参数$borderWidth的值重定义为5px*/
}	

b)LESS的混合

在LESS中,混合是指将定义好的“ClassA”中引入另一个已经定义的“Class”,就像在当前的“Class”中增加一个属性一样。

不过LESS样式中声明Mixins和Sass声明方法不一样,他更像CSS定义样式,在LESS可以将Mixins看成是一个类选择器,当然Mixins也可以设置参数,并给参数设置默认值。不过设置参数的变量名是使用“@”开头,同样参数和默认参数值之间需要使用冒号(:)分隔开。

正如Sass混合是的示例,同样在LESS样式中定义一个名叫“error”的Mixin,这个“error”设置了一个参数“@borderWidth”,在没有特别定义外,这个参数的默认值是“2px”:

/*声明一个Mixin叫作“error”*/
.error(@borderWidth:2px){
  border:@borderWidth solid #f00;
  color: #f00;
}
/*调用error Mixins*/
.generic-error {
  .error();/*直接调用error mixins*/
}
.login-error {
  .error(5px);/*调用error mixins,并将参数@borderWidth的值重定义为5px*/
}	

c)Stylus的混合

Stylus中的混合和前两款CSS预处理器语言的混合略有不同,他可以不使用任何符号,就是直接声明Mixins名,然后在定义参数和默认值之间用等号(=)来连接。

/*声明一个Mixin叫作“error”*/
error(borderWidth=2px){
  border:borderWidth solid #f00;
  color: #f00;
}
/*调用error Mixins*/
.generic-error {
  error();/*直接调用error mixins*/
}
.login-error {
  error(5px);/*调用error mixins,并将参数$borderWidth的值重定义为5px*/
}	

三个示例都将会转译成相同的CSS代码:

.generic-error {
  border: 2px solid #f00;
  color:#f00;
}
.login-error {
  border:5px solid #f00;
  color: #f00;
}	

4.嵌套(Nesting)

CSS预处理器语言中的嵌套指的是在一个选择器中嵌套另一个选择器来实现继承,从而减少代码量,并且增加了代码的可读性。比如说,我们在CSS中多个元素有一个相同的父元素,那么写样式会变得很乏味,我们需要一遍一遍的在每个元素前写这个父元素,除非给特定的元素添加类名“class”或者ID。

section {
  margin:10px;
}
section nav {
  height:25px;
}
section nav a {
  color: #0982c1;
}
section nav a:hover {
  text-decoration: underline;
}	

相反,使用CSS预处理器语言的嵌套特性,我们可以在父元素的大括号({})里写这些元素。同时可以使用“&”符号来引用父选择器。对于Sass、LESS和Stylus这三款CSS预处理器语言的嵌套选择器来说,他们都具有相同的语法:

section {
  margin:10px;
  nav {
    height:25px;
    a {
      color:#0982c1;
      &:hover {
        text-decoration:underline;
      }
    }
  }
}	

上面的预处理器转译出来的CSS代码和我们开始展示的CSS代码是相同的,非常的方便吧!

5.继承(Inheritance)

对于熟悉CSS的同学来说,对于属性的继承并不陌生。平时在写CSS样式常碰到多个元素应用相同的样式时,我们在CSS中通常都是这样写:

p,ul,ol{/*样式写在这里*/}	

这样做非常的好,但往往我们需要给单独元素添加另外的样式,这个时候我们就需要把其中选择器单独出来写样式,如此一来我们维护样式就相当的麻烦。为了应对这个问题,CSS预处理器语言可以从一个选择继承另个选择器下的所有样式。

a)Sass和Stylus的继承

Sass和Stylus的继承是把一个选择器的所有样式继承到另个选择器上。在继承另个选择器的样式时需要使用“@extend”开始,后面紧跟被继承的选择器:

.block {
  margin: 10px 5px;
  padding: 2px;
}
p {
  @extend .block;/*继承.block选择器下所有样式*/
  border: 1px solid #eee;
}
ul,ol {
  @extend .block; /*继承.block选择器下所有样式*/
  color: #333;
  text-transform: uppercase;
}	

上面的代码转译成CSS:

.block,p,ul,ol {
  margin: 10px 5px;
  padding:2px;
}
p {
  border: 1px solid #eee
}
ul,ol {
  color:#333;
  text-transform:uppercase;
}	

b)LESS的继承

LESS支持的继承和Sass与Stylus不一样,他不是在选择器上继承,而是将Mixins中的样式嵌套到每个选择器里面。这种方法的缺点就是在每个选择器中会有重复的样式产生。

.block {
  margin: 10px 5px;
  padding: 2px;
}
p {
  .block;/*继承.block选择器下所有样式*/
  border: 1px solid #eee;
}
ul,ol {
  .block; /*继承.block选择器下所有样式*/
  color: #333;
  text-transform: uppercase;
}	

转译出来的CSS代码:

.block {
  margin: 10px 5px;
  padding:2px;
}
p {
  margin: 10px 5px;
  padding:2px;
  border: 1px solid #eee
}
ul,ol {
  margin: 10px 5px;
  padding:2px;
  color:#333;
  text-transform:uppercase;
}	

正如所看到的,上面的代码“.block”的样式将会被插入到相应的你要继承的选择器中,但需要注意的是优先级的问题。

6.运算符(Operations)

CSS预处理器语言还具有运算的特性,其简单的讲,就是对数值型的Value(如:数字、颜色、变量等)进行加减乘除四则运算。这样的特性在CSS样式中是想都不敢想的,但在CSS预处理器语言中对样式做一些运算一点问题都没有了,例如:

@base_margin: 10px;
@double_margin: @base_margin * 2;
@full_page: 960px;
@half_page: @full_page / 2;
@quarter_page: (@full_page / 2) / 2;	

上面代码是LESS的运算示例,声明一下,在取得“@quarter_page”变量时,我们可以直接除以4,但是在这里,我们只是想演示一下圆括号组成的“运算顺序”(这个运算顺序小学生也知道)。在复合型运算中,小括号也是很有必要的,例如:

border: (@width / 2) solid #000;	

Sass在数字运算上要比LESS更专业,他可以直接换算单位了。Sass可以处理无法识别的度量单位,并将其输出。这个特性很明显是一个对未来的尝试——证明W3C作出的一些改变。

Stylus的运算是三款预处理器语言中最强大的一款,他拥有其他程序语言一样的运算功能,简单点的加减乘除,复杂的有关系运算、逻辑运算等。受限于篇幅,感兴趣的同学可以到官网上仔细阅读。

7.颜色函数

颜色函数是CSS预处理器语言中内置的颜色函数功能,这些功能可以对颜色进行处理,例如颜色的变亮、变暗、饱和度控制、色相控制,渐变颜色等处理十分的方便。

a)Sass颜色函数

lighten($color, 10%); /* 返回的颜色在$color基础上变亮10% */
darken($color, 10%);  /* 返回的颜色在$color基础上变暗10% */
saturate($color, 10%);   /* 返回的颜色在$color基础上饱和度增加10% */
desaturate($color, 10%); /* 返回的颜色在$color基础上饱和度减少10% */
grayscale($color);  /* 返回$color的灰度色*/
complement($color); /* 返回$color的补色 */
invert($color);     /* 返回$color的反相色 */
mix($color1, $color2, 50%); /* $color1 和 $color2 的 50% 混合色*/	

这只是Sass中颜色函数的一个简单列表,更多详细的介绍可以阅读Sass文档

颜色函数可以运用到任何一个元素上,只要其有颜色的属性,下面是一个简单的例子:

$color: #0982C1;
h1 {
  background: $color;
  border: 3px solid darken($color, 50%);/*边框颜色在$color的基础上变暗50%*/
}	

b)LESS颜色函数

lighten(@color, 10%); /* 返回的颜色在@color基础上变亮10% */
darken(@color, 10%);  /* 返回的颜色在@color基础上变暗10%*/
saturate(@color, 10%);   /* 返回的颜色在@color基础上饱和度增加10% */
desaturate(@color, 10%); /* 返回的颜色在@color基础上饱和度降低10%*/
spin(@color, 10);  /* 返回的颜色在@color基础上色调增加10 */
spin(@color, -10); /* 返回的颜色在@color基础上色调减少10 */
mix(@color1, @color2); /* 返回的颜色是@color1和@color2两者的混合色 */	

LESS的完整颜色函数功能,请阅读LESS文档

下面是LESS中如何使用一个颜色函数的简单例子:

@color: #0982C1;
h1 {
  background: @color;
  border: 3px solid darken(@color, 50%);
}	

c)Stylus的颜色函数

lighten(color, 10%); /* 返回的颜色在'color'基础上变亮10% */
darken(color, 10%);  /* 返回的颜色在'color'基础上变暗10% */
saturate(color, 10%);   /* 返回的颜色在'color'基础上饱和度增加10% */
desaturate(color, 10%); /* 返回的颜色在'color'基础上饱和度降低10% */  	

有关于Stylus的颜色函数介绍,请阅读Stylus文档

下面是Stylus颜色函数的一个简单实例:

color = #0982C1
h1
  background color
  border 3px solid darken(color, 50%)  

从上面展示的部分颜色函数可以告诉我们,Sass、LESS和Stylus都具有强大的颜色函数功能,功能特性上都大同小异,只是在使用方法上略有不同。而且他们都具有相同的一个目的,就是方便操作样式中的颜色值。

8.导入(Import)

在CSS中,并不喜欢用@import来导入样式,因为这样的做法会增加http的请求。但是在CSS预处理器中的导入(@import)规则和CSS的有所不同,它只是在语义上导入不同的文件,但最终结果是生成一个CSS文件。如果你是通赤“@import ‘file.css’”导入“file.css”样式文件,那效果跟普通CSS导入样式文件一样。注意:导入文件中定义了变量、混合等信息也将会被引入到主样式文件中,因此需要避免他们的相互冲突。

Sass、LESS和Stylus三款CSS预处理器语言,导入样式的方法都是一样:

被导入文件的样式:

/* file.{type} */
body {
  background: #EEE;
}	

需要导入样式的文件:

@import "reset.css";
@import "file.{type}";
p {
  background: #0982C1;
}	

转译出来的CSS代码:

@import "reset.css";
body {
  background: #EEE;
}
p {
  background: #0982C1;
}	

9.注释(Comment)

CSS预处理器语言中的注释是比较基础的一部分,这三款预处理器语言除了具有标准的CSS注释之外,还具有单行注释,只不过单行注释不会被转译出来。

a)Sass、LESS和Stylus的多行注释

多行注释和CSS的标准注释,他们可以输出到CSS样式中,但在Stylus转译时,只有在“compress”选项未启用的时候才会被输出来。

/*
 *我是注释
*/
body
  padding 5px	

b)Sass、LESS和Stylus的单行注释

单行注释跟JavaScript语言中的注释一样,使用双斜杠(//),但单行注释不会输出到CSS中。

//我是注释
@mainColor:#369;//定义主体颜色	

在Stylus中除了以上两种注释之外,他还有一种注释,叫作多行缓冲注释。这种注释跟多行注释类似,不同之处在于始的时候,这里是”/*!”。这个相当于告诉Stylus压缩的时候这段无视直接输出。

/*!
*给定数值合体
*/
add(a, b)
  a + b	

上面从九个常用的特性对Sass、LESS和Stylus三款CSS预处理器语言的使用做了对比,在某些特性上可以说是一模一样,而有一些特性上功能其实一样,只是在部分书写规则上有所不同。当然有些特性是完全不同。在这里几是从使用方法上做为一个比较,主要目的是让大家经过对比之后,使自己选择哪一款CSS预处理器语言有所方向和帮助。

七、CSS预处理器的高级应用

我们知道,Sass、LESS和Stylus都具有变量、混合、嵌套、函数和作用域等特性,但这些特性都是一些普通的特性。其实除了这些特性之外,他们还拥有一些很有趣的特性有助于我们的开发,例如条件语句、循环语句等。接下来,我们同样从使用上来对比一下这三款CSS预处理器语言在这方面应用又有何不同异同。

a)条件语句

说到编程,对于编程基本控制流,大家并不会感到陌生,除了循环就是条件了。条件提供了语言的可控制,否则就是纯粹的静态语言。提供的条件有导入、混合、函数以及更多。在编程语言中常见的条件语句:

if/else if/else	

if表达式满足(true)的时候执行后面语然块,否则,继续后面的else if或else。

在这三款CSS3预处理器语言中都具有这种思想,只不过LESS中表达的方式略有不现,接下来我们依次看看他们具体如何使用。

Sass的条件语句

Sass样式中的条件语句和其他编程语言的条件语句非常相似,在样式中可以使用“@if”来进行判断:

p {
  @if 1 + 1 == 2 { border: 1px solid;  }
  @if 5 < 3      { border: 2px dotted; }
  @if null       { border: 3px double; }
}

编译出来的CSS:

p {
  border: 1px solid; 
}

在Sass中条件语句还可以和@else if、@else配套使用:

$type: monster;
p {
  @if $type == ocean {
    color: blue;
  } @else if $type == matador {
    color: red;
  } @else if $type == monster {
    color: green;
  } @else {
    color: black;
  }
}	

转译出来的CSS:

p {color:green;}	

Stylus的条件语句

Stylus的条件语句的使用和其他编程的条件语句使用基本类似,不同的是他可以在样式去省略大括号({}):

box(x, y, margin = false)
  padding y x
  if margin
    margin y x
body
  box(5px, 10px, true)	

Stylus同样可以和else if、else配套使用:

box(x, y, margin-only = false)
  if margin-only
    margin y x
  else
    padding y x	

Stylus除了这种简单的条件语句应用之外,他还支持后缀条件语句。这就意味着if和unless(熟悉Ruby程序语言的用户应该都知道unless条件,其基本上与if相反,本质上是“(!(expr))”)当作操作符;当右边表达式为真的时候执行左边的操作对象。

例如,我们定义了negative()来执行一些基本的检查。下面我们使用块式条件:

negative(n)
  unless n is a 'unit'
    error('无效数值')
  if n < 0
    yes
  else
    no	

接下来,我们利用后缀条件让我们的方法简洁:

negative(n)
  error('无效数值') unless n is a 'unit'
  return yes if n < 0
  no	

当然,我们可以更进一步。如这个“n < 0 ? yes : no”可以用布尔代替:“n < 0”。后缀条件适合于大多数的单行语句。如“@import,@charset”混合书写等。当然,下面所示的属性也是可以的:

pad(types = margin padding, n = 5px)
  padding unit(n, px) if padding in types
  margin unit(n, px) if margin in types

body
  pad()

body
  pad(margin)

body
  apply-mixins = true
  pad(padding, 10) if apply-mixins	

上面代码转译出来的CSS:

body {
  padding: 5px;
  margin: 5px;
}
body {
  margin: 5px;
}
body {
  padding: 10px;
}	

LESS的条件语句

LESS的条件语句使用有些另类,他不是我们常见的关键词if和else if之类,而其实现方式是利用关键词“when”。

.mixin (@a) when (@a >= 10) { 
  background-color: black; 
 } 
 .mixin (@a) when (@a < 10) { 
  background-color: white; 
 } 
 .class1 { .mixin(12) } 
 .class2 { .mixin(6) }	

转译出来的CSS:

.class1 { 
  background-color: black; 
 } 
.class2 { 
  background-color: white; 
 }	

利用When以及<、>、=、<=、>=是十分简单和方便的。LESS并没有停留在这里,而且提供了很多类型检查函数来辅助条件表达式,例如:iscolor、isnumber、isstring、iskeyword、isurl等等。

.mixin (@a) when (iscolor(@a)) { 
  background-color: black; 
 } 
 .mixin (@a) when (isnumber(@a)) { 
  background-color: white; 
 } 
 .class1 { .mixin(red) } 
 .class2 { .mixin(6) }	

转译出来的CSS

.class1 { 
  background-color: black; 
 } 
 .class2 { 
  background-color: white; 
 }	

另外,LESS的条件表达式同样支持AND和OR以及NOT来组合条件表达式,这样可以组织成更为强大的条件表达式。需要特别指出的一点是,OR在LESS中并不是or关键词,而是用,来表示or的逻辑关系。

.smaller (@a, @b) when (@a > @b) { 
  background-color: black; 
} 
.math (@a) when (@a > 10) and (@a < 20) { 
  background-color: red; 
} 
.math (@a) when (@a < 10),(@a > 20) { 
  background-color: blue; 
} 
.math (@a) when not (@a = 10)  { 
  background-color: yellow; 
} 
.math (@a) when (@a = 10)  { 
  background-color: green; 
} 

.testSmall {.smaller(30, 10) } 
.testMath1 {.math(15)} 
.testMath2 {.math(7)} 
.testMath3 {.math(10)}

转译出来的CSS

.testSmall { 
  background-color: black; 
} 
.testMath1 { 
  background-color: red; 
  background-color: yellow; 
} 
.testMath2 { 
  background-color: blue; 
  background-color: yellow; 
} 
.testMath3 { 
  background-color: green; 
}	

b)循环语句

Sass和Stylus还支持for循环语句,而LESS并没支持for循环语句,但值得庆幸的是,在LESS中可以使用When来模拟出for循环的特性。

Sass的循环语句

Sass中使用for循环语句需要使用@for,并且配合“from”和“through”一起使用,其基本语法:

@for $var from <start> through <end> {语句块}	

我们来看一个简单的例子:

@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}	

转译出来的CSS代码:

.item-1 {  width: 2em; }
.item-2 {  width: 4em; }
.item-3 {  width: 6em; }	

在Sass中循环语句除了@for语句之外,还有@each语句和@while语句

@each循环语法:

@each $var in <list>{语句块}	

来看个简单的实例:

@each $animal in puma, sea-slug, egret, salamander {
  .#{$animal}-icon {
    background-image: url('/images/#{$animal}.png');
  }
}	

转译出来的CSS

.puma-icon {  background-image: url('/images/puma.png'); }
.sea-slug-icon {  background-image: url('/images/sea-slug.png'); }
.egret-icon {  background-image: url('/images/egret.png'); }
.salamander-icon {  background-image: url('/images/salamander.png')	}

@while循环使用和其他编程语言类似:

$i: 6;
@while $i > 0 {
  .item-#{$i} { width: 2em * $i; }
  $i: $i - 2;
}	

转译出来的CSS

.item-6 {  width: 12em; }
.item-4 {  width: 8em; }
.item-2 {  width: 4em; }	

Stylus的循环语句

在Stylus样式中通过for/in对表达式进行循环,形式如下:

for <val-name> [, <key-name>] in <expression>	

例如:

body
  for num in 1 2 3
    foo num	

转译出来CSS

body {
  foo: 1;
  foo: 2;
  foo: 3;
}	

下面这个例子演示了如何使用<key-name>:

body
  fonts = Impact Arial sans-serif
  for font, i in fonts
    foo i font	

转译出来的CSS

body {
  foo: 0 Impact;
  foo: 1 Arial;
  foo: 2 sans-serif;
}	

LESS的循环语句

在LESS语言中并没有现在的循环语句,可是像其条件语句一样,通过when来模拟出他的循环功能。

.loopingClass (@index) when (@index > 0) {
  .myclass {
    z-index: @index;
  }
  // 递归
  .loopingClass(@index - 1);
}
// 停止循环
.loopingClass (0) {}

// 输出
.loopingClass (3);	

转译出的CSS

.myclass {z-index: 3;}
.myclass {z-index: 2;}
.myclass {z-index: 1;}	

相比之下,Sass和Stylus对条件语句和循环语句的处理要比LESS语言强大。因为他们具有真正的语言处理能力。

综上所述,我们对Sass、LESS和Stylus做一个简单的对比总结:

  • 三者都是开源项目;
  • Sass诞生是最早也是最成熟的CSS预处理器,有Ruby社区和Compass支持;Stylus早期服务器Node JS项目,在该社区得到一定支持者;LESS出现于2009年,支持者远超于Ruby和Node JS社区;
  • Sass和LESS语法较为严谨、严密,而Stylus语法相对散漫,其中LESS学习起来更快一些,因为他更像CSS的标准;
  • Sass和LESS相互影响较大,其中Sass受LESS影响,已经进化到了全面兼容CSS的SCSS;
  • Sass和LESS都有第三方工具提供转译,特别是Sass和Compass是绝配;
  • Sass、LESS和Stylus都具有变量、作用域、混合、嵌套、继承、运算符、颜色函数、导入和注释等基本特性,而且以“变量”、“混合”、“嵌套”、“继承”和“颜色函数”称为五大基本特性,各自特性实现功能基本相似,只是使用规则上有所不同;
  • Sass和Stylus具有类似于语言处理的能力,比如说条件语句、循环语句等,而LESS需要通过When等关键词模拟这些功能,在这一方面略逊一层;

上面是CSS预处理器语言中的Sass、LESS和Stylus在某些方面的对比,相对于CSS来说,上面都是CSS预处理器语言的优点?那么他有没有缺点呢?

万物都有阴阳两极,有圆就有缺,CSS预处理器语言也逃避不了这个宿命。个人感觉CSS预处理器语言那是程序员的玩具,想通过编程的方式跨界解决CSS的问题。可以CSS应该面临的问题一个也少不了,只是增加了一个编译过程而已,简单来说CSS预处理器语言较CSS玩法变得更高级了,但同时降低了自己对最终代码的控制力。更致命的是提高了门槛,首先是上手门槛,其次是维护门槛,再来是团队整体水平和规范的门槛。这也造成了初学学习成本的昂贵。

全文从Sass、LESS和Stylus的背景介绍、安装步骤、转译方法、语法规则、基本特性和高级应用六个方面对目前世面上流行的三款CSS预处理器语法做了一个对比。他们各有各的优势,也各有各的劣势。现在我们又回到当初提的问题“我应该选择哪种CSS预处理器?”。不知道你是否可以做出选择?

如需转载,烦请注明出处:http://www.w3cplus.com/css/css-preprocessor-sass-vs-less-stylus-2.html

HTML和CSS高级指南之六——jQuery

$
0
0

本文由清风根据Shay Howe的《An Adavnced Guide to HTML & CSS》第六课《jQuery》所译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://learn.shayhowe.com/advanced-html-css/jquery,以及作者相关信息

作者:Shay Howe

译者:清风

作为网页设计师或前端的一员你经常会遇到javascript和jQuery,JS是Javascript的缩写。在排名前10000的网站,有超过92%的网站在使用javascript,而jQuery则有超过63%的网站在使用。所以就不用多说他们有多流行了。你可能希望通过编写javascript或者jquery来展现自己的网站的某些行为。

如果你还在问javascript和jQuery到底是什么,不要害怕,这节课将简要概述javascript然后去了解一下jQuery。

这节内容包括的内容

Javascript

  1. JavaScript介绍
  2. jQuery介绍
  3. 选择器
  4. 遍历
  5. 操作
  6. 事件
  7. 效果

Javascript介绍

Javascript提供了可以给网站添加交互和丰富用户体验的能力。HTML为页面提供了结构,CSS为页面提供了外观,Javascript为页面提供了行为。

就像CSS,javascript应该保存在以.js为扩展名的外部文件中,然后在HTML文档中使用script元素引用。Javascript在哪个位置被引用取决于它应该什么时候执行。一般来说,引用javascript最好的位置是在</body>之前,这样javascript文件会在所有的HTML被解析后加载。但是,有时javascript需要帮助渲染HTML和确定它的行为,因此可以在文档头部引用。

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

值&变量

Javascript的基础包括值和变量。一般情况下值就是javascript用来识别的不同类型的值,变量用来存储和共享这些值。

值包括文本字符串(string),true或false等布尔值,数字,undefined ,null或其他类似函数和对象的值。

定义变量的一个常见的方式是使用关键字var,后跟变量名和等号(=)然后是值,elCase最后以分号(;)结束。变量名必须以字符下划线(_)或$开头。变量不能以数字开头虽然它们在后面可以被使用。并且不能使用任何连字符。另外javascript对大小写敏感,所以字符包括a-z和A-Z。

常见的变量命名方式是使用驼峰命名法,而不使用任何波折号(-)和下划线(_)。驼峰拼写法是由去掉空格的合成词组成,它利用了除第一个单词以外的其他单词的的首字母。例如 shay is awesome 经常会以shayIsAwesome的形式命名。

var theStarterLeague = 125;
var food_truck = 'Coffee';
var mixtape01 = true;
var vinyl = ['Miles Davis', 'Frank Sinatra', 'Ray Charles'];	

语句

一般地说,javascript就是一组被浏览器按照它们书写顺序执行的语句。这些语句提供了用来确定应采取何种行为的命令。语句的格式和长度各异,多条语句用分号分隔。新的语句在新的一行开始,当出现语句嵌套的时候应该使用缩进,以提高可读性,但不是必须的。

log(polaroid);
return('bicycle lane');
alert('Congratulations, you ' + outcome);	

函数

除了javascript基础以外,函数也很重要。函数提供了一种执行或保存一组脚本的方法,根据函数功能它们可能接受不同的参数。

函数是这样定义的:function关键字后面跟函数名和被括号包起来的参数列表(如果必须)然后是一条或一组在花括号内({})的javascript语句。

function sayHello(name) {
  return('Hello ' + name);
}	

数组

正如你可能已经认识到的那样,一些值可能会以数组的形式返回。数组提供了一种存储列表或一些值的方法。数组是很有用的,原因有很多,其中一个是可以用不同的方法和操作进行遍历。另外根据情况,数组可以被用来存储并返回各种不同的值。

一般而言,数组由一对方括号([])和其内的一些被逗号分隔的项组成。数组的项从0开始,逐步递增。当标示一个列表中的第三项时使用[2]的形式来来标记。

对象

Javascript同样是建立在对象的基础上,对象就是键 值对的集合。例如,这里有一个名为school的对象,包括的键也称为属性有, name, location, students, andteachers和它们的值。

在这个例子中变量school被设置为一个用用来保存多个属性的对象。每个属性都有键和对应的值。整个对象包括在一对花括号({})内,由键和跟在后面的冒号和值组成的属性用逗号分隔。

var school = {
  name: 'The Starter League',
  location: 'Merchandise Mart',
  students: 120,
  teachers: ['Jeff', 'Raghu', 'Carolyn', 'Shay']
};	
var school = ["Austin", "Chicago", "Portland"];	

数组

上图使用的是谷歌浏览器的开发者工具,javascript可以在控制台上运行。

jQuery简介

在对javascript有了基本的了解并有了一些基础后,是时候来看下jQuery了。jQuery是John Resig编写的一个开源的javascript库,它简化了HTML, CSS, 和 JavaScript的交互。自从2006年jQuery被发布以来,飞速发展,被大大小小的公司使用。

使jQuery如此流行的是它的简单易用。它的选择像css和易于理解的分离的行为。jQuery的好处是巨大的,但我们目的是使用它来查找元素和执行动作。

开始使用jQuery

使用jQuery的第一步是在HTML文档中引用它。正如前面所提到的javascript,也是在</body>前使用script元素。由于jQuery是个独立的库,最好与其它JavaScript代码保存独立。

在引用jQuery的时候这里有几点要注意,使用的是压缩版还是未压缩版,以及是否使用了类似Google hosted libraries的内容分发网络(CDN)。如果编写的代码是用在线上的生产的环境,鼓励使用压缩的版本来获得更短的加载时间。另外,使用类似谷歌的CDN同样有助于缩短加载时间还有潜在的缓存的好处。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>	
<script src="script.js"></script>	

在上面的示例代码中,注意第二个script元素引用的javascript文件。所有手写的自定义的javascript和jQuery脚本应该写在这个文件中。另外,这个文件要放在jQuery文件下面,这样它就可以引用已经声明过的jQuery函数。

哪里是主要的http?

您可能已经注意到,在上面的示例中引用CDN没有使用http头部。http故意漏掉,主要是允许两个http和https连接。当在本地工作时,没有任何web服务器,前面的htt试图在文件系统磁盘驱动。

jQuery对象

jQuery提供了自己的对象即$符号,也被称为jQuery。$对象是特别为选择元素然后返回元素节点以便在上面执行动作。这些选择和动作应该写在一个新的文件中,在jQuery库外面引用。

$();
jQuery()	

文档准备完成

在使用任何jQuery遍历和操作一个页面之前,最好等待DOM加载完成。幸好jQuery有一个准备完成事件,.ready(),它在HTML文档准备好被修改的时候(Ps:就是DOM渲染完成)被调用。将所有我们自己写的jQuery放入这个函数里面,可以确保它们在页面加载完成和DOM准备完成之前不会执行。

$(document).ready(function(event){ 
  // jQuery code 
});	

选择器

如上所述,jQuery的一个核心概念就是选中元素然后执行动作。jQuery在选择元素这个任务上完成的非常好,它模仿了极易使用的CSS。除了常见的CSS选择器,jQuery还提供了所有的CSS3选择器,无论浏览器是否支持,它都可以使用。

调用jQuery对象,$(),包含一个选择器会返回对应的DOM节点以便操作它们。选择器放在括号内(‘’),然后选择的元素和CSS里的一样。

$('.feature');              // 类选择器
$('li strong');             // 后代选择器
$('em, i');                 // 多选择器
$('a[target="_blank"]');    // 属性选择器
$('p:nth-child(2)');        // 伪类选择器	

选择关键字this

在jQuery函数内部执行时,你可能想选择某个元素,这个元素在源选择器中被引用。在这种情况下,this关键字会被用来引用那个当前正在处理的元素。

$('div').click(function(event){ 
  $(this);
});	

jQuery选择过滤器

只是CSS选择器是不够的,jQuery还有一些自定义的过滤器来帮助选择。这些过滤器是CSS3的扩展,对选择一个元素或相关元素提供了更多控制。

$('div:has(strong)');	

这些过滤器可以在选择器的内部使用,但因为他们不是原生的DOM所以速度有一点点慢。在:filter()方法中使用这些过滤器会达到最好的结果,filter()方法是jQuery遍历功能的一部分。

遍历

有时一般的CSS选择器本身不会分割结果,但我们也需要一些更详细的控制。幸运的是jQuery提供了一些方法来上下遍历DOM树,必要时可以过滤或选择某些特定元素。

在开始过滤DOM内部的元素之前需要首先有一个选择结果,过滤会相对于这个选择结果进行遍历。在下面的例子中,原始的选择是在DOM中查找所有的div元素,然后使用.not()方法过滤。这个特殊的方法使所有没有type或collection类的div元素被选中。

$('div').not('.type, .collection');	

方法链

可以简单的在不同的遍历方法间使用点(.)连接成链以便对选中的元素应用更多的控制。

下面的代码示例使用了.not()方法和.parent()方法。结合在一起之后,将会只选择没有type或collection类的div元素的父元素。

$('div').not('.type, .collection').parent();	

遍历方法

jQuery有相当多的遍历方法可使用。它们分为三个种类,过滤,层次遍历和DOM树遍历。每个种类所属的方法都可以在下面看到。

过滤

  • .eq()
  • .filter()
  • .first()
  • .has()
  • .is()
  • .last()
  • .map()
  • .not()
  • .slice()

层次遍历

  • .add()
  • .andSelf()
  • .contents()
  • .end()

遍历DOM树

  • .children()
  • .closest()
  • .find()
  • .next()
  • .nextAll()
  • .nextUntil()
  • .offsetParent()
  • .parent()
  • .parents()
  • .parentsUntil()
  • .prev()
  • .prevAll()
  • .prevUntil()
  • .siblings()

操作

选择和遍历DOM中的元素只是jQuery提供的一部分功能,另外重要的一部分就是当这些元素被选中之后可以做些什么。对这些元素的可能操作或者读取,或者添加或者改变属性或样式。另外,DOM中的元素有可能被改变,改变它们在DOM中的位置,移动(DOM结构不变),添加新元素等等。总的来说,操作元素的可选项是很多的。

读取&设置

操作方法中最常用的两个指令即读取或设置信息。通过选择器获取信息需要给这个选择器添加一个方法来确定那个信息需要被检索。另外,同样的选择器和方法同样可以用来设置信息。

// Gets the value of the alt attribute
$('img').attr('alt');
// Sets the value of the alt attribute
$('img').attr('alt', 'Wild kangaroo');	

在这个例子和片段遵循方法主要是用于设置模式,但是他们也能被用于获得模式一样。

操作属性

元素可以被检测和操作的一部分就是属性。一些选项包括添加,移除,或者改变属性或属性值。在下面的例子中.addClass()方法被用来给所有的偶数列表项添加一个类,.removeClass()方法被用来移除所有段落的类,最后.attr方法被用来给所有abbr元素的title属性设置值Hello Word。

$('li:even').addClass('even-item');
$('p').removeClass();
$('abbr').attr('title', 'Hello World');	

操作属性的方法

  • .addClass()
  • .attr()
  • .hasClass()
  • .prop()
  • .removeAttr()
  • .removeClass()
  • .removeProp()
  • .toggleClass()
  • .val()

操作样式

除了操作属性外,元素的样式也可以使用某些方法操作。当读取或者设置元素的宽度,高度或者位置时,有少数可用的特殊方法,对于所有其他的样式操作,.css()方法可以处理任何CSS改变。

.css()方法可以使用不同的语法设置一个或多个属性。若设置一个属性,属性名和值应该在引号内并被逗号分隔。如果设置多个属性,属性应该嵌套在大括号内,属性名使用驼峰的形式移除任何的连字符(Ps:按照css的正常写法也可以,关于这些方法的详细语法可以参考api.jquery.com)后面跟冒号和用引号引起来的值。每个属性和值对应该用逗号隔开

高度,宽度和位置方法都默认使用像素值,但其他的尺寸单位也可以使用。像下面看到的那样,改变单位的值,然后使用一个加号后面是引号引起来的尺寸单位。

$('h1 span').css('font-size', 'normal');
$('div').css({
  fontSize: '13px', 
  background: '#f60'
});
$('header').height(200);
$('.extend').height(30 + 'em');	

操作样式的方法

  • .css()
  • .height()
  • .innerHeight()
  • .innerWidth()
  • .offset()
  • .outerHeight()
  • .outerWidth()
  • .position()
  • .scrollLeft()
  • .scrollTop()
  • .width()

操作DOM

最后我们可以检测和操作DOM,改变元素的位置,添加或移除元素,还有其他各种改变元素的情况。这里的选项是深入和多样的,允许对DOM做出任何潜在的改变。

每个DOM操作方法都有自己的语法,但下面有他们中的几个的概述。.prepend()方法用来在选择的元素的顶部添加一个新的元素,.text()方法用Hello Word替换了所有h1元素的文本。

$('section').prepend('<h3>Featured</h3&ht;');
$('a[target="_blank"]').after('<em>New window.</em>');
$('h1').text('Hello World');	

操作DOM的方法

  • .after()
  • .append()
  • .appendTo()
  • .before()
  • .clone()
  • .detach()
  • .empty()
  • .html()
  • .insertAfter()
  • .insertBefore()
  • .prepend()
  • .prependTo()
  • .remove()
  • .replaceAll()
  • .replaceWith()
  • .text()
  • .unwrap()
  • .wrap()
  • .wrapAll()
  • .wrapInner()

事件

jQuery最美的地方之一就是可以很容易的添加事件处理程序,这些方法在发生某些特定的事件或行为时被调用。例如,给元素添加类的方法可以设置为当那个元素被点击时执行。

下面是一个标准的选择器,选中所有的列表项。.click()事件方法绑定在了列表项选择器上,设置了当点击任何一个列表元素时执行的动作。在.click()事件方法内部是一个函数,这个函数用来确保内部的任何动作都可以被执行。function后面的括号用来给函数传递参数,就像在这个示例中使用的event对象。

在函数内部是另一个绑定了.addClass()方法的选择器。现在,当列表项被点击时,通过this关键字,被点击的那个列表项添加了saved-item类。

$('li').click(function(event){
  $(this).addClass('saved-item');
});	

灵活的事件

.click()事件方法,像其他一些事件方法一样是一个速记方法,这些方法在jQuery 1.7中使用.on()方法实现。.on()方法提供了很大的灵活性,为元素应用的这些方法被动态添加到页面中。

在使用.on()方法时,第一个参数是原生事件名称,第二个参数是时间处理函数。从下面的例子可以看出,.on()方法被用来代替.click()方法。现在click事件名作为.on()方法的第一个参数,事件处理函数仍然和以前一样。

$('li').on('click', function(event){
  $(this).addClass('saved-item');
});	

嵌套事件

嵌套在另一个事件函数中也可以操作或触发事件处理函数。作为一个示例,下面的.on()方法使用了hover参数,当在所有拥有pagination类的元素上hover时会触发这个事件。当.on()事件触发时ID为up的锚上的.click()事件会被调用。

$('.pagination').on('hover', function(event){
  $('a#up').click();
});	

事件演示

使用警示信息作为演示,下面的代码片段展示了如何创建一个警示信息然后当点击关闭图标时移除这个信息。

HTML

<div class="alert-warning">
  <strong>Warning!</strong> I’m about to lose my cool.
  <div class="alert-close">×</div>
</div>	

JavaScript

$('.alert-close').on('click', function(event){
  $('.alert-warning').remove();
});	

事件演示

事件方法

jQuery提供了相当多的方法,当用户和浏览器发生交互时用这些方法可以注册用户的行为。这些方法注册了相当多的事件,包括但不局限于浏览器,表单,键盘事件和鼠标事件。这些方法里最普遍的如下:

浏览器事件

  • .resize()
  • .scroll()

文档加载

  • .ready()

事件捕获

  • .off()
  • .on()
  • .one()
  • jQuery.proxy()
  • .trigger()
  • .triggerHandler()
  • .unbind()
  • .undelegate()

事件对象

  • event.currentTarget
  • event.preventDefault()
  • event.stopPropagation()
  • event.target
  • event.type

表单事件

  • .blur()
  • .change()
  • .focus()
  • .select()
  • .submit()

键盘事件

  • .focusin()
  • .focusout()
  • .keydown()
  • .keypress()
  • .keyup()

鼠标事件

  • .click()
  • .dblclick()
  • .focusin()
  • .focusout()
  • .hover()
  • .mousedown()
  • .mouseenter()
  • .mouseleave()
  • .mousemove()
  • .mouseout()
  • .mouseover()
  • .mouseup()

效果

事件之后,jQuery也提供了一些自定义的效果。这些效果来自不同的方法,包括显示和隐藏内容,渐隐渐显内容以及向上或向下滑动内容。所有这些方法都可以被单独使用或者按照最佳的方式组合使用。

每个效果方法都有自己的语法,所以最好参考jQuery效果文档中的每个方法的特定语法。最常见的是,这些效果通常会接收持续时间,缓动效果,和特殊的回调函数这几个参数。

jQuery CSS 动画

jQuery利用不同的css属性实现了常见的css动画,虽然这些动画有一些css现在本身已经可以实现了。由于浏览器的支持原生CSS动画拥有更好的性能,原生动画是更好的选择,当可以使用时。由于Modernizr 的帮助jQuery动画效果对那些不支持原生css动画的浏览器来说是一个完美的备份解决方案。

效果持续时间

以.show()方法为例,传给该方法的第一个可选参数是持续时间,这个参数可以是一个关键字或者毫秒值。关键字slow等于600毫秒,fast等于200毫秒。可以使用关键字,但使用毫秒值也可以。使用关键字则必须和提供的值一致,而毫秒值则不需要。

$('.error').show();
$('.error').show('slow');
$('.error').show(500);	

缓动效果

除了设置效果的持续时间,缓动和动画在不同时间的速度也可以设置。jQuery有两个默认的缓动关键字swing和linear。默认的swing值,使动画从比较慢的速度开始然后在动画过程中加速然后在完成之前又减速。liner值则以一个不变的值运行在整个过程中。

$('.error').show('slow', 'linear');
$('.error').show(500, 'linear');	

jQuery UI

jQuery的这两个缓动值可以使用不同的插件扩展,这些插件可能提供额外的值。其中最流行的一个插件就是jQuery UI组件。

除了上面的缓动值外jQuery UI也提供了很多其他的交互效果,小工具和其他有用的资源,值得看看。

效果回调

当动画完成可能会执行其他的函数,这个函数就叫做回调函数。回调函数应该放在持续时间或缓动参数之后,如果它们存在的话。在这个函数中可以放置新的事件或者函数,这些事件或函数得遵守他们各自的语法。

$('.error').show('slow', 'linear', function(event){
  $('.error .status').text('Continue');
});	

效果语法

如上所述,每个特效方法都有自己的语法,这些可以在jQuery官方效果文档中找到。这里列出的持续时间(duration),缓动效果(easing)和回调函数(callback)等参数是常见的,但不是在每个方法里面都可用。所以当你对某个方法有疑问的时候最好去看下它的语法。

效果演示

和上面的演示用同样的事件,.remove()方法现在作为.fadeOut方法的回调函数的一部分。.fadeOut()方法可以使提示信息逐渐隐藏,比快速消失要好很多,然后在动画完成之后将自身从DOM中移除。

HTML

<div class="alert-warning">
  <strong>Warning!</strong> I’m about to lose my cool.
  <div class="alert-close">×</div>
</div>	

JavaScript

$('.alert-close').on('click', function(event){
  $('.alert-warning').fadeOut('slow', function(event){
    $(this).remove();
  });
});

事件演示

基本效果

  • hide()
  • .show()
  • .toggle()

常用效果

  • .animate()
  • .clearQueue()
  • .delay()
  • .dequeue()
  • jQuery.fx.interval
  • jQuery.fx.off
  • .queue()
  • .stop()

隐藏效果

  • .fadeIn()
  • .fadeOut()
  • .fadeTo()
  • .fadeToggle()

滑动效果

  • .slideDown()
  • .slideToggle()
  • .slideUp()

滑动演示

HTML

<div class="panel">
  <div class="panel-stage"></div>
  <a href="#" class="panel-tab">Open <span>▼</span></a>
</div>	

JavaScript

$('.panel-tab').on('click', function(event){
  event.preventDefault();
  $('.panel-stage').slideToggle('slow', function(event){
    if($(this).is(':visible')){
      $('.panel-tab').html('Close ▲');
    } else {
      $('.panel-tab').html('Open ▼');
    }
  });
});	

未展开效果:

滑动演示

展开效果

滑动演示

Tabs演示

HTML

<ul class="tabs-nav">
  <li><a href="#tab-1">Features</a></li>
  <li><a href="#tab-2">Details</a></li>
</ul>
<div class="tabs-stage">
  <div id="tab-1">...</div>
  <div id="tab-2">...</div>
</div>	

JavaScript

// Show the first tab by default
$('.tabs-stage div').hide();
$('.tabs-stage div:first').show();
$('.tabs-nav li:first').addClass('tab-active');
// Change tab class and display content
$('.tabs-nav a').on('click', function(event){
  event.preventDefault();
  $('.tabs-nav li').removeClass('tab-active');
  $(this).parent().addClass('tab-active');
  $('.tabs-stage div').hide();
  $($(this).attr('href')).show();
});	

tab演示

扩展阅读

  1. JavaScript For Cats
  2. A Re-introduction to JavaScript via Mozilla Developer Network
  3. 30 Days to Learn jQuery
  4. Google Hosted Libraries
  5. jQuery Documentation
  6. jQuery Fundamentals via Bocoup
  7. jQuery UI

上一课下一课(正在整理之中)

译者手语:整个翻译依照原文线路进行,并在翻译过程略加了个人对技术的理解。如果翻译有不对之处,还烦请同行朋友指点。谢谢!

关于清风

常用昵称 “清风”。标准的前端工程师,应用级关注css,侧重javascript。对javascript基础有较好理解,关注重点javascript中的mvc应用,异步编程及前端自动化测试等。

如需转载烦请注明出处:

英文原文:http://learn.shayhowe.com/advanced-html-css/jquery

中文译文:http://www.w3cplus.com/css/advanced-html-css-lesson6-jquery.html

CSS制作面包屑

$
0
0
CSS制作面包屑

面包屑是Web中常见的一个元件,早前在《CSS3制作Breadcrumbs》和案例《css3面包屑设计》使用CSS3制作了各式各样的面包屑效果,今天@逆天使用上原始的CSS配合一定的标签制作了一款兼容多浏览器的面包屑案例,感兴趣的可以看看:

demodownload

HTML

<ul class="clearfix">
  <li>面包屑一<em></em><i></i></li>
  <li class="current">面包屑二<em></em><i></i></li>
  <li>面包屑二<em></em><i></i></li>
</ul>

CSS

.demo{
  width:600px; 
  margin:100px auto; 
  background:#f0f0f0; 
  height:32px; 
  overflow:hidden; 
  line-height:32px; 
  position:relative;
}
.demo li{
  float:left; 
  width:200px; 
  text-align:center; 
  position:relative; 
  z-index:2; 
  font-weight:bold; 
  font-size:14px;
}
.demo li em{
  position:absolute; 
  right:-24px; 
  top:-8px; 
  width:0; 
  height:0; 
  line-height:0; 
  border-width:24px 0 24px 24px; 
  border-color:transparent  transparent transparent #fff; 
  border-style:dashed dashed dashed solid;
}
.demo li i{
  position:absolute; 
  right:-16px; 
  top:0; 
  width:0; 
  height:0; 
  line-height:0; 
  border-width:16px 0 16px 16px; 
  border-color:transparent  transparent transparent #f0f0f0; 
  border-style:dashed dashed dashed solid;
}
.demo li.current{
  background:#f60; 
  color:#fff; 
  z-index:1;
}
.demo li.current i{
  border-color:transparent  transparent transparent #f60;
}

demodownload

如需转载,烦请注明出处:http://www.w3cplus.com/demo/css-create-breadcrumb.html

太棒了!border 打造钻石王老五,发家致富值得学习!

$
0
0
钻石一枚

今天给大家带来钻石图形demo,主要使用了 border 。请用 Chrome 浏览器浏览,祝大家每年争取一个非洲之星(钻石名)。

demo

HTML CODE

<div class="base">
    <div class="angle"></div><!-- end angle -->
</div><!-- end base -->

CSS CODE

.base{
	border:64px solid;
	border-color:#67B2E4 transparent rgba(105,185,238,.50) transparent;
	height:0;
	margin:20% auto;
	position:relative;
	width:0;
}

.base:after,
.base:before,
.angle,
.angle:after,
.angle:before,
.shade{
	height:0;
	position:absolute;
	width:0;
}
.base:after,
.base:before,
.angle:after,
.angle:before{
	content:"";
	z-index:-1;
}

.base:after{
	border-bottom:64px solid #3498DB;
	border-left:64px solid transparent;
	border-right:64px solid transparent;
	left:-128px;
	bottom:0;
	width:128px;
}

.base:before{
	border:128px solid;
	border-color:#A3D1EF transparent transparent;
	left:-128px;
}

.angle{
	border:64px solid;
	border-color:transparent transparent rgba(255,255,255,.40);
	left:-64px;
	top:-128px;
	z-index:0;
}
.angle:after{
	border:128px solid;
	border-color:rgba(54,156,224,.50) transparent transparent;
	left:-128px;
	top:64px;
	-webkit-transform:scaleX(.5);
}
.angle:before{
	background-color:#000;
	border-radius:50%;
	-webkit-filter:blur(12px);
	height:12px;
	left:-32px;
	top:192px;
	-webkit-transform:scaleY(.5);
	width:64px;
	z-index:-1;
}

BEM思想之彻底弄清BEM语法

$
0
0

特别声明:此篇文章由David根据的英文文章原名《MindBEMding – getting your head ’round BEM syntax》进行翻译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax以及作者相关信息

——作者:

——译者:David

人们问我最多的问题之一是在CSS类名中“--”和“__”是什么意思?它们的出现是源于BEMNicolas Gallagher...

BEM的意思就是块(block)、元素(element)、修饰符(modifier),是由Yandex团队提出的一种前端命名方法论。这种巧妙的命名方法让你的CSS类对其他开发者来说更加透明而且更有意义。BEM命名约定更加严格,而且包含更多的信息,它们用于一个团队开发一个耗时的大项目。

重要的是要注意,我使用的基于BEM的命名方式是经过Nicolas Gallagher修改过的。这篇文章中介绍的这种命名技术并不是原始的BEM,但却是一个我更喜欢的改进版。无论实际使用了什么样的符号,它们其实都是基于同样的BEM原则。

命名约定的模式如下:

.block{}
.block__element{}
.block--modifier{}	
  • .block 代表了更高级别的抽象或组件。
  • .block__element 代表.block的后代,用于形成一个完整的.block的整体。
  • .block--modifier代表.block的不同状态或不同版本。

之所以使用两个连字符和下划线而不是一个,是为了让你自己的块可以用单个连字符来界定,如:

.site-search{} /* 块 */
.site-search__field{} /* 元素 */
.site-search--full{} /* 修饰符 */	

BEM的关键是光凭名字就可以告诉其他开发者某个标记是用来干什么的。通过浏览HTML代码中的class属性,你就能够明白模块之间是如何关联的:有一些仅仅是组件,有一些则是这些组件的子孙或者是元素,还有一些是组件的其他形态或者是修饰符。我们用一个类比/模型来思考一下下面的这些元素是怎么关联的:

.person{}
.person__hand{}
.person--female{}
.person--female__hand{}
.person__hand--left{}	

顶级块是‘person’,它拥有一些元素,如‘hand’。一个人也会有其他形态,比如女性,这种形态进而也会拥有它自己的元素。下面我们把他们写成‘常规’CSS:

.person{}
.hand{}
.female{}
.female-hand{}
.left-hand{}	

这些‘常规’CSS都是有意义的,但是它们之间却有些脱节。就拿.female来说,是指女性人类还是某种雌性的动物?还有.hand,是在说一只钟表的指针(译注:英文中hand有指针的意思)?还是一只正在玩纸牌的手?使用BEM我们可以获得更多的描述和更加清晰的结构,单单通过我们代码中的命名就能知道元素之间的关联。BEM真是强大。

再来看一个之前用‘常规’方式命名的.site-search的例子:

<form class="site-search  full">
  <input type="text" class="field">
  <input type="Submit" value ="Search" class="button">
</form>	

这些CSS类名真是太不精确了,并不能告诉我们足够的信息。尽管我们可以用它们来完成工作,但它们确实非常含糊不清。用BEM记号法就会是下面这个样子:

<form class="site-search  site-search--full">
  <input type="text" class="site-search__field">
  <input type="Submit" value ="Search" class="site-search__button">
</form>	

我们能清晰地看到有个叫.site-search的块,他内部是一个叫.site-search__field的元素。并且.site-search还有另外一种形态叫.site-search--full。

我们再来举个例子……

如果你熟悉OOCSS(面向对象CSS),那么你对media对象一定也不陌生。用BEM的方式,media对象就会是下面这个样子:

.media{}
.media__img{}
.media__img--rev{}
.media__body{}	

从这种CSS的写法上我们就已经知道.media__img 和.media__body一定是位于.media内部的,而且.media__img--rev是.media__img的另一种形态。仅仅通过CSS选择器的名字我们就能获取到以上全部信息。

BEM的另外一个好处是针对下面这种情况:

<div class="media">
  <img src="logo.png" alt="Foo Corp logo" class="img-rev">
  <div class="body">
    <h3 class="alpha">Welcome to Foo Corp</h3>
    <p class="lede">Foo Corp is the best, seriously!</p>
  </div>
</div>	

光从上面的代码来看,我们根本不明白.media和.alpha两个class彼此之间是如何相互关联的?同样我们也无从知晓.body和.lede之间,或者.img-rev 和.media之间各是什么关系?从这段HTML(除非你对那个media对象非常了解)中我们也不知道这个组件是由什么组成的和它还有什么其他的形态。如果我们用BEM方式重写这段代码:

<div class="media">
  <img src="logo.png" alt="Foo Corp logo" class="media__img--rev">
  <div class="media__body">
    <h3 class="alpha">Welcome to Foo Corp</h3>
    <p class="lede">Foo Corp is the best, seriously!</p>
  </div>
</div>	

我们立马就能明白.media是一个块,.media__img--rev是一个加了修饰符的.media__img的变体,它是属于.media的元素。而.media__body是一个尚未被改变过的也是属于.media的元素。所有以上这些信息都通过它们的class名称就能明白,由此看来BEM确实非常实用。

丑极了!

通常人们会认为BEM这种写法难看。我敢说,如果你仅仅是因为这种代码看上去不怎么好看而羞于使用它,那么你将错失最重要的东西。除非使用BEM让代码增加了不必要的维护困难,或者这么做确实让代码更难读了,那么你在使用它之前就要三思而行了。但是,如果只是“看起来有点怪”而事实上是一种有效的手段,那么我们在开发之前当然应该充分考虑它。

是,BEM看上去确实怪怪的,但是它的好处远远超过它外观上的那点瑕疵。

BEM可能看上去有点滑稽,而且有可能导致我们输入更长的文本(大部分编辑器都有自动补全功能,而且gzip压缩将会让我们消除对文件体积的担忧),但是它依旧强大。

用还是不用BEM?

我在我的所有项目中都使用了BEM记号法,因为它的有效性已经被它自己一次又一次地证明。我也极力地建议别人使用BEM,因为它让所有东西之间的联系变得更加紧密,让团队甚至是你个人都能够更加容易地维护代码。

然而,当你真正使用BEM的时候,重要的是,请记住你没必要真的在每个地方都用上它。比如:

.caps{ text-transform:uppercase; }	

这条CSS不属于任何一个BEM范畴,它仅仅只是一条单独的样式。

另一个没有使用BEM的例子是:

.site-logo{}	

这是一个logo,我们可以把它写成BEM格式,像下面这样:

.header{}
.header__logo{}	

但我们没必要这么做。使用BEM的诀窍是,你要知道什么时候哪些东西是应该写成BEM格式的。因为某些东西确实是位于一个块的内部,但这并不意味它就是BEM中所说的元素。这个例子中,网站logo完全是恰巧在.header的内部,它也有可能在侧边栏或是页脚里面。一个元素的范围可能开始于任何上下文,因此你要确定只在你需要用到BEM的地方你才使用它。再看一个例子:

<div class="content">
  <h1 class="content__headline">Lorem ipsum dolor...</h1>
</div>	

在这个例子里,我们也许仅仅只需要另一个class,可以叫它.headline;它的样式取决于它是如何被层叠的,因为它在.content的内部;或者它只是恰巧在.content的内部。如果它是后者(即恰巧在.content的内部,而不总是在)我们就不需要使用BEM。

然而,一切都有可能潜在地用到BEM。我们再来看一下.site-logo的例子,想象一下我们想要给网站增加一点圣诞节的气氛,所以我们想有一个圣诞版的logo。于是我们有了下面的代码:

.site-logo{}
.site-logo--xmas{}	

我们可以通过使用--修饰符来快速地为我们的代码构建另一个版本。

BEM最难的部分之一是明确作用域是从哪开始和到哪结束的,以及什么时候使用(不使用)它。随着接触的多了,有了经验积累,你慢慢就会知道怎么用,这些问题也不再是问题。

结束语

所以,BEM(或BEM的变体)是一个非常有用,强大,简单的命名约定,以至于让你的前端代码更容易阅读和理解,更容易协作,更容易控制,更加健壮和明确而且更加严密。

尽管BEM看上去多少有点奇怪,但是无论什么项目,它对前端开发者都是一个巨有价值的工具。

扩展阅读

  1. Yandex BEM/OOCSS
  2. Template Components
  3. BEM: The Block, Element, Modifier Approach To Decoupling HTML And CSS
  4. CSS methodology and frameworks
  5. Maintainable CSS with BEM
  6. A New Front-End Methodology: BEM
  7. What is BEM?
  8. Rubbing Noses With inuit.css
  9. SMACSS: Notes On Usage
  10. What is BEM?
  11. The History of BEM
  12. Start developing BEM with project-stub

——大漠

译者手语:整个翻译依照原文线路进行,并在翻译过程略加了个人对技术的理解。如果翻译有不对之处,还烦请同行朋友指点。谢谢!

关于David

2009年开始接触前端开发,2011年组建创业团队——[五维互动],2012年团队被“收编”并更名[创影互动],遂只身来上海发展,现在就职于FlipScript。欢迎交流共勉:腾讯微博

如需转载烦请注明出处:

英文原文:http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/

中文译文:http://www.w3cplus.com/css/mindbemding-getting-your-head-round-bem-syntax.html

太棒了!前端开发十大神器,你值得拥有!

$
0
0
前端开发十大神器

今天为大家推荐10款前端开发神器,对神器的介绍很少,因为只有真正用好才能体会到法力。

 

Notepad++
一款轻量级的开发工具,跨系统跨语言平台。支持数十种语言的语法高亮,支持词条联想,支持插件扩展,官网提供中文版。是我个人目前用的开发工具。
Sublime Text 2
一款轻量级的开发工具,跨系统跨语言平台。有自己的文字渲染引擎,支持定制和扩展,是目前最流行的开发工具。官方不提供中文版,但是可以下载到第三方的中文版,建议用官方英文版。
gVim
从 vi 到 vim,一直到 gVim,是资质最老的跨平台开发工具。gVim 是针对 windows 推出的 vim 版本,功能非常强大,支持纯命令模式操作,熟练以后鼠标可以拿去压桌脚了。但是需要一点的学习成本,推荐想挑战一下的童鞋使用。这也是目前前辈们使用最多的 IDE,啥语言版都有。
EditPlus
拥有无限制的撤消与重做、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。支持很多语言,官方提供中文版,小巧实用,可取代记事本。
UltraEdit
号称能满足一些编辑需求的IDE,打开速度也超快。甚至能处理汇编语言,支持很多语言的语法高亮,有中文版提供。
Notepad2
应该是最小的支持多语法高亮的IDE了,支持中文,完全可替代掉记事本,功能足够,小巧玲珑。
WebStorm
性价比最好的前端开发IDE了,拥有最新最全的智能联想功能,很强大的定制和扩展性。不过没有中文版本,但是学JS的童鞋绝对要用过啊。
Aptana Studio 3
有点类似 Eclipse,是一款功能强大的 IDE,但是早期版本中文支持不太好,定制和扩展性非常强大,好像还有中文语言包。
TextMate
Mac OS 版本的 IDE,目前没有 windows 版本。功能强劲,易学易用。
Espresso
Mac OS 版本的 IDE,目前没有 windows 版本。流行度高,扩展性强。

sublime text常用插件

$
0
0

关于sublime text这个编辑器,大家多少也有所耳闻了,甚至正在使用,而我从editplus转向sublime text已经有一段时间了,经过一段时间学习与使用,也有点个人的心得,下面跟大家分享下常用的一些插件。

1、插件的安装方法

第一种:用package control

这个是用来管理插件的,必备啊,安装package control的步骤:

  1. 按Ctrl+`调出console
  2. 在底部代码行贴上以下代码并回车:
    import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp) if not os.path.exists(ipp) else None;open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace('','%20')).read())
  3. 重启sublime text,如果在Perferences->package settings中看到package control这一项,则安装成功。如果不成功,那就只好自己手动安装喽:http://wbond.net/sublime_packages/package_control/installation

package control安装完之后,以后我们要安装插件直接Ctrl+Shift+P调出命令面板,输入install package这个命令,然后输入我们需要安装的插件回车或者在下面的列表中选择就ok了,一般安装完毕都会自动打开该插件的readme文档。

第二种:手动安装,如果上面的那个能搞定,这个手动的不了解也罢哈哈

在菜单栏中找到 preferences > packages,点击打开就是sublime text插件的地址了,把你下载的插件直接丢进来就ok了(以后你要是忘了哪个插件的快捷键,也可以这样找到你的那个插件文件包,阅读下readme)

2、常用插件

以下所有插件,都是通过package control来安装的,Ctrl+Shift+P调出命令面板,输入install package命令,你就可以看到sublime text的所有插件了,另外如果要卸载一个插件的命令是remove package。强烈建议大家安装完每个插件后都看下它readme,那里面有使用方法。所有的插件文件夹都可以通过菜单栏的Preferences》Browse packages找到,如果你忘记了某个插件的使用方法,也可以从这里进去找到该插件的readme看看

Emmet

Emmet作为zen coding的升级版,对于前端来说,可是必备插件,如果你对它还不太熟悉,可以在其官网(http://docs.emmet.io/)上看下具体的视频教程。当然在sublime text中emmet的快捷键有些改变,按tab或ctrl+e都可以扩展,具体的其他快捷键改变请参看emmet sublime

另:安装emmet升级版本之后,会弹出一个package control message里面有一些它升级的信息,建议大家读下。里面有一条说是升级后tab键太强大了,把自定义的一些代码片段都给覆盖了,所以如果你自定义了一些自己的代码片段,你就得处理下了。原文如下“By default, Emmet allows you to expand abbreviations with Tab key in HTML, XML, HAML and CSS/SASS/LESS/Stylus documents. As a side effect, you can’t use some of your ST2 snippets.”。我目前的处理方法是在Emmet.sublime-settings文件中直接禁用了tab键,设置disable_completions为true。关于emmet的第二点经验就是如何更改emmet里面的代码,在emmet插件里面找到snippets.json这个文件,打开看看,找到你想修改的,如"d:ib": "display:inline-block;"这条我们把后面修改成"display:inline-block;*display:inline;*zoom:1;"

liveReload

顾名思义,就是自动更新,而不需要我们编辑一次就手动刷新一下。

安装好liveReload插件之后,就是给浏览器安装相应的插件了,在readme中可以找到谷歌和火狐的插件地址分别为:Google Chrome extensionFirefox 4 extension

yui compressor

yui压缩,可以压缩js和css文件,运行于java环境,安装之后,同样可以参考readme文件,就知道它是怎么用的了

Search in Browser

这个就是直接在编辑器中直接快捷键“ctrl+alt+g”,打开谷歌搜索,当然还有其他的,可以参考readme文件,同样还有一个插件stackoverflow search,可以直接在stackoverflow里面搜索你的问题。

nettuts fetch

这个插件能让你快速的取得远程文件或文件夹,而不用再去翻找。使用方法很简单,总共有三个命令,分别是fetch:file,fetch:manage和fetch:package如下图:

 

先使用fetch:magnage管理我们以后需要获取的文件或文件夹,如下图:

最后我们就可以使用fetch:file获取文件,fetch:package获取文件夹

详细教程:nettuts fetch使用教程

代码版本控制等

TortoiseSVN

git

gist(线上代码片段)

格式化代码

cssFormat

jsFormat

Tag(可以格式化html,有注释的时候表现不是很理想)

其他插件

bracket highlighter(括弧高亮显示)

Goto-CSS-Declaration(跳转到css文件该class的声明处,注意对应的css文件要同时打开才行)

jquery package,scss(支持scss的语法高亮)

Clipboard History(剪切板历史,可以保存多个复制信息,按下ctrl+alt+v,可以选择历史剪切板)

3、不建议再用的插件

prefixr(css3前缀)

placeholders(填充一些文本内容)。

之所以不建议使用上面两个是因为用emmet就可以解决了,所以说emmet是多么的强大啊

2013年03月23日第3次W3cplus在线YY交流会

$
0
0
活动时间: 
2013-03-23 20:00
活动地点: 
YY(48250153)
分享主题:
九九——《前端如何使用github》
D姐——《Responsive小试牛刀》
活动安排
开场介绍
主题分享
问题交流
下一期分享话题征询
参与方式
不限人数,通过YY语音加入w3cplus分享频道
PPT下载
正在上传中....
录音下载
活动后提供下载

2013年优秀jQuery插件连载(四期)

$
0
0
2013年优秀jQuery插件连载(四期)

在第四期jQuery插件的分享中,你会发现与以前的略有不同之处,是的。在今天推荐的十个插件中,我们有好几个是中国程序员写的,比如说说zTree写的树形结构效果插件,有SimpleTas插件还有茶哥、小生写的SimpleUI等,而且这回我将正美同学的Mass Framework(这个可不是jQuery插件)也放上来,希望大家喜欢。当然除了这几个中文插之外,大家还可以看到图表js库、分步(新手引导)插件库等。详细的请继续往下阅读。

1、boxSlider

boxSlider

带有响应式功能的jQuery幻灯片插件。

2、Swipejs

Swipejs

一款触摸式幻灯片插件。

3、Chart.js

Chart.js

一款制作图表的强大插件。

4、SimpleTabs

SimpleTabs

SimpleTabs是国内开发者写的一款jQuery多功能选项卡插件,适用于各种选项卡,幻灯片、产品展示等模块。

5、zTree

zTree

zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。

6、jQuery Nested

jQuery Nested

创建一个动态的,可嵌套的网格布局插件。

7、Intro.js

Intro.js

创建一个动态的,可嵌套的网格布局插件。

8、SimpleUI

SimpleUI

SimpleUI是蓝面小生半盏凉茶合力开发的一个基于jQuery的组件库。包含了常见的web组件,适用于开发web2.0的应用程序与小型网站。

9、Mass Framework

Mass Framework

一个模块化,以大模块开发为目标,jQuery式的框架。里面优先应用了大量HTML5新API,估计除了个别手机专属框架外,没有像它如此大范围应用了。这一来可以大大减少框架的体积,二来大幅提高运行效率。

10、BookBlock

BookBlock

一个jQuery插件,将创建类似于一个小册子,你可以通过翻阅书本一样阅读。

2013年优秀jQuery插件:

  1. 2013年优秀jQuery插件连载(一期)
  2. 2013年优秀jQuery插件连载(二期)
  3. 2013年优秀jQuery插件连载(三期)

如需转载,烦请注明出处:http://www.w3cplus.com/source/best-jquery-plus-2013-part4.html

自定义Bootstrap

$
0
0

特别声明:此篇文章由Sunnylost根据的英文文章原名《Customizing Bootstrap》进行翻译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://coding.smashingmagazine.com/2013/03/12/customizing-bootstrap以及作者相关信息

——作者:

——译者:Sunnylost

自从一年前Twitter推出Bootstrap以来,它的推广程度就像火箭发射一样节节攀升。这个广受欢迎的CSS框架为众多网站提供了响应式网格系统,预定义样式的组件与JavaScript插件。

Bootstrap的设计初衷之一就是实用。当你要新建网站时,Bootstrap绝对是一个节约时间的利器,以至于许多庞大的组织比如NBC,NASA还有白宫都选择了它。它甚至还可以让我们之中不懂设计的人也能做出很体面的网站。

举个例子,要想将下面左边的默认按钮变成右面漂亮的按钮,你只需要增加两个class:btn与btn-primary。

bootstrap

浏览器默认按钮(左)与Bootstrap按钮(右)

但如果你公司的logo使用了不一样的蓝色阴影呢?别担心,你没有必要坚持使用默认主题。这篇文章将介绍几种自定义Bootstrap的方法来满足你的需求,不管你是想微调一个按钮,还是一个完整的主题。

bootstrap

来自于Bootswatch的三种Bootstrap主题

使用CSS覆盖

最直接的方式是用CSS覆盖掉Bootstrap的默认样式。可以通过针对Bootstrap中使用的class编写你自己的样式来实现。比如说,可以通过增加以下代码来使你的按钮变得更圆滑:

.btn {
  -webkit-border-radius: 20px;
  -moz-border-radius: 20px;
  border-radius: 20px;
}	

bootstrap

一个增加了border radius的自定义的Bootstrap按钮。

为了能够成功覆盖,记得在Bootstrap的声明之后增加你的代码。

这种方法的优点在于它几乎不会改变你的工作流程。即便使用了Bootstrap,你还是需要自己的样式表来使框架适合你的内容。你可能没有意识到,Bootstrap自己的网站还依赖了除Bootstrap框架外的上千行样式。

但是对于更彻底的修改(比如重新设计导航栏)或是非局部的修改(比如修改适用于整个网站的高亮颜色)来说,这样东一块,西一块的覆盖样式更像是一种打补丁式的解决方案。而且你的新样式要添加到Bootstrap的默认样式表里,让本已经100 KB的文件越发臃肿。如果你不仅仅想要做一些覆盖,那就要考虑一种更具扩展性的方法了。

生成一个自定义构建

一个替代方案是创建一个彻底的自定义构建。借助官方的生成器,你可以将框架内使用的关键变量设置成自己需要的值,比如说 @linkColor,@navbarHeight 和 @baseFontFamily。点击生成器页面底部的大按钮就可以下载最终的样式表。你甚至还能对框架包含的组件进行挑选,这样能够减少文件的体积。

bootstrap

一些能够在官方生成器中设置的变量。

网上还有一些第三方生成器。与官方版本不同,它们提供了调整变量时的动态预览效果。Bootswatchr网站使用变量来组织,而StyleBootstrap则使用组件。BootTheme添加了扔骰子特性来随机设置值。如果幸运女神不站在你这边,Lavish能够根据你提供的任何图片来生成一个主题,PaintStrap则是根据已有的配色方案来生成。

深入挖掘LESS

即便有上百个能定制的变量,你可能还是会发现生成器有诸多限制。或者你不想在浏览器中完成这样的工作,因为这会减少与你的工作流程的集成度。无论处于哪种情况,都是时候深入研究下Bootstrap的源码了。

获得源码

作为一个开源项目,Bootstrap的源码可以自由(ZIP格式)下载

打开源码,你会发现Bootstrap的样式是用LESS而不是CSS写的。LESS 是一种动态样式表语言,相比于CSS,它支持多种优秀特性,包括选择器嵌套,创建变量(就像在上面生成器中使用的)。一旦写完,你可以选择将LESS代码预先或在运行时编译成 CSS。如果你喜欢 Sass,可以使用这个适用于Sass的Bootstrap

在 less 文件夹中,你会看到许多按照组件来划分的 LESS 文件。

bootstrap

组成Bootstrap源码的 LESS 文件

留意以下这些文件:

bootstrap.less:
这个是核心文件。它用来引入其他文件,最终由你来编译它。
reset.less:
始终是最先引入的文件。
variables.less 和 mixins.less:
这两个文件总是同时出现,因为其他文件都依赖于它们。前一个文件包含了在生成器网站上使用的相同的变量。
utilities.less
这个文件总是最后引入,你可以把想要覆盖的类写到这里。

打开 LESS 文件,看看Bootstrap是如何为每个组件设置样式的。举例来说,在buttons.less中,.btn-large类的规则是这样的:

.btn-large {
  padding: 9px 14px;
  font-size: @baseFontSize + 2px;
  line-height: normal;
  .border-radius(5px);
}	

如你所见,代码看起来和 CSS 非常像。但它也确实有一些 LESS 独有的功能。在font-size声明中,变量@baseFontSize——在variables.less中声明——与一个加法操作组合起来计算得到结果。在mixins.less中定义的.border-radius混合能够自动帮你处理浏览器前缀。

你可以通过修改这些 LESS 文件来实现自定义。先从variables.less中的值开始,然后再尝试下其余源码中的样式。好好享受吧!

安装LESS

在你做完修改并准备查看效果时,你需要把文件编译成 CSS。要完成这个工作,你需要先安装 LESS。关于安装有许多方式;对于初学者来说,我建议使用一个叫做LESS.app的客户端程序。如果你喜欢命令行,可以选择安装包含Node Package Manager(NPM)的Node.js。然后执行如下命令:

npm install less	

当安装结束后,你可以这样来编译bootstrap.less:

lessc bootstrap.less > bootstrap.css	

如果想编译压缩版本,使用这个命令:

lessc --compress bootstrap.less > bootstrap.min.css	

无论你使用哪种方式编译,编译的目标只能是bootstrap.less,而并非其他任何文件。

模块化你的修改

你可能注意到了上面方法的缺陷。那就是你修改的内容与原始文件纠缠在了一起。结果当Bootstrap不可避免的因为修复bug或增加新功能而进行升级时,你根本不可能将自定义的内容更新到新的版本上。

为了避免出现这个问题,你需要模块化你的修改。这是我为Bootswatch制作主题时的采取的方法。

首先,我下载了Bootstrap的源代码,把它的名字修改为bootstrap后原封不动的放好。我并没有对它包含的文件进行任何修改,而是新创建了一个单独的文件夹,取名为custom,含有如下三个文件:

custom-variables.less:
我从Bootstrap源码中复制了一份variables.less并在这份拷贝中修改变量。
custom-other.less:
这个文件中包含了那些无法定义成变量的自定义内容。
custom-bootstrap.less
这是新的「核心」文件。我们将把它编译成CSS。与原始的 LESS文件一样,它使用下面的命令来引入上面那两个自定义文件:
@import "../bootstrap/less/bootstrap.less";
@import "custom-variables.less";
@import "custom-other.less";
@import "../bootstrap/less/utilities.less";	

修改内容被分隔开后,你可以很轻松的升级到Bootstrap的新版本。只需要将旧bootstrap文件夹替换,再重新编译即可。

我为这种方法创建了一个叫做swatchmaker的样板文件。它还包含了其他内容,例如测试页面和更新Bootstrap到最新版的命令,当修改被保存时执行自动编译,还可以重置你自定义的内容。

技巧与技术

下面介绍一些在你自定义Bootstrap时可能会用到的技巧与技术。

了解Bootstrap。

阅读官方文档,熟悉所有组件,深入学习源码。如果你经常需要自定义Bootstrap,在这些内容上的投入所带来的回报将会物超所值。

先从变量开始
当你使用生成器或者直接编辑源码时,先从它们支持的变量开始修改。你会发现它们就已经能够满足你的需求了。改变导航栏与基本颜色就是一个重大起步。
选择调色板
考虑网站的配色方案,特别是主要与次要颜色。这里有些优秀资源能够提供帮助。你在调色板上选择好后,可以将这些颜色设置为变量。这样就不会看到散落在代码中的十六进制颜色值了。
增加一些资源
纹理背景自定义字体能让世界变得大不相同。对于Web字体,你可以在代码中的任何位置加入@import语句,LESS会自动将生成的CSS代码提升到顶部。我比较喜欢将这些内容放到custom-other.less文件的顶部。
使用alpha透明
当增加box-shadow和text-shadow这样的效果时,颜色使用RGBa来定义,为旧的浏览器做好降级处理,始终使用这样的值。这会为你的组件增加内聚性。
匹配选择器
当要覆盖一个类时,试着采用Bootstrap中使用的选择器。这会保证你的类与原始类保持同步,还避免了不断升级的特异性战争。记住一点,特异性相同的情况下,后写的选择器生效。经过上面的模块化处理,你的自定义内容将始终覆盖掉原始内容。
封装你的代码
记住 LESS 允许嵌套选择器。利用这个特性来封装每个组件。我发现这对于保持代码的整洁与可读性有很大帮助。两段效果相同的代码里,不要这么使用...
.navbar .brand {
  color: @white;
}

.navbar .nav > li > a {
  color: @grayLighter;
}	

试试这个:

.navbar {
  .brand {
  	color: @white;
  }

  .nav > li > a {
   	color: @grayLighter;
  }
}	
善用混合(mixin)
LESS提供了便利的混合,比如说lighten()与darken()。Bootstrap在mixins.less中定义的内容也归你支配。并且不要忘记,你可以随时创建自己的混合。
配合实例学习
看看其他人是如何自定义Bootstrap的。例如,我所有的主题代码都能从GitHub获取到。

你想添加自己的技巧吗?请分享在下面的留言中吧。

总结

如果你注重性能——通常来说应该如此——那么你最好在一个更轻量级的基础实现自己的解决方案

但如果你的首要目标是尽快上线你的网站,或者前端开发并非你的强项,那么Twitter Bootstrap可能正适合你。许多人就是因为Bootstrap的人气而纷纷转向这个阵营。

鉴于Bootstrap在Web上的大量应用,你要学习它的所有优点并让其为你所用。

扩展阅读

  1. How to Build a Website Using Twitter Bootstrap and SASS – Part 1
  2. How to Build a Website Using Twitter Bootstrap and SASS – Part 2
  3. GETTING STARTED WITH BOOTSTRAP: PART 1 OF SERIES
  4. GETTING STARTED WITH BOOTSTRAP: PART 2 OF SERIES
  5. GETTING STARTED WITH BOOTSTRAP: PART 3 OF SERIES
  6. How to Customize Twitter Bootstrap’s Design in a Rails app
  7. How to use Twitter Bootstrap to Create a Responsive Website Design
  8. Twitter BootStrap:前端框架利器
  9. CSS——Bootstrap From Twitter
  10. Mark Otto(马克奥托)的BootStrap.less
  11. Preboot
  12. Twitter Bootstrap Tutorials
  13. The Best BootStrap Resources

——大漠

译者手语:整个翻译依照原文线路进行,并在翻译过程略加了个人对技术的理解。如果翻译有不对之处,还烦请同行朋友指点。谢谢!

关于Sunnylost

08年开始自学java,09年加入北漂行列,从事Java Web工作,出于对JavaScript的喜爱,在2011年以外包身份进入新浪微博从事JS开发,目前就职于一淘。由于工作关系,逐步接触CSS,开始完善自身的前端技能。欢迎随时关注我:新浪微博

如需转载烦请注明出处:

英文原文:http://coding.smashingmagazine.com/2013/03/12/customizing-bootstrap/

中文译文:http://www.w3cplus.com/css/customizing-bootstrap.html

jQuery Mobile教程-基础篇-如何开始?

$
0
0

特别申明:本系列教程由小春撰写

不管你是对jQuery Mobile一无所知或者对它有很大的兴趣在研究过程中,还是已经开始用它做项目的开发者,欢迎加入这个jqm学习之旅

1、什么是jQuery Mobile?

按照官方的描述:针对智能手机和平板、做过触摸优化的web框架。截止到编写这个教程的时候,目前最新的版本是1.3.0。

2、jQuery Mobile推崇什么?

其实很多读者应该多用过jquery,它推崇的是"write less,do more",那jQuery Mobile呢?

答案是一定的,而且更加针对移动设备。

3、相关资源依赖?

jQuery Mobile首先依赖jquery框架提供的接口处理相关操作

自身依赖两个主要部分:
js:jquery-mobile.js
css:jquery-mobile.css

如果你对版本意识不关心的话,我们可以直接去官网CDN下载最新的zip包,这里就不做过多的介绍了,我们直入主题吧。

4、我们先来看一下采用jQuery Mobile开发的一个最简单的页面结构是怎样的?

<!doctype html>
<html lang="zh-hans">
<head>
<meta charset="UTF-8">
<title>jQuery Mobile教程-基础篇-页面基本结构</title>
<!-- 设置meta viewport start -->
<meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1">
<!-- 设置meta viewport end -->

<!-- jqm依赖文件start -->
<link rel="stylesheet" href="../css/jquery.mobile-1.1.0.css" />
<script src="../js/jquery.js" type="text/javascript"></script>
<script src="../js/jquery.mobile-1.1.0.js" type="text/javascript"></script>
<!-- jqm依赖文件end -->
</head>
<body>
  <!-- 页面容器start -->
  <div data-role="page">
	
	<!-- 页眉部分start -->
	<div data-role="header">
	   <h1>我是header部分</h1>
	</div>
	<!-- 页眉部分end -->
	
	<!-- content部分start -->
	<div data-role="content">
		<p>jQuery Mobile教程-基础篇-我是content部分</p>
	</div>
	<!-- content部分end -->
	
	<!-- 页脚部分start -->
	<div data-role="footer">
		<h3>我是footer部分</h3>
	</div>
	<!-- 页脚部分end -->
	
  </div> 
  <!-- 页面容器end -->
  
</body>
</html>

如下图:

页面基本结构

接下来我们会从使用频率这个维度来给大家介绍几个常见的组件,让大家快速地熟悉基本的用法。

demo

PS:
1、有问题欢迎在官网留言或者直接联系我:@zhangyaochun_fe
2、可以在官网的问答频道进行提问,我们会尽快回复
3、谢谢您对w3cplusjquery mobile系列教程的关注

关于小春

专注于前端开发,对ECMA底层有深入探究和兴趣…热衷新技术深入调研学习,涉足移动前端许久,爱好分享交流…个人博客focus-fe。欢迎随时关注我:新浪微博

Viewing all 1557 articles
Browse latest View live