1
1

More than 3 years have passed since last update.

小数点のpx指定でレイアウトが崩れる現象を考える

Last updated at Posted at 2020-07-14

border-width: 1.5pxに設定したときに、「あれれ、なんかよくわからんレンダリングが行われている」っていうことがあったので記します。レアケースなので、へーそういうことがあるんだというムダ知識として、あなたの生活を豊かにするかもしれません。

確認したブラウザ一覧

  • Google Chrome 83
  • FireFox 78 1
  • Edge 83
  • Internet Explorer 11

実装

以下は実装したコードとなります。

<!DOCTYPE html>
<html>
    <head>
        <style>
            hr {
                border: 0;
                border-top: 1px solid black;
                border-width: 1.5px;
                border-color: red;
            }
        </style>
    </head>
    <main>
        <h1>aaa</h1>
        <hr />
        <h1>aaa</h1>
        <hr />
        <h1>aaa</h1>
        <hr />
        <h1>aaa</h1>
        <hr />
        <h1>aaa</h1>
        <hr />
    </main>
</html>

結果

Chromeブラウザにて表示されたものを見てみます。
見事にhrタグに設定したborderの太さがおかしいです。
なぜでしょうか。

キャプチャ.PNG

考察

まず、styleタグ内に設定した内容をみてみます。

hr {
  border: 0;
  border-top: 1px solid black;
  border-width: 1.5px;
  border-color: red;
}

スタイルは上から順に評価されるので、

  • borderは上下左右ともに0を設定
  • borderの上のみ、1pxの黒い線を引く
  • borderの大きさは1.5pxを適用する(※ただし上にしか適用されない)
  • borderの色は赤に変更

そうです、そこまで変なことはしていなさそうです。
しかしborder-topを1にしているのに、border-widthを1.5にしているのがくさいですね。
なので、border: 0.75px solid red; などにして上下が1.5pxづつ領域をとるようにしてみましょう。

...とれませんか?
そうですか...ブラウザは1以下のピクセル指定、対応してなさそうですね...😇

キャプチャ.PNG

まとめ

小数点を使用したピクセル指定、基本的にやめたほうが無難です😇
(※最終的に2pxに指定しました)


  1. ちなみにFireFoxは均等な太さでレンダリングされています。 

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1