border のショートハンド
border は要素の周り、padding と margin の間に線を描きます。ショートハンドには 太さ、種類、色 の 3 つを順不同で書きます。
| 部分 | 個別プロパティ | 値 | 初期値 |
|---|---|---|---|
| 太さ | border-width | 1px, 0.2em, thin, medium, thick | medium |
| 種類 | border-style | solid, dashed, dotted, double など | none |
| 色 | border-color | 任意の色 | currentColor (文字色) |
省略できないのは種類です。初期値が none なので、border: 2px #2563eb; では何も描かれません。色を省略すると、枠線は要素の文字色になります。
線の種類
double で 2 本の線を見せるには 3px 以上必要です。groove、ridge、inset、outset は色に陰影を付けて立体的に見せるもので、ブラウザによって少し見た目が違います。hidden は none と同じに見えます。違いが出るのは border を結合したテーブルの中だけで、これは HTML テーブルの枠線のページ で解説しています。
1 辺ずつ指定する
各辺には専用のショートハンド (border-top、border-right、border-bottom、border-left) があり、各部分にも border-top-color のような辺ごとの個別プロパティがあります。論理プロパティの border-inline-start と border-block-end は書字方向に従います:
border-color、border-width、border-style には、padding と同じ時計回りの順番 (上、右、下、左) で 1 から 4 つの値を書けます。
border-radius で角を丸くする
border-radius は枠線 と 背景の角を丸くします。そのため border がまったくない要素でも使えます。
| 値 | 結果 |
|---|---|
border-radius: 8px | すべての角を 8px 丸める |
border-radius: 50% | 正方形なら円、長方形なら楕円 |
border-radius: 999px | ピル型: 短い辺が完全な半円になる |
border-radius: 8px 0 | 左上と右下が 8px、ほかの 2 つは直角 |
border-top-left-radius: 12px | 1 つの角だけ |
border-radius: 50% / 25% | 楕円の角: 横の半径 / 縦の半径 |
背景を持つ子要素が、角丸の親の角からはみ出すことがあります。親に overflow: hidden を指定すると、曲線に沿って切り取られます。
border と outline
outline は border に似て見えますが、border の外側に描かれ、空間を取りません。そのため outline を付けても何も動きません。ブラウザがフォーカスリングに outline を使うのはこのためです。
| border | outline | |
|---|---|---|
| 空間を占める | はい、ボックスのサイズの一部 | いいえ |
| 辺ごとの指定 | できる (border-top など) | できない (全周のみ) |
border-radius に沿う | はい | はい (現在のブラウザ) |
| ボックスからのずらし | できない | できる (outline-offset) |
| 主な用途 | デザイン | フォーカス表示、デバッグ |
よくある間違い
- 線の種類がない。
border: 1px #111827;やborder-color: red;では何も描かれません。solid(または別の種類) を含めましょう。 - hover で枠線を付けてレイアウトがずれる。 透明な枠線で場所を確保しておくか、outline か
box-shadowを使いましょう。 - 幅の計算で枠線を忘れる。
content-boxでは、枠線のあるwidth: 100%の要素はコンテナからはみ出します。box-sizing: border-boxを使いましょう。 border-radiusの角から子要素がはみ出す。 角丸の親にoverflow: hiddenを追加しましょう。outline: noneでフォーカスのアウトラインを消す。 キーボード利用者には必要です。消すのではなく、outline のスタイルを変えましょう。
よくある質問
CSS で枠線を付けるには?
太さ、種類、色をショートハンドで指定します: border: 2px solid #2563eb;。いちばん大事なのは種類です。種類がないと border の種類は none になり、枠線は描かれません。
CSS の枠線が表示されないのはなぜですか?
ほとんどの場合、線の種類が指定されていないからです。border-style の初期値は none なので、border: 2px #2563eb; や border-color: red; だけでは何も描かれません。solid、dashed などの種類を追加しましょう。
CSS で角を丸くするには?
border-radius を使います: border-radius: 8px; で 4 つの角すべてが丸くなります。正方形の要素に border-radius: 50%; を指定すると円になり、999px のような大きな値ではピル型になります。border がなくても背景の角が丸くなります。
片側だけに枠線を付けるには?
辺ごとのプロパティを使います: border-bottom: 2px solid #e5e7eb;。テキストが始まる側に付けるなら border-inline-start を使います。これは右から左の言語でも正しく動きます。
border と outline の違いは何ですか?
border はボックスの一部で、空間を占め、要素のサイズを変えます。outline は border の外側に空間を取らずに描かれ、辺ごとの指定ができず、ブラウザがフォーカスリングに使うものです。現在のブラウザではどちらも border-radius に沿います。