Dans cet article, nous présenterons une nouvelle façon de développer rapidement du HTML et du CSS en utilisant une syntaxe qui imite les sélecteurs CSS. Il est développé par Sergey Chikuyonok.
Combien de temps passez-vous à écrire du code HTML (y compris toutes les balises, attributs, guillemets, accolades, etc.) ? Si votre éditeur propose des astuces de code, il vous sera plus facile d'écrire, mais même dans ce cas, vous devrez quand même taper beaucoup de code manuellement.
En termes de JavaScript, lorsque l'on souhaite mettre un élément précis sur une page, on va rencontrer le même problème, il faut écrire beaucoup de code, ce qui devient difficile à maintenir et à réutiliser. Des frameworks JavaScript ont vu le jour et ont également introduit des moteurs de sélection CSS. Maintenant, vous pouvez utiliser des expressions CSS simples pour obtenir des éléments DOM, ce qui est plutôt cool.
Mais et si vous pouviez non seulement disposer et positionner les éléments à l'aide de sélecteurs CSS, mais aussi générer du code ? Par exemple, si vous écrivez ainsi :
注意:该视频原版位于Vimeo,但是要看的话需要翻[和谐]墙先,地址在这里:http://vimeo.com/7405114,上面的视频是我费尽周折从Vimeo上下载下来上传到优酷的,上传后质量竟被大打折扣了,囧。youtube上也有一份视频,是基于Aptana的演示,一样很精彩:http://www.youtube.com/watch?v=ug84Ypwqfzk。PS:貌似youtube要比Vimeo翻[和谐]墙容易些,不过如何翻[和谐]墙不在本站讨论范围。
如果你想跳转到详细介绍和使用指南,请看一下演示页面并立刻下载你适用的插件:
现在让我们看一下这些工具是如何工作的吧。
展开缩写功能将类似CSS的选择器转换为XHTML代码。术语“缩写”可能会有点儿难以理解。为什么不直接称之为“CSS选择器”呢?嗯,首要原因是语义化:“选择器”意为选择一些东西,但是在这里我们事实上是生成 一些东西,是写一个长代码的较短的替代。其次,它只是使用真实的CSS选择器语法的一个小的子集,并添加了一些新的操作符。
这里是一个支持的属性和操作符的列表:
Comme vous pouvez le constater, vous savez déjà utiliser Zen Coding : juste un simple faux sélecteur CSS (euh, désolé pour "l'abréviation"), comme ça...
Zen Coding comporte deux types d'éléments principaux : les "extraits" et les "abréviations". Les fragments sont des morceaux de code aléatoires et les abréviations sont des définitions de balises. Avec les extraits de code, vous pouvez écrire le code de votre choix, et il sera affiché dans le format que vous écrivez ; mais vous devez le formater manuellement (en utilisant n et pour les sauts de ligne et l'indentation) et placer la variable ${child} dans Go to Where. vous souhaitez que les éléments enfants soient affichés, comme ceci : cc:ie6>style. Si vous n'utilisez pas la variable ${child}, l'élément enfant sera affiché après le dans l'extrait de code.
Avec les abréviations, vous devez écrire des définitions de balisage, et la syntaxe est très importante. Habituellement, vous devez écrire une simple balise avec tous les attributs par défaut, tels que : . Lorsque Zen Coding est chargé, il analyse une définition de balise en un objet spécifique qui décrit le nom de la balise, ses attributs (y compris leur ordre) et si la balise est vide. Ainsi, si vous écrivez , vous indiquez à Zen Coding que la balise doit être vide, puis le comportement "développer l'abréviation" utilisera des règles spécifiques avant de l'afficher.
Pour les extraits et les abréviations, vous pouvez ajouter un symbole de pipe, qui indique à Zen Coding où positionner le curseur lorsque l'abréviation est développée. Par défaut, Zen Coding place le curseur entre les guillemets sur les attributs vides et entre les balises d'ouverture et de fermeture.
Voici donc une explication de ce qui se passe lorsque vous écrivez une abréviation et invoquez l’action « Développer l’abréviation ». Premièrement, il sépare une abréviation complète en éléments indépendants : ainsi div>a sera divisé en éléments div et a, tout en conservant bien sûr leur relation. Ensuite, pour chaque élément, l’analyseur recherche la définition d’abord dans l’extrait, puis dans l’abréviation. S'il n'est pas trouvé, le nom de l'élément sera utilisé comme nouvelle balise, et l'identifiant et la classe définis dans l'abréviation y seront ajoutés. Par exemple, si vous écrivez mytag#example et que l'analyseur ne trouve pas de définition de mytag dans le fragment ou l'abréviation, il affichera
Nous avons créé beaucoup de abréviations et extraits de code CSS par défaut et HTML. Vous constaterez qu’apprendre à utiliser Zen Coding peut augmenter votre productivité.
Une autre tâche très courante pour les codeurs HTML consiste à trouver des paires de balises pour un élément. Par exemple, vous souhaitez sélectionner l'intégralité de la balise
Malheureusement, de nombreux outils de développement modernes ne disposent pas de cette fonctionnalité. Ensuite, j'ai décidé d'écrire mon propre matcher de paires de balises dans le cadre de Zen Coding. Il est encore en version bêta et présente quelques problèmes, mais il fonctionne plutôt bien et rapidement. Au lieu de parcourir l'intégralité du document (comme le fait un comparateur de paires de balises HTML normal), il recherche les balises pertinentes à partir de la position actuelle du curseur. Cela le rend très rapide et sans contexte : cela fonctionne même avec cet extrait de code JavaScript :
' + j + ' | '; >}
Il s'agit d'une fonctionnalité vraiment intéressante qui combine les fonctionnalités des correspondances d'abréviations et de paires de balises en une seule. À quelle fréquence avez-vous découvert que vous deviez ajouter un élément wrapper pour corriger un bug du navigateur ? Ou avez-vous besoin d'ajouter une décoration, telle qu'une image d'arrière-plan ou une bordure à un contenu au niveau du bloc ? Vous devez écrire la balise d'ouverture, interrompre temporairement votre code, trouver le point pertinent puis fermer la balise. C'est là que « envelopper avec des abréviations » peut vous aider.
La fonctionnalité est assez simple : elle vous demande de saisir une abréviation, puis effectue l'action appropriée "développer l'abréviation" et place le texte souhaité à l'intérieur du dernier élément de votre abréviation. Si vous ne sélectionnez aucun texte, il démarre le comparateur de paires de balises et utilise les résultats. Il sait également où se trouve votre curseur : à l’intérieur du contenu de la balise ou entre les balises d’ouverture et de fermeture. Selon sa position, il enveloppe le contenu de la balise ou la balise elle-même.
Le retour à la ligne d'abréviation introduit une syntaxe d'abréviation spécifique pour renvoyer à la ligne des lignes individuelles. Accédez simplement au nombre qui suit l'opérateur de multiplication, par exemple : ul#nav>li*>a. Lorsque Zen Coding trouve un élément qui utilise un multiplicateur non défini, il le traite comme un élément répétitif : il l'affichera autant de fois qu'il y a de lignes dans votre chapitre, et ajoutera le contenu de chaque ligne. Placez-le à l'intérieur du dernier élément enfant de l'élément répété.
Si vous placez cette abréviation div#header>ul#navigation>li.item$*>a>span en dehors de ce texte :你可以看到,Zen Coding是一个强大的文本处理工具。
这些快捷键是可以自定义的。
你已经学到很多关于Zen Coding如何工作以及它是如何使你的编码更容易了。现在为什么不自己尝试一下呢?因为Zen Coding是用纯JavaScript开发并迁移到Python,它甚至可以用于浏览器内部,这令它成为引入到CMS的首选。
Zen Coding并不依赖某个特定的编辑器。它是一个只处理文本的出色的组件:它获取文本、做一些处理并放回新的文本(或索引,用于标签匹配)。Zen Coding由JavaScript和Python编写,所以它实际上可以运行于任何平台。在Windows,你可以运行JavaScript版本,而Mac和Linux 分支可以使用Python版。
如果让你的编辑器支持Zen Coding,你需要写一个特定的可以在你的编辑器和Zen Coding之间转换数据的插件。问题是一个编辑器可能不会完整的支持Zen Coding因为它本身的插件系统。比如,TextMate通过使用脚本输出替换当前行很容的就支持了“展开缩写”功能,但是它不能处理标签对匹配因为没有标准的方法请求TextMate来选择内容。
Aptana是我主要的开发环境,它使用一个JavaScript版本的Zen Coding。它也包含很多其它的我用于日常工作的工具,所以任何一个新的Zen Coding版本都将会首先对Aptana可用,然后部署到Python并兼容其它的编辑器。
Coda和Espresso 插件被杰出的Text Editor Actions (TEA) 平台支持,由Ian Beck开发。原始的源代码在GitHub上,但我还是制作了我自己的分支以整合Zen Coding的特性。
很多尝试过Zen Coding的人都说它改变了他们写页面的方式。当然还有很多事情要做,还有很多的编辑器需要被支持以及一些文档要写。请浏览现在的文档 以及源代码以寻找你的问题的答案。希望你喜欢Zen Coding!
遗憾的是, 本文原作者并没有说明zen coding的具体用法,神飞认为有必要做以下简要的说明。这里就以Aptana/Eclipse和Dreamweaver为例,其它编辑器平台暂不描述,如有疑问可以在评论中与前端观察的网友交流。
由于Aptana本身就是基于Eclipse的,所以,Zen Coding也是支持Eclipse的,只是需要一个EclipseMonkey插件的支持,Aptana已经封装了这个插件,所以如果你使用Aptana,下面的第一步可以跳过。
Remarque :
http://www.boxcn.net/shared/c71z7x7sfe
PS : Le plug-in officiel DW a été mis à jour
de le télécharger depuis le site officiel . Les nouveaux plugins ajoutent plus de fonctionnalités. MISE À JOUR @ 23-12-2009
Recommandation spéciale: L'étudiant Haoqing a mis les abréviations en pratique et a résumé de nombreux cas d'utilisation intéressants. Je recommande à tout le monde d'aller apprendre. Présentation originale de l'auteur :
et son Twitter. Texte original de : http://www.qianduan.net/zen-coding-a-new-way-to-write-html-code.html