webページに掲載するソースコードに行数表示を付けたい

webページ中のコード表示に行数表示を追加する方法をcssで作ってみました


今回実現できた機能は次の通り
webページでの表示について
コード部分をドラッグで範囲選択しても行数表示は含まない
1行が長いコードは横スクロールする
行数表示を画面内に残したまま横スクロールする

webページへの投稿作業について
ソースコード自体はできるだけコピペだけで済ませる


サンプルコード

2カラム方式とol li方式の2パターン作ってみたのですが、ol li方式はうまくいかず断念
 2カラム方式は行数部分が力業ではあるものの、ソースコピペで良く、行数表示を残したままの横スクロールも実現できたので、このブログではこちらの方式を採用します

せっかく作ったので、両方式のサンプルを掲載します

  1. 自作のCSS 2カラム方式
  2. html
    1.
    2.
    3.
    4.
    5.
    6.
    <div class="codebox">
        <div class="codeheader">タイトルなど</div>
        <pre class="coderows"><code>1.<br>2.</code></pre>
        <pre class="codetext"><code>ここにソースコードをコピペで貼り付け
        行数部分は力業</code></pre>
    </div>
    
    css
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.
    17.
    18.
    19.
    20.
    21.
    22.
    23.
    24.
    25.
    26.
    27.
    28.
    29.
    30.
    31.
    32.
    33.
    34.
    35.
    36.
    37.
    38.
    39.
    40.
    41.
    42.
    43.
    44.
    45.
    46.
    47.
    48.
    49.
    50.
    /*-- コード表示部ボックス --*/
    div.codebox{
        width: 510px;
        margin: 0px;
        padding: 0px;
        background-color: #aeaeae;
    }
    
    /*-- タイトルヘッダ --*/
    div.codeheader{
        width: 470px;
        margin: 0px;
        padding: 4px 20px;
        border-top: #2b2823 solid 1px;
        border-bottom: #2b2823 solid 1px;
        line-height: 1.6em;
        font-size: small;
        color: #2b2823;
    }
    
    /*-- 行数表示部 --*/
    pre.coderows{
        width: 40px;
        float: left;
        margin-top: 0px;
        padding: 10px 5px 10px 10px;
        text-align: right;
    }
    
    pre.coderows code{
        line-height: 1.6em;
        font-size: medium;
        color: #2b2823;
    }
    
    /*-- コードテキスト部 --*/
    pre.codetext{
        width: 415px;
        margin-left: 40px;
        margin-top: 0px;
        padding: 10px 20px;
        background-color: #2b2823;
        overflow-x: scroll;
    }
    
    pre.codetext code{
        line-height: 1.6em;
        font-size: medium;
        color: #fff;
    }
    
    行数の表示が力技
    コード自体はほぼコピペでOK("<" ">" の変換は必要)
    コード部分のみの横スクロールができる
    横スクロール時は、ブラウザによって右端の余白表示が異なる

  3. 自作のCSS ol方式
  4. html
    1. <div class="codebox">
    2. <div class="codeheader">タイトルなど</div>
    3. <pre class="codeol"><ol><code><li>ここにソースコードを貼り付け</li><li>1行ごとにliタグで囲む必要がある</li></code></ol></pre>
    4. </div>
    css
    1. /*-- コード表示部ボックス --*/
    2. div.codebox{
    3. width: 510px;
    4. margin: 0px;
    5. padding: 0px;
    6. background-color: #aeaeae;
    7. }
    8. /*-- タイトルヘッダ --*/
    9. div.codeheader{
    10. width: 470px;
    11. margin: 0px;
    12. padding: 4px 20px;
    13. border-top: #2b2823 solid 1px;
    14. border-bottom: #2b2823 solid 1px;
    15. line-height: 1.6em;
    16. font-size: small;
    17. color: #2b2823;
    18. }
    19. /*-- コードテキスト部ボックス --*/
    20. pre.codeol{
    21. background-color: #aeaeae;
    22. width: 510px;
    23. margin-top: 0px;
    24. overflow-x: scroll;
    25. }
    26. /*-- コード部背景と余白調整 --*/
    27. pre.codeol ol{
    28. background-color: #2b2823;
    29. margin-top: 0px;
    30. margin-left: 55px;
    31. margin-bottom: 0px;
    32. padding: 10px 0px;
    33. }
    34. /*-- 余白調整 --*/
    35. pre.codeol ol li{
    36. margin-bottom: 0.3em;
    37. padding-bottom: 0px;
    38. padding-left: 15px;
    39. }
    40. pre.codeol code{
    41. line-height: 1.6em;
    42. font-size: medium;
    43. color: #fff;
    44. }
    コード部分のみの横スクロールはできない
    文字数が多い場合、olからはみ出してしまう
    行番号とコードの文字色を別にすることができない
    横方向の位置設定がめんどい
    web掲載用のコードは行ごとにliタグつけて改行を消す必要がある


参考・既存の方式

ソースコードに行数表示を追加する表現は既存の方法があり、今回自分で作る上でも参考にしています
 なぜわざわざ自分で作るに至ったのかというと、ブログの仕様により採用できないことが大きく影響しています
 で、自分で作るなら欲しい機能を付けてしまおうと思い、既存の方法には見当たらなかった行数表示したままの横スクロールもやってみました

技術ブログの「ソースコード」表示を効果的にカスタマイズする方法
ol li方式
code-prettifyを使用
liタグ自体が改行をするため、手作業でやるにはコード中の改行を消す必要がある
inline化すれば対応できる?

記事内にソースコードをキレイに表示するWordPressプラグイン「Crayon Syntax Highlighter」
Crayon Syntax Highlighterを使用
WordPressのプラグインなので、これを使用していることが前提条件

CSSでコードブロックの行番号を表示する
cssのcounterでlinenumberをカウントする方式
行数分だけspanタグが必要
ソースコード自体はコピペでOK

HTMLやCSSのソースコードをそのままページに貼り付ける方法
table方式
GitHub Gistを使用
行数の値自体はcssで表示しているぽい

0 件のコメント:

コメントを投稿