プロが教える店舗&オフィスのセキュリティ対策術

border-collapse: collapseを設定すると、background: linear-gradientの描画が少し汚くなります。
調査のため、次のように最小のHTMLで実験しました。
<style>td { border: solid 1px; background: linear-gradient(90deg, red 50%, lime 50%) }</style>
<table><tr><td>0</td><td>1</td></tr></table>
<table style="border-collapse: collapse"><tr><td>0</td><td>1</td></tr></table>
1つ目のテーブルは意図したとおり赤と緑の半々の背景になります。
2つ目のテーブルはborder-collapse: collapseを設定しています。
border-collapse: collapseを設定するとセルの端や中央に、意図しない極細の黄土色(恐らく赤と緑の中間色)の縦線が表示されてしまいます。
border-collapse: collapseで枠線を無理やり重ねることの副反応として背景色の端と端までも重なってしまうということでしょうか(IEで試したらこのような現象は発生せず綺麗に表示されました)。
これを回避する方法はいくつもあると思いますが、あなたが思うに最もスマートな回避法を教えてください。

「border-collapseを設定する」の質問画像

A 回答 (4件)

テーブルなんか使わない。

    • good
    • 0
この回答へのお礼

調査のため、最小のHTMLを提示しましたが、実際には複数の行と列があるためテーブルは使う前提でお願いします^^

お礼日時:2021/12/17 21:12

複数あろうがテーブルなんか使わないほうがいい。


テーブル使ってスマートもくそもない
と思います。
    • good
    • 0
この回答へのお礼

次回はテーブルを使わない方法も考えてみます。
今回はテーブルで構築してしまったため、テーブルを使う前提でお願いします。

お礼日時:2021/12/17 21:40

わたしの環境では、その現象は発生しませんでした。


chromeです。

もし、
border-collapse: collapse
を使わないとなると、
テーブルではなくなりますが、
flexなどで強制的に表示を変えるのはいかがでしょうか。

<style>
table,tbody,thead{display:block;}
tr{display:flex;justify-content:left;flex-wrap:nowrap;}
td {margin:0; border: solid 1px; background: linear-gradient(90deg, red 50%, lime 50%) }
</style>
    • good
    • 0
この回答へのお礼

環境によるのですね。
私もchromeですが不思議です。
試しにFirefoxで表示してみたら問題ありませんでした。
またスマホだと背景が重なる問題は発生しないもののセルの枠線がどう見ても1pxではありませんでした。
ブラウザの問題なら、こちらでは何もせずブラウザの対応を待つ方がスマートか?とも思っています。
flexは少し学習が必要です。
試しに、ご提示のコードを張り付けてみたところ、背景が重なる問題は発生しないものの、枠線も完璧には重ならず、隣り合わせになるだけなので2pxの線が1本あるように見えます。
これは私が今までborder-collapse: collapseの代わりにborder-spacing: 0と指定していた時と同じ見た目です。

お礼日時:2021/12/18 12:38

No3です。



>枠線も完璧には重ならず、隣り合わせになるだけなので2pxの線が1本あるように見えます。

たしかにそうですね。

このまま、flex方針をつき進むなら、
td~td{border-left:none;}
を追記するとかでしょうけど...

しかし、改行したら(trが複数重なったら)
tr~tr>td{border-top:none;}
をさらに追記して、

theadやtbodyが出てきたら、
それにも対応して...

と、場合分けがたくさん出てきて、
まったくスマートではなくなってしまいますね。
    • good
    • 0
この回答へのお礼

border-left:noneやborder-top:noneは、border-collapseが無かった頃のテクニックでしょうか、たまに解説しているサイトを見ます。
今回のようにborder-collapseの表示が気に入らない時に使えるテクニックとして押さえておきます。
flexというかcssの学習は、また基礎から始めるとして、現状はborder-collapseの表示が気に入らないため、代わりにborder-spacing: 0を設定したいと思います。
これは枠線の太さが2pxになってしまうので、かなりダサいですが、他の場所に手を加える必要がなくシンプルなので甘んじます。

お礼日時:2021/12/18 14:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!