HTML + CSS guitar chords (now with barre)

This thing fascinated me - the description of guitar chords, according to the scientific - fingering. The beginning was made in the previous topic about recording chords and now has developed.
I took into account the wishes and made a new version.
Now the label of the pressed string is a point • (*) instead of © (& copy;).
In the previous version there was no support for displaying a barre - now there is a large and a small barre.
Added support for Google Chrome.
In this version, the numbers of the fingers holding the string are still displayed next to the mark. A variant using a font that allows displaying labels with a number inside may be possible, but now I can only offer this option.
Barre
It turned out to make a barre. Now you can describe chords with both large and small barre.
How it looks in HTML
Here is a piece of code, a chord with a small barre.
<div id = "Dm" class = "accord float-l">
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>0</span> </li>
<li><span>X</span> </li>
<li><span>X</span> </li>
</ul>
<div class = "grif">
<div class = "porojek verx"> </div>
<ul>
<li><span>•</span><small>1</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>•</span><small>2</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<ul>
<li> <span> </span> </li>
<li><span>•</span><small>3</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<div class = "clearfix"> </div>
</div>
<div class = "accord-name"> Dm </div>
</div> <! - / accord Dm ->
<div id = "Am" class = "accord float-l">
<ul>
<li><span>0</span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>0</span> </li>
<li><span>X</span> </li>
</ul>
<div class = "grif">
<div class = "porojek verx"> </div>
<ul>
<li> <span> </span> </li>
<li><span>•</span><small>1</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>•</span><small>3</small> </li>
<li><span>•</span><small>2</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<div class = "clearfix"> </div>
</div>
<div class = "accord-name"> Am </div>
</div> <! - / accord Am ->
<div id = "F" class = "accord float-l">
<p> Big Barre </p>
<div class = "nomer-lada"> <ol type = "I" start = "1"> <li> </li></ol> </div>
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "grif">
<div class = "porojek verx"> </div>
<div class = "barre"> </div>
<ul>
<li><span>•</span><small>1</small> </li>
<li><span>•</span><small>1</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>•</span><small>1</small> </li>
</ul>
<div class = "porojek"> </div>
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>•</span><small>2</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>•</span><small>4</small> </li>
<li><span>•</span><small>3</small> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<div class = "clearfix"> </div>
</div>
<div class = "accord-name"> F </div>
</div> <! - / accord F ->
<div id = "Db" class = "accord float-l w4">
<p> Small Barre </p>
<div class = "nomer-lada"> <ol type = "I" start = "1"> <li> </li></ol> </div>
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>X</span> </li>
</ul>
<div class = "grif">
<div class = "porojek verx"> </div>
<div class = "barre na3"> </div>
<ul>
<li><span>•</span><small>1</small> </li>
<li> <span> </span> </li>
<li><span>•</span><small>1</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<ul>
<li> <span> </span> </li>
<li><span>•</span><small>2</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>•</span><small>3</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>•</span><small>4</small> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<div class = "clearfix"> </div>
</div>
<div class = "accord-name"> IC # or Db </div>
</div> <! - / accord Db ->
<div id = "H" class = "accord float-l">
<div class = "nomer-lada"> <ol type = "I" start = "2"> <li> </li></ol> </div>
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>X</span> </li>
</ul>
<div class = "grif">
<div class = "porojek"> </div>
<div class = "barre"> </div>
<ul>
<li><span>•</span><small>1</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>•</span><small>1</small> </li>
<li><span>•</span><small>1</small> </li>
</ul>
<div class = "porojek"> </div>
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<ul>
<li> <span> </span> </li>
<li><span>•</span><small>4</small> </li>
<li><span>•</span><small>3</small> </li>
<li><span>•</span><small>2</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<div class = "clearfix"> </div>
</div>
<div class = "accord-name"> H </div>
</div> <! - / accord H ->
<div id = "Hm" class = "accord float-l">
<div class = "nomer-lada"> <ol type = "I" start = "2"> <li> </li></ol> </div>
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>X</span> </li>
</ul>
<div class = "grif">
<div class = "porojek"> </div>
<div class = "barre na5"> </div>
<ul>
<li><span>•</span><small>1</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>•</span><small>1</small> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<ul>
<li> <span> </span> </li>
<li><span>•</span><small>2</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<ul>
<li> <span> </span> </li>
<li> <span> </span> </li>
<li><span>•</span><small>4</small> </li>
<li><span>•</span><small>3</small> </li>
<li> <span> </span> </li>
<li> <span> </span> </li>
</ul>
<div class = "porojek"> </div>
<div class = "clearfix"> </div>
</div>
<div class = "accord-name"> Hm </div>
</div> <! - / accord Hm ->
<div class = "clearfix"> </div>
<dl>
<dt> Designations </dt>
<dd class = "bull"> <b> • </b> <sup> 1 </sup> <span>
- place of pressing the string and finger number </span> </dd>
<dd><small>0</small> <span> - an unpressed string sounds </span> </dd>
<dd><small>X</small> <span> - the string does not sound </span> </dd>
<dd><span><strong>I.</strong> </span>
- the fret number on which the barre is clamped </span> </dd>
<dd><span><strong>[</strong> </span>
- barre designation (clamped with 1 finger) </span> </dd>
</dl>
<p class = "float-r mar1-b"> <a href="http://r3code.habrahabr.ru/blog/53792/"> r3code.habrahabr.ru </a> </p>
</div> <! - / content ->
CSS layout
Changes have been made to support Google Chrome. Changes have also been made for IE7 (see after basic CSS).
A piece of the added code, only what is added is shown:
div.accord .grif ul li span,
div.accord .grif ul li small {
/ * code is skipped * /
height: 10px; / * for FF, Opera, Chrome * /
}
/ * File: style.css * /
/ * Accord class * /
div.accord {
width: 162px;
margin: 1em;
}
div.accord.w4 {
width: 212px;
}
div.accord .accord-name {/ * Chord name * /
text-align: center;
font-size: 1.4em;
font-weight: bold;
}
div.accord p {
text-align: center;
font-size: 1.2em;
}
div.accord .nomer-lada ol {/ * Barre fret number * /
width: 40px;
list-style-type: upper-roman;
margin: 0 0 0 22px;
padding: 0;
list-style-position: inside;
}
div.accord .nomer-lada ol li {
text-align: center;
font-size: 1.2em;
font-weight: bold;
}
div.accord div.grif {/ * Making the bar * /
height: 7.4em;
overflow: hidden;
}
div.accord div.grif .porojek {/ * Making the sills between frets * /
height: 6.4em;
float: left;
margin: .4em 0 0 0;
border-left: 2px solid black;
}
div.accord div.grif .porojek.verx {/ * We make the first nut, it is more wide * /
border-left: 4px solid black;
}
div.accord .grif ul {/ * one field per chord * /
width: 46px;
float: left;
margin-top: -2px; / * pull the field up * /
}
div.accord .grif ul li {
text-indent: 14px; / * in the middle of the field place the label of the pressed string * /
border-bottom: 1px dotted gray; / * draw a string * /
line-height: 10px! important;
color: # 000;
}
div.accord .grif ul li span,
div.accord .grif ul li small {
display: block;
line-height: 10px! important;
font-size: 3.5em;
position: relative;
bottom: -5px; / * place the mark in the middle of the string * /
height: 10px; / * for FF, Opera, Chrome * /
}
div.accord .grif ul li small {
font-size: 1em;
float: right; / * move along the right border * /
top: -10px; / * rise to the level of the finger mark * /
left: -12px; / * place the mark in the middle of the string * /
}
div.accord .barre {/ * barre * /
border-left: 2px solid # 888;
border-top: 2px solid # 888;
border-bottom: 2px solid # 888;
float: left;
position: relative;
left: 15px;
width: 3px;
margin-left: -5px;
height: 90%;
z-index: 1;
}
div.accord .barre.na2 {
height: 30%;
}
div.accord .barre.na3 {
height: 45%;
}
div.accord .barre.na4 {
height: 60%;
}
div.accord .barre.na5 {
height: 75%;
}
div.accord ul {/ * notes before the chord about the sound of strings * /
width: 12px; / * strip width with marks * /
float: left; / * before the bar * /
line-height: 11px; / * same as for strings * /
}
div.accord ul li {
border-bottom: 1px solid transparent; / * we don’t draw strings here * /
}
I had to make a change for IE7 and select them in a separate style ie7.css, connected using conditional comments.
/ * File: ie7.css * /
div.accord .grif ul li span,
div.accord .grif ul li small {
height: auto;
}
The rest of the code can be viewed on the example page .
Variation with numbers inside labels

Another example is a digit indicating the number of a finger located inside the mark. Did according to the comment tenshi .
One of the CSS parts has been changed for it:
<blockquote>
div.accord .grif ul li small {/ * finger number * /
font-size: 1em;
float: right; / * move along the right border * /
top: -.55em; / * rise to the level of the finger mark * /
left: -23px; / * place the mark in the middle of the string * /
color: #fff;
}
If desired, the numbers can be made bold by adding to
<blockquote>
div.accord .grif ul li small {
...
font-weight: bold;
}
But here there is one stone - when printing numbers inside labels in different browsers are displayed differently. FF - apparently makes all the text black, an incomprehensible conversion occurs in IE and the numbers are visible in some gray color, Opera - it displays just white and they are visible normally.
I don’t know how to solve this problem yet.
Tested in IE7, FF3, Opera 9, Chrome
I think now to make a simple web service for publishing chords, as maxmyd advised.
UPD 03/23/2009: Support for Google Chrome is made
