
Увлекло меня это дело — описание гитарных аккордов, по научному — аппликатура. Начало было положено в предыдущим топике про запись аккордов и теперь получило своё развитие.
Я учел пожелания и сделал новую версию.
Теперь метка прижимаемой струны — это точка • (& bull;) вместо © (& copy;).
В прошлой версии не было поддержки отображения баррэ — теперь есть и большое, и малое баррэ.
Добавлена поддержка Google Chrome.
В данной версии номера пальцев прижимающих струну по-прежнему отображаются рядом с меткой. Вариант с использованием шрифта позволяющего отображать метки с цифрой внутри возможно будет, но сейчас могу предложить только такой вариант.
Баррэ
Получилось сделать баррэ. Теперь можно описывать аккорды как с большим, так и малым баррэ.
Как это выглядит в Html
Привожу часть кода, аккорд с малым баррэ.
<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>Большое баррэ</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>Малое баррэ</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">I-C# или 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>Обозначения</dt>
<dd class="bull"><b>•</b><sup>1</sup><span>
— место прижатия струны и номер пальца</span></dd>
<dd><small>0</small><span> — звучит неприжатая струна</span></dd>
<dd><small>X</small><span> — струна не звучит</span></dd>
<dd><span><strong>I.</strong></span>
— номер лада на котором зажимается баррэ</span></dd>
<dd><span><strong>[</strong></span>
— обозначение баррэ (зажимается 1 пальцем)</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 оформление
Для поддержки Google Chrome внесены изменения. Для IE7 тоже внесены изменения (см. после основного CSS).
Кусочек добавленного кода, показано только то что добавлено:
div.accord .grif ul li span,
div.accord .grif ul li small {
/* код пропущен */
height: 10px; /* для FF, Opera, Chrome */
}
/* File: style.css */
/* Accord class */
div.accord {
width: 162px;
margin: 1em;
}
div.accord.w4 {
width: 212px;
}
div.accord .accord-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 { /* Номер лада для баррэ */
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 { /* Оформляем гриф */
height: 7.4em;
overflow: hidden;
}
div.accord div.grif .porojek { /* Оформляем порожек между ладами */
height: 6.4em;
float: left;
margin: .4em 0 0 0;
border-left: 2px solid black;
}
div.accord div.grif .porojek.verx { /* Оформляем первый порожек, он больше в ширину */
border-left: 4px solid black;
}
div.accord .grif ul { /* одно поле под аккорд */
width: 46px;
float: left;
margin-top: -2px; /* поле подтягиваем вверх */
}
div.accord .grif ul li {
text-indent: 14px; /* посередине поля расположим метку прижимаемой струны */
border-bottom: 1px dotted gray; /* рисуем струну */
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; /* расположим метку посередине струны */
height: 10px; /* для FF, Opera, Chrome */
}
div.accord .grif ul li small {
font-size: 1em;
float: right; /* сдвинем по правой границе */
top: -10px; /* подъем до уровня отметки пальца */
left: -12px; /* расположим метку посередине струны */
}
div.accord .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 { /* отметки перед аккордом о звучании струн */
width: 12px; /* ширина полоски с метками */
float: left; /* перед грифом */
line-height: 11px; /* такая же как для струн */
}
div.accord ul li {
border-bottom: 1px solid transparent; /* тут струны не рисуем */
}
Пришлось для IE7 сделать изменение и выделить их в отдельный стиль ie7.css, подключаемый с помощью условных коментариев.
/* File: ie7.css */
div.accord .grif ul li span,
div.accord .grif ul li small {
height: auto;
}
Остальной код можно посмотреть на странице с примером.
Вариация с цифрами внутри меток

Еще один пример — цифра обозначающая номер пальца находиться внутри метки. Сделал по комментарию tenshi.
Для него изменена одна из частей CSS:
<blockquote>
div.accord .grif ul li small {/* номер пальца */
font-size: 1em;
float: right; /* сдвинем по правой границе */
top: -.55em; /* подъем до уровня отметки пальца */
left: -23px; /* расположим метку посередине струны */
color: #fff;
}
При желании номера цифр можно сделать жирными, добавив в
<blockquote>
div.accord .grif ul li small {
...
font-weight: bold;
}
Но тут кроется один камень — при печати цифры внутри меток в разных браузерах отображаются по разному. FF — видимо делает весь текст черным, в IE происходит непонятное преобразование и цифры видны каким-то серым цветом, Opera — отображает как раз белым и их видно нормально.
Как решить эту проблему пока не знаю.
Протестировано в IE7, FF3, Opera 9, Chrome
Думаю теперь сделать простенький веб-сервис для публикации аккордов, как maxmyd посоветовал.
UPD от 23.03.2009: Сделана поддржка Google Chrome

