CSSのoutline
プロパティは、枠線の外側に表示される枠線(アウトライン)のスタイルを指定するショートハンドプロパティである。borderと似ているが、用途に違いがある。
アウトラインとは
アウトラインとは、要素の枠線(border
で指定できるやつ)の外側に用意された枠線である。border
と違い、幅を持たないため、主にアクセシビリティの向上のために用いられる。
アクセシビリティとは、障害などで視覚に難がある状態でも、コンテンツの意味を可能な限り読み取れるようにするあれこれの工夫を指す。
例えばボタンがEnterキーで押せる状態かどうかを一目で判断させるには、枠線で強調するのが手っ取り早い。しかし通常のborder
は幅を持ち、下手をするとレイアウトが崩れる。box-shadow
を使うのは冗長だ。専用のプロパティがあったらありがたい。outline
はそうしたときに活躍する。
borderとの違い
outline
とborer
には、以下のような違いがある。
– | outline | border |
---|---|---|
表示位置 | 枠線の外側 | 要素の枠 |
各辺の個別指定 | できない | できる |
レイアウトへの影響 | ない | ある |
主な用途 | アクセシビリティ | 装飾 |
もちろんoutline
も装飾目的に使える。ただ、インタラクティブな要素でそれをすると、ユーザーが混乱する恐れがある。多くのブラウザでは、要素がフォーカスされたり、アクティブになった状態を示すためにoutline
プロパティを使っているからだ。
取り扱いには注意したい。
指定できる値
outline
プロパティは、以下の3つのプロパティ指定をまとめたものである。
outline-width
文字通りアウトラインの線の幅を指定できる。px
やem
といった一般的な単位のほか、thin
、medium
、thick
といったキーワードも使える。
初期値はmedium
。
outline-style
以下のようなキーワードで線のスタイルを指定できる。
キーワード | 意味 |
---|---|
auto |
ブラウザが定義したスタイルを使う。 |
none |
アウトラインを使わない。 |
dotted |
点線。 |
dashed |
破線。 |
solid |
単線。 |
double |
二重線。 |
groove |
埋め込んで見える互い違いの二重線(何と表現したら良いものやらわかりません)。 |
ridge |
出っ張って見える互い違いの二重線。 |
inset |
埋め込んで見える単線。 |
outset |
出っ張って見える単線。 |
初期値はnone
。
outline-color
アウトラインの線の色。色の指定なら何でもいい。
初期値はauto
で、これはcurrentColor
として解釈される。
書き方
outline
プロパティは以下のように指定する。順不同。ただしスタイルを省略すると、デフォルト値がnone
のせいでアウトラインが表示されない。
謎の白い線の消し方
outline
プロパティを適切に指定しているはずなのに、その外側にさらに白い枠線が表示されることがある。これはブラウザがデフォルトで用意しているスタイリングのようである。outline-style
をauto
以外の値にすると消えるからだ。
謎の白線に困ったら、とりあえずoutline-style:solid;
に指定すれば消える。たぶん。
余談:outline-offset
先の3つの他に、outline-offset
というプロパティもある。このプロパティを使うと、border
とoutline
の距離を指定できる。
outline
ではまとめて指定できないので、このプロパティだけは分けて指定してやる必要がある。