Zen Coding is a faster way to write HTML using a CSS style selector syntax, and you can now use Zen Coding in Visual Studio via the Web Essentials 2012 plug in (v1.7).  Zen Coding was introduced by Sergey Chikuyonok in 2009 (according to Smashing Magazine) and has been updated over time to become a great way to write monotonous HTML much more efficiently.
Special thanks  to Mads Kristensen and his team at Microsoft for adding Zen Coding to Visual Studio 2012 via Web Essentials 2012 (along with many other great features).

Quick Reference

Here is a quick list of the Zen Coding features that are now supported in Visual Studio 2012 via the Web Essentials 2012 plug in

  • # creates an id attribute
  • . creates a class attribute
  • [ ] creates a custom attribute
  • > creates a child element
  • + creates a sibling element
  • ^ climbs up
  • * is element multiplication. This creates the same thing n number of times
  • $ is replaced with an incremental number
  • $$ is used for numbers with padding
  • { } creates text in an element
What can you do? Here is an example:

ul[data-bind="foreach:customers"]>li*4>span{Caption $$}+input[type=text data-bind="value:$$"]

  • Caption 01
  • Caption 02
  • Caption 03
  • Caption 04
Let's take a closer look at the different symbols used

ID and Class Attributes: # and .

You can create an element and assign it an id or class attribute using CSS style syntax.

div#contentRegion.address

Custom Attributes: [ ]

You can create any attribute the square bracket syntax.

div[title]

Or create multiple attributes and fill in values

input[placeholder="Name" type="text"]


Child Elements: >

Create an element and then a child element inside of it. In this example I create a div with the id=menu that contains a span with a class=item and a blank title attribute

div#menu>span.item[title]


Sibling Elements: +

You can create a sibling element easily too.

footer>div>a+input

Climbing Elements: ^

The > operator descends into element hierarchy while the ^ climbs up the hierarchy. You can also climb multiple levels. For example: use 1 ^ to climb 1 level or use 4 ^ to climb 4 levels.

footer>div>a+input^^p

Multiplication: *

Create n number of elements

ul>li*4>span

Item Numbering: $

When using the multiplication to create n number of elements, you can add an incremental number to them using the $. Notice that using multiple $ operators (ex: $$) creates pads the numbers with 0's.

section>article.item$$*4

Text: } {

You can enter text values inside of elements, without changing the parent context.

ul>li*4>span{Caption $$}

  • Caption 01
  • Caption 02
  • Caption 03
  • Caption 04
This does not change the parent context, so when specifying the sibling to follow the text, the sibling element will actually follow the element prior to the text. That's why the example below creates an anchor tag next to the span tag.

ul>li*4>span{Caption $$}+a{click me}


Combining Them all

You can combine multiple features together which allows you to write some pretty cool HTML much faster. You can even use this to create some Knockout.js bindings for templates, and then just change the property names.

section[data-bind="foreach:customers"]>div*4>input[type="text" data-bind="text:$$"]

Grouping: ( )

Grouping is a powerful feature of Zen Coding that allows you to create complex expressions. It is not yet in Web Essentials 2012, but I assume it will come in the near future. If it does arrive, you would be able to create entire sections of a DOM very easily.

div>(header>div)+section>(ul>li*2>a)+footer>(div>span)

As you can see, this would make it quite simple to create large sections of HTML with just a few keystrokes.

Lorem Ipsum Generator

(Added Dec 5, 2012)

You can now generate Lorem Ipsum directly in the HTML editor. Type "lorem" and hit TAB and a 30 word Lorem Ipsum text is inserted. Type "lorem10" and a 10 word Lorem Ipsum text is inserted.

ul>li*5>lorem3

References