乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Zen Coding: 一種快速編寫HTML/CSS代碼的方法

       看見就非常 2012-07-21

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

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

      在JavaScript方面,當(dāng)我們想要在一個頁面上獲取某個特定的元素時,我們就會遇到同樣的問題,我們必須寫很多代碼,這就變得難于維護和重用。JavaScript框架應(yīng)運而生,它們同時引入了CSS選擇器引擎?,F(xiàn)在,你可以使用簡單的CSS表達式來獲取DOM元素,這相當(dāng)酷。

      但是,如果你不僅僅可以用CSS的選擇器布局和定位元素,還能生成代碼會怎么樣?比如,如果你這樣寫:

      div#content>h1+p

      …然后就可以看到這樣的輸出:

      <div id="content">
      <h1></h1>
      <p></p>
      </div>

      有些迷惑吧?今天,我將向你介紹Zen Coding,一組用于快速HTML和CSS編碼的工具。最初由Vadim Makeev在2009年4月提出(文章為俄語),由鄙人(也就是我)開發(fā)了數(shù)月并最終達到比較成熟的狀態(tài)。Zen Coding由兩個核心組件組成:一個縮寫擴展器(縮寫為像CSS一樣的選擇器)和上下文無關(guān)的HTML標(biāo)簽對匹配器??匆幌逻@個演示視頻來看一下它們能為你做些什么。

      注意:該視頻原版位于Vimeo,但是要看的話需要翻[和諧]墻先,地址在這里:http:///7405114,上面的視頻是我費盡周折從Vimeo上下載下來上傳到優(yōu)酷的,上傳后質(zhì)量竟被大打折扣了,囧。youtube上也有一份視頻,是基于Aptana的演示,一樣很精彩:http://www./watch?v=ug84Ypwqfzk。PS:貌似youtube要比Vimeo翻[和諧]墻容易些,不過如何翻[和諧]墻不在本站討論范圍。

      如果你想跳轉(zhuǎn)到詳細(xì)介紹和使用指南,請看一下演示頁面并立刻下載你適用的插件:

      Demo

      下載(完全支持)

      下載(部分支持,只支持“展開縮寫”)

      現(xiàn)在讓我們看一下這些工具是如何工作的吧。

      展開縮寫

      展開縮寫功能將類似CSS的選擇器轉(zhuǎn)換為XHTML代碼。術(shù)語“縮寫”可能會有點兒難以理解。為什么不直接稱之為“CSS選擇器”呢?嗯,首要原因是語義化:“選擇器”意為選擇一些東西,但是在這里我們事實上是生成 一些東西,是寫一個長代碼的較短的替代。其次,它只是使用真實的CSS選擇器語法的一個小的子集,并添加了一些新的操作符。

      這里是一個支持的屬性和操作符的列表:

      • E
        元素名稱(div, p);
      • E#id
        使用id的元素(div#content, p#intro, span#error);
      • E.class
        使用類的元素(div.header, p.error.critial). 你也可以聯(lián)合使用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);

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

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

      …然后調(diào)用”展開縮寫”行為。

      這里有兩個新增的操作符:元素倍增和條目編號。比如,如果你想生成5個<li>元素,你可以簡單的寫位li*5。它也將同樣重寫全部子代元素。如果你想寫4個<li>元素,每個里面都有一個<a>標(biāo)簽,你就可以簡單的寫為li*4>a,這樣會生成以下HTML代碼:

      1
      2
      3
      4
      
      <li><a href=""></a></li>
      <li><a href=""></a></li>
      <li><a href=""></a></li>
      <li><a href=""></a></li>

      最后一個——條目編號用于當(dāng)你想用索引標(biāo)記重復(fù)的元素的情況。假設(shè)你想生成class為item1、item2和item3的3個<div>元素。你可以寫成這樣的縮寫,div.item$*3:

      1
      2
      3
      
      <div class="item1"></div>
      <div class="item2"></div>
      <div class="item3"></div>

      只需在你想要索引出現(xiàn)的任何class或id屬性上添加一個美元符號即可,而且想要多少都可以。那么,這樣…

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

      會被轉(zhuǎn)換成為:

      1
      2
      3
      4
      5
      
      <div id="i1-test" class="class111"></div>
      <div id="i2-test" class="class222"></div>
      <div id="i3-test" class="class333"></div>
      <div id="i4-test" class="class444"></div>
      <div id="i5-test" class="class555"></div>

      你會看到,當(dāng)你寫a的縮寫的時候,輸出是<a href=”"></a>?;蛘?,如果你寫img,輸出就是<img src=”" alt=”" />。

      Zen Coding是如何知道什么時候應(yīng)該為生成的標(biāo)簽添加默認(rèn)的屬性或者跳過關(guān)閉標(biāo)簽的?有一個專門的文件,名為zen_settings.js描述了輸出元素。這是一個簡單的JSON文件,描述每種語言的縮寫(是的,你可以為不同的句法定義縮寫,比如HTML、XSL、CSS等)。通用的語言縮寫定義看起來就像這樣:

      1
      2
      3
      4
      5
      6
      7
      
      'html': { 'snippets': { 'cc:ie6': '<!--[if lte IE 6]>\n\t${child}|\n<![endif]-->',
      			...
      			},
      			  'abbreviations': { 'a': '<a href=""></a>', 'img': '<img src="" alt="" />',
      			...
      			}
      			}

      元素類型

      Zen Coding有兩個主要的元素類型:“片段(snippets)” 和 “縮寫(abbreviations)”。片段就是隨意的代碼碎片,而縮寫是標(biāo)簽定義。通過片段,你可以寫出你想要的任何代碼,它也會照你寫的格式輸出;但是你必須手動的格式化它(使用\n 和\t實現(xiàn)換行和縮進) 并將${child}變量放到你想要輸出子元素的地方,就像這樣:cc:ie6>style。如果你不使用${child}變量,子元素將會輸出于代碼片段的后面

      有了縮寫,您必須編寫標(biāo)記定義,而且語法是非常重要的。通常,你必須寫一個簡單的帶有所有默認(rèn)的屬性的標(biāo)簽,比如: <a href=”"></a>。當(dāng)Zen Coding被加載后,它會解析一個標(biāo)簽定義到一個描述該標(biāo)簽的名字、屬性(包括它們的順序)以及該標(biāo)簽是否為空的特定的對象中。所以,如果你寫<img src=”" alt=”" />,你會告訴Zen Coding這個標(biāo)簽必須是空的,然后“擴展縮寫”行為就會在輸出之前為它使用特定的規(guī)則。

      對于片段和縮寫,你可以添加一個管道符號,它告訴Zen Coding當(dāng)縮寫被展開的時候光標(biāo)會被定位到哪里。默認(rèn)的,Zen Coding 將光標(biāo)放在空屬性的引號中間以及開始和關(guān)閉標(biāo)簽的中間。

      例子

      那么,這里解釋一下當(dāng)你寫了一個縮寫并召喚“展開縮寫”行動時發(fā)生的事情。首先,它將一個完整的縮寫分開為獨立的元素:這樣div>a 會被分成div 和a 元素,當(dāng)然也會維持他們的關(guān)系。然后,每個元素,解析器先在代碼片段內(nèi)而后在縮寫中尋找定義。如果它找不到,將會使用元素的名字作為新的標(biāo)簽,并為其添加縮寫中定義的id和class。比如,如果你寫mytag#example,解析器在片段或縮寫中找不到mytag定義,它就會輸出<mytag id=”example”><mytag>。

      我們制作了很多默認(rèn)的CSSHTML縮寫和片段。你會發(fā)現(xiàn)學(xué)習(xí)使用Zen Coding可以增加你的生產(chǎn)力。

      HTML 標(biāo)簽對匹配器

      對于HTML編碼者的另一個非常常見的任務(wù)是尋找一個元素的標(biāo)簽對。例如你想選擇整個<div id=”content”>標(biāo)簽并將其移動到其它地方或者刪除它?;蛘哂锌赡苣阍趯ふ乙粋€關(guān)閉標(biāo)簽并想知道它屬于那個開始標(biāo)簽。

      不幸的是,很多現(xiàn)代開發(fā)工具在該功能方面有所欠缺。那么我就決定寫一個我自己的標(biāo)簽對匹配器作為Zen Coding的一部分。不過它依然在beta階段并尚存一些問題,但它可以工作的很不錯并很快。不是瀏覽整個文檔(像通常的那種HTML標(biāo)簽對匹配器的做法),它從光標(biāo)的當(dāng)前位置開始尋找相關(guān)的標(biāo)簽。這使得它非??觳⑶?em>上下文無關(guān):它甚至可以用于這段JavaScript代碼片段

      1
      2
      3
      4
      5
      6
      7
      
      var table = '<table>'; for (var i = 0; i < 3; i++) {
      	table += '<tr>'; for (var j = 0; j < 5; j++) {
      		table += '<td>' + j + '</td>';
      	}
      	table += '</tr>';
      }
      table += '</table>';

      使用縮寫包裹

      這真的是一個很酷的特性,它將縮寫和標(biāo)簽對匹配器的功能合并到一起了。你有多少才發(fā)現(xiàn)你需要添加一個包裹元素以修正一個瀏覽器bug?或者你需要添加一個裝飾,比如一個背景圖片或者邊框到一個塊級內(nèi)容?你必須寫開始標(biāo)簽,臨時打斷你的代碼,找到相關(guān)的點然后關(guān)閉標(biāo)簽。這就是“使用縮寫包裹”能幫助你的地方。

      該功能相當(dāng)簡單:它要求你輸入縮寫,然后執(zhí)行適當(dāng)?shù)摹罢归_縮寫”行動并將你期望的文本放到你縮寫的最后一個元素里面。如果你沒有選擇任何文本,它就會啟動標(biāo)簽對匹配器并使用結(jié)果。它同樣能搞清楚你的光標(biāo)的位置:標(biāo)簽的內(nèi)容里面或者是開始和關(guān)閉標(biāo)簽中間。依賴于它的位置,它會包裹標(biāo)簽的內(nèi)容或標(biāo)簽本身。

      縮寫包裹為包裹個別行引入了一個特定的縮寫句法。簡單跳轉(zhuǎn)到倍增操作符后面的數(shù)字,比如:ul#nav>li*>a。當(dāng)Zen Coding 發(fā)現(xiàn)一個使用未定義的倍增數(shù)的時候,它會將它作為一個重復(fù)元素:你的章節(jié)中有多少行,它就會輸出多少次,并將每行的內(nèi)容放到重復(fù)元素的最后一個子元素里面。

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

      1
      2
      3
      4
      5
      
      About Us
      Products
      News
      Blog
      Contact Up

      你將會得到以下結(jié)果:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      <div id="header">
      	<ul id="navigation">
      		<li class="item1"><a href=""><span>About Us</span></a></li>
      		<li class="item2"><a href=""><span>Products</span></a></li>
      		<li class="item3"><a href=""><span>News</span></a></li>
      		<li class="item4"><a href=""><span>Blog</span></a></li>
      		<li class="item5"><a href=""><span>Contact Up</span></a></li>
      	</ul>
      </div>

      你可以看到,Zen Coding是一個強大的文本處理工具。

      快捷鍵

      • Ctrl+,
        展開縮寫
      • Ctrl+M
        匹配對
      • Ctrl+H
        使用縮寫包括
      • Shift+Ctrl+M
        合并行
      • Ctrl+Shift+?
        上一個編輯點
      • Ctrl+Shift+?
        下一個編輯點
      • Ctrl+Shift+?
        定位匹配對

      這些快捷鍵是可以自定義的。

      在線演示

      你已經(jīng)學(xué)到很多關(guān)于Zen Coding如何工作以及它是如何使你的編碼更容易了?,F(xiàn)在為什么不自己嘗試一下呢?因為Zen Coding是用純JavaScript開發(fā)并遷移到Python,它甚至可以用于瀏覽器內(nèi)部,這令它成為引入到CMS的首選。

      支持的編輯器

      Zen Coding并不依賴某個特定的編輯器。它是一個只處理文本的出色的組件:它獲取文本、做一些處理并放回新的文本(或索引,用于標(biāo)簽匹配)。Zen Coding由JavaScript和Python編寫,所以它實際上可以運行于任何平臺。在Windows,你可以運行JavaScript版本,而Mac和Linux 分支可以使用Python版。

      如果讓你的編輯器支持Zen Coding,你需要寫一個特定的可以在你的編輯器和Zen Coding之間轉(zhuǎn)換數(shù)據(jù)的插件。問題是一個編輯器可能不會完整的支持Zen Coding因為它本身的插件系統(tǒng)。比如,TextMate通過使用腳本輸出替換當(dāng)前行很容的就支持了“展開縮寫”功能,但是它不能處理標(biāo)簽對匹配因為沒有標(biāo)準(zhǔn)的方法請求TextMate來選擇內(nèi)容。

      完全支持

      部分支持(只支持“展開縮寫”)

      Aptana是我主要的開發(fā)環(huán)境,它使用一個JavaScript版本的Zen Coding。它也包含很多其它的我用于日常工作的工具,所以任何一個新的Zen Coding版本都將會首先對Aptana可用,然后部署到Python并兼容其它的編輯器。

      Coda和Espresso 插件被杰出的Text Editor Actions (TEA) 平臺支持,由Ian Beck開發(fā)。原始的源代碼在GitHub上,但我還是制作了我自己的分支以整合Zen Coding的特性。

      總結(jié)

      很多嘗試過Zen Coding的人都說它改變了他們寫頁面的方式。當(dāng)然還有很多事情要做,還有很多的編輯器需要被支持以及一些文檔要寫。請瀏覽現(xiàn)在的文檔 以及源代碼以尋找你的問題的答案。希望你喜歡Zen Coding!

      附:Zen coding的具體用法

      遺憾的是, 本文原作者并沒有說明zen coding的具體用法,神飛認(rèn)為有必要做以下簡要的說明。這里就以Aptana/Eclipse和Dreamweaver為例,其它編輯器平臺暫不描述,如有疑問可以在評論中與前端觀察的網(wǎng)友交流。

      Aptana/Eclipse

      由于Aptana本身就是基于Eclipse的,所以,Zen Coding也是支持Eclipse的,只是需要一個EclipseMonkey插件的支持,Aptana已經(jīng)封裝了這個插件,所以如果你使用Aptana,下面的第一步可以跳過。

      1. 通過更新網(wǎng)站安裝EclipseMonkey: http://download./technology/dash/update(如果你使用Aptana,可跳過這一步)
      2. 在你的當(dāng)前工作去創(chuàng)建一個頂級的項目,給它命名,比如,就叫zencoding
      3. 在新創(chuàng)建的項目中創(chuàng)建scripts文件夾
      4. 解壓縮下載的ZIP插件包到該文件夾。項目結(jié)構(gòu)看起來就像這樣:

      5. 安裝之后,Aptana的菜單欄中的“腳本(Script)”菜單中將會出現(xiàn)Zen coding相關(guān)子菜單

      注意事項:

      • Aptana版的官方插件是基于MAC機的,如果你用的是Windows,需要手動更改快捷鍵(在每個文件頭部的注釋片段中更改)
      • 官方的文件編碼有點兒亂,修改官方j(luò)s的時候,請注意編碼問題,修改不當(dāng)會造成相關(guān)功能的丟失;

      DreamWeaver

      好消息是,現(xiàn)在已經(jīng)有了Zen coding for DreamWeaver插件,壞消息是,該插件支持的功能很少,只支持展開縮寫功能。而且默認(rèn)的快捷鍵是無效的。只能在“命令”菜單中點擊操作。另外,沒有測試該插件是不是只支持CS4版本。不過比較好的是,作者將本插件的源碼也放出了,你可以自定義一個Dreamweaver的插件。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多