border-radiusでは曲線が美しくならない理由と解決方法

border-radiusでは曲線が美しくならない理由と解決方法

目次(MENU)

ウェブデザインで角を丸くしたいとき、CSSの border-radius を使うのは定番です。
ところが、単純に「R16」と指定しても、外側と内側の曲線が微妙にズレて見えることがあります。
この記事では、その原因と、滑らかに見せるための工夫を解説します。

なぜ曲線が美しくならないのか

border-radius は、要素の外側の角に対して半径を適用します。
たとえば次のようなコードを書いたとします。

.box {
  border: 4px solid #ccc;
  border-radius: 16px;
}

このとき、ブラウザは外側の角(borderの外縁)を半径16pxで描きます。
一方で、内側(borderの内縁)は、単純に16px−4px=12pxのようにはなりません。

ブラウザの描画エンジンは、外側と内側を別々の円弧として補完するため、外と内のカーブが同心円にならず、わずかに歪んだ曲線になります。

見た目にどう影響するか

実際に観察してみると:

  • 外側の線に比べて内側のカーブが急に見える
  • 厚みのあるボーダーでは、角が「つぶれた」ように感じる
  • 角丸ボックスを積み重ねたデザインでは、カーブの繋がりが不自然になる

これは、人間の目が滑らかな連続曲線(同心円)を自然に感じるため、わずかな差でも「きれいじゃない」と感じてしまうのです。

よくある誤解:「Rを16にすれば全部16」

多くの人が「border-radiusを16にすれば、内側もR16になる」と思いがちですが、実際にはブラウザは「borderを含む外枠」に対してだけRを計算します。
そのため、borderの太さが増すほど、内側のカーブは急になります。

滑らかに見せるための工夫

1. 外側と内側で半径を分ける

擬似要素や二重構造を使って、外側にR16、内側にR12を設定することで、より自然なカーブが得られます。

.card {
  position: relative;
  border-radius: 16px;
  overflow: hidden;
}
.card::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 12px;
  background: #fff;
  z-index: 1;
}

このように半径を微妙に変えることで、視覚的に滑らかな曲線が再現できます。

2. 二重ボックス構造にする(BricksやElementorでも簡単)

外側コンテナに border-radius: 16px;
内側コンテナに border-radius: 12px; を指定します。

外側に枠線、内側に背景を設定すると、見た目が自然で、美しいカードやボタンを作れます。
Bricksで制作されたこのサイトのヘッダーに採用されている方法です。

3. SVGで正確なカーブを描く

完璧に滑らかな曲線を求める場合は、SVGの<rect>要素を使って同心円的な角丸を描くのも一つの方法です。

まとめ

  • border-radius外側の角を基準に描かれる
  • 内側の曲線は自動で同心円にはならない
  • そのため、厚いボーダーでは角が歪んで見える
  • 外R16/内R12のように、意図的に差をつけると滑らかになる

デザインの美しさは、こうした小さな違和感を減らすことから生まれます。
CSSの仕様を理解し、意図的に補正を加えることで、よりプロフェッショナルな見た目を実現できるでしょう。

参考になった・役に立った:
お問い合わせはこちら

コメントして足跡を残す…

おススメの関連する記事:

ログインID/メールアドレス *
パスワード *
IDPWを保存する
ログインID/メールアドレス