ホームへ

【html/CSS】tableのマスに斜線を引く方法

2022年07月10日
セル セル
ヘッダー セル
ヘッダー セル

「tableのなにもないマスに斜線を引きたいけどどうやるの?」

「斜線引いてみたけどギザギザになっちゃう!」

tableのマスに斜線を引く方法を解説します。

【結論】background:linear-gradient

下記CSSをコピペして使いましょう。

background-image: linear-gradient(to right top, transparent calc(50% - 0.5px), #999 50%, #999 calc(50% + 0.5px), transparent calc(50% + 1px))

セル セル
ヘッダー セル セル
ヘッダー セル セル
<style>
.example{
    background-image: linear-gradient(to right top, transparent calc(50% - 0.5px), #999 50%, #999 calc(50% + 0.5px), transparent calc(50% + 1px));
}
</style>
<table border="1">
    <tr>
        <th class="example"></th>
        <th>セル</th>
        <th>セル</th>
    </tr>
    <tr>
        <th>ヘッダー</th>
        <td>セル</td>
        <td>セル</td>
    </tr>
    <tr>
        <th>ヘッダー</th>
        <td>セル</td>
        <td>セル</td>
    </tr>
</table>

background:linear-gradientは背景色をグラデーションにするCSSです。

これを使うと頂点から頂点へのグラデーションを指定できます。

左下から右上へ向かってグラデーションし、半分の地点だけに色をつけることで斜線を表現しています。

詳しくは下記をご覧ください。

斜線の色を変えたい場合は、2か所ある#999を任意のカラーコードに変えてください。

透明色と黒色の境目をまったく同じ地点にするとジャギーが発生してギザギザの斜線になってしまいます。

そこでほんの少しだけ境目の距離をあけてグラデーションさせることでジャギーを抑えることができます。

距離をあけるほどジャギーを抑えることはできますが線が太くなってしまいます。

必要に応じて数値を調整してみてください。

CSSやhtmlの基本をしっかり理解すると、この記事の内容もより理解できるようになりますよ。

↓CSSやhtmlを楽しく学べるようにマンガを描きましたのでゼヒご覧ください↓

↑「副業してもう少し稼ぎたい!」というかたのために副業の方法も解説しています。

一マス目の指定方法

一マス目(左上)のマスに必ず斜線をいれたい場合、いちいちクラスを指定しなくても下記のように指定できます。

tr:first-child>*:first-child

セル セル
ヘッダー セル
ヘッダー セル
<style>
tr:first-child>*:first-child{
    background-image: linear-gradient(to right top, transparent calc(50% - 0.5px), #999 50%, #999 calc(50% + 0.5px), transparent calc(50% + 1px)) !important;
}
</style>
<table border="1">
    <tr>
        <th></th>
        <th>セル</th>
        <th>セル</th>
    </tr>
    <tr>
        <th>ヘッダー</th>
        <td>セル</td>
        <td></td>
    </tr>
    <tr>
        <th>ヘッダー</th>
        <td></td>
        <td>セル</td>
    </tr>
</table>

「tr:first-child」は一番目のtr、つまり一行目を指しています。

「tr>*」はtrの子要素、つまりtdとthを指しています。

「tr>*:first-child」はtr内で最初の子要素、つまり一番左のマスを指しています。

よって「tr:first-child>*:first-child」で一行目の一番左のマスを指すことができます。

空白マスの指定方法

空白マスに必ず斜線をいれたい場合、いちいちクラスを指定しなくても下記のように指定できます。

tr>*:empty

セル セル
ヘッダー セル
ヘッダー セル
<style>
tr>*:empty{
    background-image: linear-gradient(to right top, transparent calc(50% - 0.5px), #999 50%, #999 calc(50% + 0.5px), transparent calc(50% + 1px)) !important;
}
</style>
<table border="1">
    <tr>
        <th></th>
        <th>セル</th>
        <th>セル</th>
    </tr>
    <tr>
        <th>ヘッダー</th>
        <td>セル</td>
        <td></td>
    </tr>
    <tr>
        <th>ヘッダー</th>
        <td></td>
        <td>セル</td>
    </tr>
</table>

「:empty」は子要素がない空白の要素である場合に機能する疑似要素です。

ここでいう空白の要素とは「<td></td>」のように何も入っていない要素であり、空白スペースや「&nbsp;」が入っている場合は「:empty」は効きません。

【まとめ】tableのマスに斜線を引く方法

background-image: linear-gradient(to right top, transparent calc(50% - 0.5px), #999 50%, #999 calc(50% + 0.5px), transparent calc(50% + 1px))

一マス目の指定方法

tr:first-child>*:first-child

空白マスの指定方法

tr>*:empty

以上、tableのマスに斜線を引く方法でした。

「この記事の内容がよくわからなかった…」「なんかうまくいかなかった…」というかたは下記記事↓でhtmlとCSSの基本を学びましょう。
わからないまま突き進むより基本を学ぶのが結局近道です。

CSSやhtmlをマンガで学ぶ