【Sass基礎講座】Scssで見やすいフレキシブル対応の表(table)を作成する


※ 当ページには【広告/PR】を含む場合があります。
2023/11/05
蛸壺の技術ブログ|【Sass基礎講座】Scssで見やすいフレキシブル対応の表(table)を作成する

当ブログ久しぶりのSassで簡単なHTML要素をスタイリングしてみるネタです。

ネットで
「css table 見やすく」などと検索してみても分かる通り、いい感じにHTML表をきれいに見せることのできるレイアウトの例が数多く紹介してあります。

ただこうもおすすめされている紹介例が多いと、結局どのスタイルを参考にすべきか、きっと目移りしてしまうことでしょう。

言うまでもなく、人によって
「良いデザイン」が異なるのは仕方がないことです。

とはいえ、万人ウケする完璧なデザインの「究極の表スタイル」が存在するならとっくに全てのWebデザイナーに普及・利用していることでしょう。

当然そんな都合の良いものはなく、絶えず「分かりやすく伝えられる」デザインとは常に何か考えながら、少しずつページのデザインを変えてみる地味な作業が求められます。

このブログ記事では、可能な限り第三者に有益な情報を分かりやすく伝えられるか、ということを良いデザインと位置づけ、この「分かりやすく伝えられる表スタイル」を以下のようなの方向性に着目したものとしてみます。

            
            1. フレキシブル対応させて、どんなブラウザからでも見やすくする
2. マウスホバーやフォーカス時、選択要素にハイライトで強調する
        
これらのポイントを満たすような表スタイルは、結構他のウェブページにも紹介されていますが、css形式である場合がほとんどです。

あらためてこの記事内でSassベースのスタイリングからtable要素を見やすく修飾していく過程を考えてみましょう。


合同会社タコスキングダム|蛸壺の技術ブログ【効果的学習法レポート】CSS/Sassをこれから学びたい人のためのオススメ書籍&教材特集

表をフレキシブル対応させる

早速、以下のプレーンなHtmlからなるtable要素にフレキシブル対応のスタイルを付けていきます。

            
            <table>
    <thead>
        <tr>
            <td></td>
            <th scope="col">内容</th>
            <th scope="col">学費(年額)</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <th>Hoge大学</th>
            <td data-label="内容" class="txt">Hogeを目指す人向けのHoge学部のある人気校</td>
            <td data-label="学費(年額)" class="price">¥320,000</td>
        </tr>
        <tr>
            <th>Piyo短期大学</th>
            <td data-label="内容" class="txt">最短でPiyoの資格がとれる専門短期教育が強み</td>
            <td data-label="学費(年額)"class="price">¥488,000</td>
        </tr>
        <tr>
            <th>Fuga医療大学</th>
            <td data-label="内容" class="txt">国内で唯一の最先端のFuga医療がじっくり学べるFuga専門学校</td>
            <td data-label="学費(年額)"class="price">¥785,000</td>
        </tr>
    </tbody>
</table>
        
当然ですが、スタイルも何もないので、以下のように見やすさとは無縁の見た目になってしまいます。

