border-top
、 border-right
、 border-bottom
、 border-left
、 border-style
、 border-width
、 border-color
: 境界線 CSSプロパティ
このページで解説するコードの実行結果。
dotted
thin
green
右辺と下辺を少し濃い色にする
なお、見た目のため、このページの実行結果には「下のCSSコードも」適用している。
概要
このページでは、border
プロパティの知識を前提として、下表のCSSプロパティの解説をする。
CSSプロパティ | 対象 |
---|---|
border-top | 上辺の線 |
border-right | 右辺の線 |
border-bottom | 下辺の線 |
border-left | 左辺の線 |
border-style | 線の種類 |
border-width | 線の太さ |
border-color | 線の色 |
border-top-style | 上辺の種類 |
border-top-width | 上辺の太さ |
border-top-color | 上辺の色 |
border-right-style | 右辺の種類 |
border-right-width | 右辺の太さ |
border-right-color | 右辺の色 |
border-bottom-style | 下辺の種類 |
border-bottom-width | 下辺の太さ |
border-bottom-color | 下辺の色 |
border-left-style | 左辺の種類 |
border-left-width | 左辺の太さ |
border-left-color | 左辺の色 |
まず、目的を明確にする。
- 上下左右の「1辺のみ」に線を付けたいのか
- 上下左右の「2辺以上」に線を付けたいのか
「1辺のみ」の場合
以下のCSSプロパティを使う。
CSSプロパティ | 対象 |
---|---|
border-top | 上辺の線 |
border-right | 右辺の線 |
border-bottom | 下辺の線 |
border-left | 左辺の線 |
「2辺以上」の場合
下表の優先順位で設定する。具体的には、ベースとなる境界線を border
プロパティで指定し、個別に変更が必要な項目を他のプロパティで上書きする。
top
right
bottom
left
CSSプロパティ | 対象 |
---|---|
border-top | 上辺の線 |
border-right | 右辺の線 |
border-bottom | 下辺の線 |
border-left | 左辺の線 |
上下左右の「1辺のみ」に線を付けたい場合に使う。一般的に2辺以上に線を引くときに、これらのプロパティを使うと保守性が悪くなる。
使用例。
.top { border-top: solid 4px blue; } .right { border-right: solid 4px blue; } .bottom { border-bottom: solid 4px blue; } .left { border-left: solid 4px blue; }
<div class="top"> top </div> <div class="right"> right </div> <div class="bottom"> bottom </div> <div class="left"> left </div>
試しに、これで3辺に境界線を引いてみる。
.sample { border-top: solid 5px red; border-right: dashed 7px blue; border-bottom: dotted 6px purple; }
<div class="sample"> sample </div>
普通は、このような奇抜な線を引かない。
同じ線だったり、
.sample { border-top: solid 5px blue; border-right: solid 5px blue; border-bottom: solid 5px blue; }
線の種類だけ変えたり、
.sample { border-top: solid 5px blue; border-right: dashed 5px blue; border-bottom: dotted 5px blue; }
線の太さだけ変えたり、
.sample { border-top: solid 5px blue; border-right: solid 7px blue; border-bottom: solid 9px blue; }
線の色だけ変える。
.sample { border-top: solid 5px blue; border-right: solid 5px purple; border-bottom: solid 5px green; }
色を変えるにしても、すべての辺を変えることは少ない。
.sample { border-top: solid 5px blue; border-right: solid 5px purple; border-bottom: solid 5px blue; }
いずれにしても、調和を取るために、少しの変更にするのが普通。
さて、上の例でベースの色をblue
からindigo
に変更したとする。
.sample { border-top: solid 5px indigo; border-right: solid 5px purple; border-bottom: solid 5px indigo; }
上記のように、2カ所の色を変更する必要がある。
ところで、上と同じ境界線を下のCSSコードで書くことも可能。(解説は後述)
.sample { border: solid 5px indigo; border-right-color: purple; border-left-style: none; }
この場合、indigo
の色を指定しているのが「一カ所だけ」なので保守性が高まる。blue
にしてみる。
.sample { border: solid 5px blue; border-right-color: purple; border-left-style: none; }
ということで、2辺以上を引く場合、border
プロパティを使った方が保守性が高い。
style
width
color
CSSプロパティ | 対象 |
---|---|
border-style | 線の種類 |
border-width | 線の太さ |
border-color | 線の色 |
border
プロパティの復習。
.sample { border: solid 4px red; }
<div class="sample"> sample </div>
これをborder-style
/border-width
/border-color
プロパティを使って書き直す。
.sample { border-style: solid; border-width: 4px; border-color: red; }
<div class="sample"> sample </div>
border
プロパティを使った方がシンプルで保守性が高い。
では、何のためにborder-style
/border-width
/border-color
プロパティを使うのか?
これらのCSSプロパティはborder
プロパティの補助で、以下の2つの目的のために使う。
目的1 少しだけ違う設定を作りたい場合
以下は、.base
クラスを基本として、少し違う設定を作った例。
.base { border: solid 6px red; } .dotted { border-style: dotted; } .thin { border-width: thin; } .green { border-color: green; }
<div class="base"> base </div> <div class="base dotted"> base <br> dotted </div> <div class="base thin"> base <br> thin </div> <div class="base green"> base <br> green </div>
dotted
thin
green
.base
クラスのborder
をridge 10px blue
に変更してみる。
.base { border: ridge 10px blue; } .dotted { border-style: dotted; } .thin { border-width: thin; } .green { border-color: green; }
dotted
thin
green
全ての境界線が連動して変更されている。
これをborder
プロパティだけで書いてみる。
.base { border: ridge 10px blue; } .dotted { border: dotted 10px blue; } .thin { border: ridge thin blue; } .green { border: ridge 10px green; }
<div class="base"> base </div> <div class="dotted"> dotted </div> <div class="thin"> thin </div> <div class="green"> green </div>
.base
クラスをsolid 6px red
に戻してみる。
.base { border: solid 6px red; } .dotted { border: dotted 10px blue; } .thin { border: ridge thin blue; } .green { border: ridge 10px green; }
他のクラスも「ridge
→solid
」「10px
→4px
」「blue
→red
」と変更しないと、調和しない。
.base { border: solid 6px red; } .dotted { border: dotted 6px red; } .thin { border: solid thin red; } .green { border: solid 6px green; }
border-style
/border-width
/border-color
プロパティを使うと保守性が高まったことが分かる。
目的2 上下左右で異なる設定にする場合
引き数の数(最大4)により、上下左右を個別に指定ができる。
引き数の数 | 第一引き数 | 第二引き数 | 第三引き数 | 第四引き数 |
---|---|---|---|---|
1 | 上下左右 | - | - | - |
2 | 上下 | 左右 | - | - |
3 | 上 | 左右 | 下 | - |
4 | 上 | 右 | 下 | 左 |
.sample { border: 6px red; border-style: dotted double; }
<div class="sample"> sample </div>
.sample { border: solid red; border-width: 1px 10px 5px; }
.sample { border: solid 8px; border-color: red blue green orange; }
これをborder-top
/border-right
/border-bottom
/border-left
プロパティを使って書くこともできる。
.sample { border-top: solid 8px red; border-right: solid 8px blue; border-bottom: solid 8px green; border-left: solid 8px orange; }
ただし、「solid 8px
」の記述が冗長であるので保守性が悪い。
より細かい指定
CSSプロパティ | 対象 |
---|---|
border-top-style | 上辺の種類 |
border-top-width | 上辺の太さ |
border-top-color | 上辺の色 |
border-right-style | 右辺の種類 |
border-right-width | 右辺の太さ |
border-right-color | 右辺の色 |
border-bottom-style | 下辺の種類 |
border-bottom-width | 下辺の太さ |
border-bottom-color | 下辺の色 |
border-left-style | 左辺の種類 |
border-left-width | 左辺の太さ |
border-left-color | 左辺の色 |
「特定の辺(上/下/左/右)」の「特定の項目(種類/太さ/色)」を変更するために使う。
通常、border
プロパティでベースの線を決めて、部分的な変更を行うために使う。
例。
.base { border: solid 6px blue; } .top-style { border-top-style: dotted; } .right-width { border-right-width: 2px; } .bottom-color { border-bottom-color: red; }
<div class="base"> base </div> <div class="base top-style"> base <br> top-style </div> <div class="base right-width"> base <br> right-width </div> <div class="base bottom-color"> base <br> bottom-color </div>
top-style
right-width
bottom-color
こういうふうにも使える。
.final-sample { border: ridge 20px #0bf; border-top-width: 7px; border-bottom-width: 14px; border-bottom-color: #08c; border-right-color: #0af; }
<div class="final-sample"> 上辺と下辺を細くして<br> 右辺と下辺を少し濃い色にする </div>
右辺と下辺を少し濃い色にする
こう書いた方が、さらにシンプルになるけど。
.final-sample { border: ridge #0bf ; border-width: 7px 20px 14px ; border-bottom-color: #08c ; border-right-color: #0af ; }
右辺と下辺を少し濃い色にする
線を消す
線を消したい場合、style
にnone
を設定すればよい。
.red { border: solid 6px red; border-right-style: none; } .blue { border: 6px blue; border-style: solid none; } .green { border: 6px green ; border-style: none none solid solid ; }
<div class="red"> red </div> <div class="blue"> blue </div> <div class="green"> green </div>
Emmet
※ border-right-style
は展開不能である。( bdrs
はborder-radius: ;
に展開される )
記述 | Visual Studio Code |
---|---|
bdt | border-top: 1px solid #000; |
bdr | border-right: 1px solid #000; |
bdb | border-bottom: 1px solid #000; |
bdl | border-left: 1px solid #000; |
bds | border-style: none; |
bdsh | border-style: hidden; |
bdsd | border-style: double; |
bdsds | border-style: dashed; |
bdsdt | border-style: dotted; |
bdsg | border-style: groove; |
bdsi | border-style: inset; |
bdso | border-style: outset; |
bdsr | border-style: ridge; |
bdss | border-style: solid; |
bdw | border-width: ; |
bdw5 | border-width: 5px; |
bdc | border-color: #000; |
bdts | border-top-style: ; |
bdtw | border-top-width: ; |
bdtc | border-top-color: #000; |
bdrw | border-right-width: ; |
bdrc | border-right-color: #000; |
bdbs | border-bottom-style: ; |
bdbw | border-bottom-width: ; |
bdbc | border-bottom-color: #000; |
bdls | border-left-style: ; |
bdlw | border-left-width: ; |
bdlc | border-left-color: #000; |
リンク
- W3C(英語) > CSS Backgrounds and Borders Module Level 3 ( 勧告候補 ) > #the-border-shorthands
- W3C(英語) > CSS Backgrounds and Borders Module Level 3 ( 勧告候補 ) > #the-border-style
- W3C(英語) > CSS Backgrounds and Borders Module Level 3 ( 勧告候補 ) > #the-border-width
- W3C(英語) > CSS Backgrounds and Borders Module Level 3 ( 勧告候補 ) > #the-border-color