CSSのborderは枠線をまとめて指定するプロパティ
CSSの border は、要素の枠線を指定するショートハンドプロパティです。基本形は border: 1px solid #333; のように、線の太さ、線の種類、線の色をまとめて書きます。この記事で扱う解説対象は CSSプロパティ です。border 自体はセレクタでも値でもなく、複数の関連プロパティを一括で設定するための指定です。
最初に押さえるべき点は、border-style が実質的に必須になることです。太さや色を書いていても、線の種類が none のままだと枠線は表示されません。そのため、迷ったらまず border: 1px solid currentColor; のように、太さ、種類、色を明示して確認します。色を省略した場合は、文字色と同じ currentColor が使われます。
<!-- HTML -->
<div class="sample-border sample-border--solid">solid</div>
<div class="sample-border sample-border--dashed">dashed</div>
<div class="sample-border sample-border--dotted">dotted</div>
<div class="sample-border sample-border--double">double</div>
/* CSS */
.sample-border {
padding: 16px;
}
.sample-border--solid {
border: 3px solid #333;
}
.sample-border--dashed {
border: 3px dashed #333;
}
.sample-border--dotted {
border: 3px dotted #333;
}
.sample-border--double {
border: 6px double #333;
}
この4例では、変えている主な値は border-style です。solid は通常の実線、dashed は破線、dotted は点線、double は二重線です。実務では、カードやフォームには solid、補足や注意喚起には dashed、装飾的な区切りには dotted を使うと判断しやすくなります。
borderの基本構文は太さ・種類・色の3要素で考える
border は、内部的には border-width、border-style、border-color をまとめて指定します。値の順序は一般的には太さ、種類、色の順に書かれますが、仕様上は順序に依存しない組み合わせです。ただし、読みやすさを優先するなら 1px solid #333 の順で統一したほうが保守しやすいです。
省略時の挙動も重要です。太さを省略すると medium、色を省略すると currentColor が使われます。一方、種類を省略すると初期値の none になり、線は表示されません。つまり、表示されるかどうかを決める最小条件は border-style が none 以外になっていることです。
/* CSS */
.box-a {
border: 3px solid #333;
}
.box-b {
color: #c2410c;
border: 3px solid;
}
.box-c {
border: dashed #333;
}
.box-d {
border: 3px #333;
}
.box-b は色を省略しているため、文字色と同じ色で枠線が出ます。.box-c は太さを省略していますが、線種があるため表示されます。.box-d は線種がないため、期待した枠線になりません。コードレビューでは、border: 1px #ccc; のような指定がないかを先に確認すると原因を見つけやすいです。
border-width・border-style・border-colorを個別に指定する
四辺を同じ枠線にするだけなら border で十分です。ただし、太さだけ変えたい、色だけ状態ごとに変えたい、線種を上下左右で分けたい場合は、個別プロパティを使ったほうが意図を読み取りやすくなります。border-width、border-style、border-color は、それぞれ1個から4個の値を受け取れます。
4個指定の順番は、上、右、下、左です。これは margin や padding と同じ考え方です。3個なら上、左右、下、2個なら上下、左右、1個なら全方向に同じ値が適用されます。見た目だけでなく、どの辺に何を当てたいかを先に決めてから書くとミスが減ります。
/* CSS */
.four-side-border {
border-width: 2px 4px 6px 8px;
border-style: solid dashed dotted double;
border-color: #1d4ed8 #c2410c #15803d #6b7280;
}
| 指定数 | 適用順 | 例 |
|---|---|---|
| 1個 | 全方向 | border-width: 2px; |
| 2個 | 上下、左右 | border-color: #333 #ddd; |
| 3個 | 上、左右、下 | border-style: solid dashed dotted; |
| 4個 | 上、右、下、左 | border-width: 1px 2px 3px 4px; |
個別指定の注意点は、あとから border を書くと、先に書いた個別指定を上書きする可能性があることです。例えば border-color を指定したあとに border: 1px solid #000; を書くと、色は後者に揃います。状態別に色だけ変えたい場合は、ショートハンドを後ろに置かないほうが安全です。
片側だけの枠線と角丸は用途を分けて使う
見出し、注釈、カード、ボタンでは、四辺すべてに枠線を付けるより、片側だけの枠線を使ったほうが自然な場合があります。片側だけを指定する場合は、border-left、border-right、border-top、border-bottom を使います。これらも太さ、種類、色をまとめて書けます。
角を丸くする場合は border-radius を使います。これは border の一部ではなく、角の丸みを指定する別プロパティです。枠線がなくても要素の角丸には使えます。カードなら8pxから16px程度、丸いバッジや正円なら 50% を使うのが一般的です。
左と下に線を付けた見出し
/* CSS */
.heading-border {
padding-left: 14px;
border-left: 6px solid #2563eb;
border-bottom: 1px solid #d1d5db;
}
.round-badge {
width: 120px;
height: 120px;
border: 3px solid #2563eb;
border-radius: 50%;
}
.notice {
border-left: 6px solid #c2410c;
}
.section-divider {
border-bottom: 4px solid #2563eb;
}
片側指定は、意味づけがはっきりしている場面で使うと有効です。左線は見出しや注意文の強調、下線は区切り、上線はセクションの開始、右線は装飾的な補助に向いています。角丸は見た目を柔らかくできますが、丸めすぎるとボタンやカードの印象が変わるため、既存デザインと合わせて調整します。
borderが効かない原因とレイアウトがずれる理由
border が効かないときは、まず border-style があるかを確認します。次に、後続のCSSで上書きされていないか、色が背景色と同化していないか、対象セレクタが正しいかを見ます。特にショートハンドは省略値を初期値に戻すため、個別指定のあとに書くと意図しないリセットが起きます。
もう1つの注意点は、枠線が要素のサイズに影響することです。標準の box-sizing: content-box; では、指定した幅に加えてpaddingとborderが外側へ足されます。カード幅を揃えたい場合や横並びレイアウトで崩れを避けたい場合は、box-sizing: border-box; を使うと、paddingとborderを幅の内側に含められます。
/* CSS */
.ng-border {
border: 2px #333;
}
.ok-border {
border: 2px solid #333;
}
.fixed-width-card {
width: 240px;
padding: 24px;
border: 8px solid #333;
box-sizing: border-box;
}
.focus-ring {
border: 2px solid #333;
outline: 3px solid #2563eb;
outline-offset: 4px;
}
outline は border と似ていますが、通常はレイアウト上の領域を占有しません。そのため、フォーカスリングのように操作状態を示す用途では outline が向いています。一方、要素の境界として常に見せたい線やカードの区切りには border を使います。見た目が似ていても、レイアウトへの影響が異なる点を分けて考える必要があります。
まとめ
CSSの border は、枠線の太さ、種類、色をまとめて指定するショートハンドです。基本形は border: 1px solid #333; で、実務ではこの順番に統一すると読みやすくなります。枠線が表示されない場合は、最初に border-style が指定されているかを確認してください。線種が none のままでは、太さや色を指定しても枠線は見えません。
四辺を同じにするなら border、太さや色だけ調整するなら border-width や border-color、片側だけ強調するなら border-left や border-bottom を使います。角丸は border-radius、フォーカスのようにレイアウトへ影響させたくない線は outline と分けると、実装の意図が明確になります。
| 目的 | 使う指定 | 確認点 |
|---|---|---|
| 四辺に同じ枠線を付ける | border |
太さ、種類、色をまとめて書く |
| 線の一部だけ変える | border-width、border-style、border-color |
上、右、下、左の順番を間違えない |
| 片側だけ強調する | border-left、border-bottom |
見出しや注釈など用途を限定する |
| 幅のずれを防ぐ | box-sizing: border-box; |
paddingとborderを幅に含める |
最終的には、枠線を装飾ではなく 情報の区切りを作る指定 として扱うと判断しやすくなります。表示されない原因、ショートハンドの上書き、要素サイズへの影響を押さえておけば、既存サイトの小さな修正でも安全に使えます。