首頁  >  文章  >  web前端  >  Zen Coding 快速編寫HTML/CSS程式碼的實作_經驗交流

Zen Coding 快速編寫HTML/CSS程式碼的實作_經驗交流

WBOY
WBOY原創
2016-05-16 12:04:061375瀏覽

在本文中我們將展示一種新的使用仿CSS選擇器的語法來快速開發HTML和CSS的方法。它由Sergey Chikuyonok開發。

你在寫HTML程式碼(包含所有標籤、屬性、引用、大括號等)上花多少時間?如果你的編輯器有程式碼提示功能,你寫的時候就會容易些,但即便如此你還是要手動敲入很多程式碼。

在JavaScript方面,當我們想要在一個頁面上取得某個特定的元素時,我們就會遇到同樣的問題,我們必須寫很多程式碼,這就變得難於維護和重用。 JavaScript框架應運而生,它們同時引進了CSS選擇器引擎。現在,你可以使用簡單的CSS表達式來取得DOM元素,這相當酷。

但是,如果你不只可以用CSS的選擇器佈局和定位元素,還能產生程式碼會怎麼樣?例如,如果你這樣寫:

複製程式碼 程式碼如下:

div#content>h1 p

…然後就可以看到這樣的輸出:
複製程式碼 程式碼如下:



上面的效果可以用dreamweaver,扩展下载地址 Zen Coding for Dreamweaver v.0.7 测试通过
有些迷惑吧?今天,我将向你介绍Zen Coding,一组用于快速HTML和CSS编码的工具。最初由Vadim Makeev在2009年4月提出(文章为俄语),由鄙人(也就是我)开发了数月并最终达到比较成熟的状态。Zen Coding由两个核心组件组成:一个缩写扩展器(缩写为像CSS一样的选择器)和上下文无关的HTML标签对匹配器。看一下这个演示视频来看一下它们能为你做些什么。


注意:该视频原版位于Vimeo,但是要看的话需要翻[和谐]墙先,地址在这里:http://vimeo.com/7405114,上面的视频是我费尽周折从Vimeo上下载下来上传到优酷的,上传后质量竟被大打折扣了,囧。youtube上也有一份视频,是基于Aptana的演示,一样很精彩:http://www.youtube.com/watch?v=ug84Ypwqfzk。PS:貌似youtube要比Vimeo翻[和谐]墙容易些,不过如何翻[和谐]墙不在本站讨论范围。

如果你想跳转到详细介绍和使用指南,请看一下演示页面并立刻下载你适用的插件:

Demo

下載(完全支援)

下載(部分支持,只支援「展開縮寫」)

現在讓我們來看看這些工具是如何運作的吧。

展開縮寫

展開縮寫功能將類似CSS的選擇器轉換為XHTML程式碼。術語「縮寫」可能有點難以理解。為什麼不直接稱之為「CSS選擇器」呢?嗯,首要原因是語義化:「選擇器」意為選擇一些東西,但是在這裡我們事實上是生成 一些東西,是寫一個長代碼的較短的替代。其次,它只是使用真實的CSS選擇器語法的一個小的子集,並且添加了一些新的操作符。

