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
- Zen Coding page
- Follow Zen C0ding on twitter
- Introduction to Zen Coding from Smashing Magazine in Nov 2009
- Web Essentials 2012 for Visual Studio 2012