まず、フレキシブル対応ではない通常のPCモニター向けの表示スタイルを付けてみましょう。

            
            table {
    border-collapse: collapse;
    margin: 0 auto;
    padding: 0;
    width: 600px;
    tr {
        background-color: #fff;
        border-bottom: 2px solid #fff;
        &:nth-child(even) {background-color: #eee;}
    }
    th, td { padding: .35rem 1rem; }
    thead tr {
        background-color: #625223;
        color: #fff;
        th {
            font-size: .85rem;
            padding: 1rem;
        }
    }
    tbody tr {
        th {
            text-align: left;
            font-size: .8rem;
        }
        .txt { text-align: left; }
        .price {
            text-align: right;
            font-weight: bold;
            color: #ff5400;
        }
    }
}
        
このスタイルを割り当てると、

となります。

通常のブラウザからだと一見良さそうですが、画面の小さいタブレットやスマホ、ブラウザの表示サイズを縮小したときなど、表が見切れてしまい、より右側にある列の項目は見ることができないことが問題です。

そこで、スクリーン幅が
600px以下になった際にガラッとデザインが変わるように仕向けてみます。

            
            table {
    border-collapse: collapse;
    margin: 0 auto;
    padding: 0;
    width: 600px;
    tr {
        background-color: #fff;
        border-bottom: 2px solid #fff;
        &:nth-child(even) {background-color: #eee;}
    }
    th, td { padding: .35rem 1rem; }
    thead tr {
        background-color: #625223;
        color: #fff;
        th {
            font-size: .85rem;
            padding: 1rem;
        }
    }
    tbody tr {
        th {
            text-align: left;
            font-size: .8rem;
        }
        .txt { text-align: left; }
        .price {
            text-align: right;
            font-weight: bold;
            color: #ff5400;
        }
    }
}
//👇ここから追加
@media screen and (max-width: 600px) {
    table {
        border: 0;
        width: 100%;
        th {
            background-color: #625223;
            display: block;
            border-right: none;
        }
        tr {
            display: block;
            margin-bottom: .65rem;
            border: 1px solid #625223;
            &:nth-child(even) { background-color: #fff; }
        }
        td {
            border-bottom: 1px dotted #bbb;
            display: block;
            font-size: .8rem;
            text-align: right;
            position: relative;
            padding: 1.5rem 1rem 1.5rem 4rem;
            border-right: none;
            &::before {
                content: attr(data-label);
                font-weight: bold;
                position: absolute;
                left: 10px;
                color: #000;
            }
            &:last-child { border-bottom: 0; }
        }
        thead {
            border: none;
            clip: rect(0 0 0 0);
            height: 1px;
            margin: -1px;
            overflow: hidden;
            padding: 0;
            position: absolute;
            width: 1px;
        }
        tbody th {
            color: #fff;
            padding: 1rem;
        }
    }
}
        
ここでのポイントは@media screen and (max-width: 600px) {...の追加部分で、表示スクリーンがwidth <= 600pxを満たしたときにアクティブになるスタイルを追加しています。

再度Html部分にこのスタイルをつけると、以下のような見栄えになります。

試しにブラウザで、ウインドウ幅を広くしたり狭くしたりすると、スクリーン幅に応じて、フレキシブルに表のレイアウトが切り替わるはずです。


合同会社タコスキングダム|蛸壺の技術ブログ【効果的学習法レポート】CSS/Sassをこれから学びたい人のためのオススメ書籍&教材特集

ホバー時に選択要素をハイライトさせる

もう一点、マウスをホバーした項目が強調されるスタイルを作ってみましょう。

こちらは、table(の
tbody)要素にホバーした際に、1つ目のスタイリングが全体に付与されて、同時にホバーしているtableの項目要素(tr)にも2つ目のスタイリングが付与されるスタイルになっています。

            
            table {
    margin: 0 auto;
    width: 600px;
    font-size: 0.9rem;
    th, td {
        padding: 0.2rem;
        transition: 0.2s;
        color: #111;
        background-color: #fff;
    }
    tbody {
        th {
            font-weight: bold;
        }
        &:hover {
            th, td {
                color: #77735a;
                background-color: #fff;
            }
            tr:hover {
                th, td {
                    color: #f74016;
                    background-color: #fff0c1;
                }
            }
        }
    }
}
        
これを試してみたのが以下のようなhtmlになります。

簡単なcssの表現で簡単にハイライトを付けられるので、手早く表を見やすくするのにはとても有効な手段です。


合同会社タコスキングダム|蛸壺の技術ブログ【効果的学習法レポート】CSS/Sassをこれから学びたい人のためのオススメ書籍&教材特集

まとめ

以上、Sassベースのスタイリングから、個人的に「分かりやすい表」の条件を考えてみました。

ただ、たまに目にする凝りに凝ったアニメーションでコテコテにカスタマイズした表のスタイルは場合によっては見にくいような気がします。

ブログなどではおおよそシンプルな表のほうが良い印象になるため、華美なスタイルにすればするほどPV数が上がるとは必ずしも言えません。

表を見やすくするためのcssスタイルの工夫もほどほどにしておかれると良いでしょう。
記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。

合同会社タコスキングダム|蛸壺の技術ブログ【効果的学習法レポート】CSS/Sassをこれから学びたい人のためのオススメ書籍&教材特集