這裡是一個支援的屬性和操作符的列表:

  • E
    元素名稱(div, p);
  • E#id
    使用id的元素(div#content, p#intro, span#error);
  • E.class
    使用類別的元素(div.header, p.error.critial). 你也可以聯合使用class和idID: div#content.column.width;
  • E>N
    子代元素(div>p, div#footer>p>span);
  • E N
    兄弟元素(h1 p, div#header div#content div#footer);
  • E*N
    元素倍增(ul#nav>li*5>a);
  • E$*N
    條目編號 (ul#nav>li.item-$*5);

正如你能看到的,你已經知道如何使用Zen Coding了:只是些一個簡單的仿CSS選擇器(呃,“縮寫”抱歉),就像這樣…

複製程式碼 程式碼如下:

div#header>img.logo ul#nav>li*4>a

…然後呼叫」展開縮寫」行為。

這裡有兩個新增的運算元:元素倍增和條目編號。例如,如果你想產生5個
  • 元素,你可以簡單的寫位li*5。它也將同樣重寫全部子代元素。如果你想寫4個
  • 元素,每個裡面都有一個標籤,你就可以簡單的寫成li*4>a,這樣會產生以下HTML程式碼:
    複製程式碼 span> 程式碼如下:

  • phpcnlt /li>
  • 元素。你可以寫成這樣的縮寫,div.item$*3:
    複製程式碼 程式碼如下:




    複製程式碼 程式碼如下:

    div#i$-test. class$$$*5

    會轉換成:
    複製程式碼 程式碼如下:

    div>



    Zen Coding是如何知道什麼時候應該為產生的標籤添加預設的屬性或跳過關閉標籤的?有一個專門的文件,名為zen_settings .js描述了輸出元素。這是一個簡單的JSON文件,描述每種語言的縮寫(是的,你可以為不同的句法定義縮寫,例如HTML、XSL、CSS等)。通用的語言縮寫定義看起來像這樣:
    複製程式碼 程式碼如下:

    'html': { 'snippets': { 'cc:ie6': '',
    ...
    },
    'abbreviations': { 'a': '', 'img': '...
    }
    }

    元素类型

    Zen Coding有两个主要的元素类型:“片段(snippets)” 和 “缩写(abbreviations)”。片段就是随意的代码碎片,而缩写是标签定义。通过片段,你可以写出你想要的任何代码,它也会照你写的格式输出;但是你必须手动的格式化它(使用\n 和 实现换行和缩进) 并将${child}变量放到你想要输出子元素的地方,就像这样:cc:ie6>style。如果你不使用${child}变量,子元素将会输出于代码片段的后面

    有了缩写,您必须编写标记定义,而且语法是非常重要的。通常,你必须写一个简单的带有所有默认的属性的标签,比如: 。当Zen Coding被加载后,它会解析一个标签定义到一个描述该标签的名字、属性(包括它们的顺序)以及该标签是否为空的特定的对象中。所以,如果你写”",你会告诉Zen Coding这个标签必须是空的,然后“扩展缩写”行为就会在输出之前为它使用特定的规则。

    对于片段和缩写,你可以添加一个管道符号,它告诉Zen Coding当缩写被展开的时候光标会被定位到哪里。默认的,Zen Coding 将光标放在空属性的引号中间以及开始和关闭标签的中间。

    例子

    那么,这里解释一下当你写了一个缩写并召唤“展开缩写”行动时发生的事情。首先,它将一个完整的缩写分开为独立的元素:这样div>a 会被分成div 和a 元素,当然也会维持他们的关系。然后,每个元素,解析器先在代码片段内而后在缩写中寻找定义。如果它找不到,将会使用元素的名字作为新的标签,并为其添加缩写中定义的id和class。比如,如果你写mytag#example,解析器在片段或缩写中找不到mytag定义,它就会输出

    我们制作了很多默认的CSSHTML缩写和片段。你会发现学习使用Zen Coding可以增加你的生产力。

    HTML 标签对匹配器

    对于HTML编码者的另一个非常常见的任务是寻找一个元素的标签对。例如你想选择整个

    标签并将其移动到其它地方或者删除它。或者有可能你在寻找一个关闭标签并想知道它属于那个开始标签。

    不幸的是,許多現代開發工具在該功能方面有所欠缺。那我就決定寫一個我自己的標籤對匹配器作為Zen Coding的一部分。不過它依然在beta階段並尚存一些問題,但它可以運作的很不錯並且很快。不是瀏覽整個文件(像通常的那種HTML標籤對匹配器的做法),它從遊標的當前位置開始尋找相關的標籤。這使得它非常快且上下文無關:它甚至可以用於這段JavaScript程式碼片段

    複製程式碼程式碼如下:

    var table = ''; for (var i = 0; i table = ' '; for (var j = 0; j '; for (var j = 0; j '; for (var j = 0; j table = '';
    }
    table = 'phpcnlt/phpcn }
    table = '
    ' j '
    ';

    使用縮寫包裹

    這真的是一個很酷的特性,它將縮寫和標籤對匹配器的功能合併到一起了。你有多少才發現你需要添加一個包裹元素以修正一個瀏覽器bug?或者你需要添加一個裝飾,例如一個背景圖片或邊框到一個區塊級內容?你必須寫開始標籤,暫時打斷你的程式碼,找到相關的點然後關閉標籤。這就是「使用縮寫包裹」能幫助你的地方。

    該功能相當簡單:它要求你輸入縮寫,然後執行適當的「展開縮寫」行動並將你期望的文字放到你縮寫的最後一個元素裡面。如果你沒有選擇任何文本,它就會啟動標籤對匹配器並使用結果。它同樣能搞清楚你的​​遊標的位置:標籤的內容裡面或是開始和關閉標籤中間。依賴它的位置,它會包裹標籤的內容或標籤本身。

    縮寫包裹為包裹個別行引入了一個特定的縮寫句法。簡單跳到倍增操作符後面的數字,例如:ul#nav>li*>a。當Zen Coding 發現一個使用未定義的倍增數的時候,它會將它作為一個重複元素:你的章節中有多少行,它就會輸出多少次,並將每行的內容放到重複元素的最後一個子元素裡面。

    如果你在這段文字外麵包裹這段縮寫div#header>ul#navigation>li.item$*>a>span:

    複製程式碼 程式碼如下:

    About Us
    Products
    News
    Blog
    Contact Up

    你將會得到以下結果:
    複製程式碼程式碼如下:

  • 陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    上一篇:重設預設樣式 css reset下一篇:重設預設樣式 css reset

    相關文章

    看更多