CSS
この記事では「CSS」について、基本の意味と使い方を初心者向けにやさしく説明します。
The CSS currentColor keyword lets you reuse an element’s text color for borders, outlines, shadows, and SVG paints—making UI theming simpler and more consistent.
currentColor
currentColor は「その要素の color(文字色)と同じ色」を、他の色指定にも使い回すためのキーワードです。
- Table Of Contents
このページでできるようになること
currentColorが「どの色」を指すのか(colorとの関係)を説明できるborder/outline/box-shadow/backgroundなどで、色を一か所に集約して書ける- SVGアイコン(
fill/stroke)をcolor1つで着色する考え方が分かる - 「意図しない色になる」「効いてないように見える」原因を DevTools で切り分けられる
- フォーカス可視化(
:focus-visible)で安全に使う判断ができる - 試験で問われやすい「
currentColorとinheritの違い」などのひっかけを整理できる
まずは直感:currentColor って何?
ざっくり言うと、currentColor は「この要素の文字色(color)を、そのまま“共通の色”として使うスイッチ」です。
- 色の指定を1か所に寄せられる(
colorを変えるだけで、枠線やアイコンも追従) - 同じ色の“統一感”が出る(文字・枠・アイコンが揃う)
- テーマ切替に強くなる(クラス付け替えでまとめて色が変えられる)
正確な定義(仕様に沿った説明)
何のために存在するか
currentColor は、要素の color プロパティの値を、他の“色を受け取るプロパティ”にも使い回すためのキーワードです。つまり、color を“基準色(前景色)”として扱い、枠線や影、装飾、SVGの塗りなどに同じ色を流し込めます。
何に適用されるか(対象)
currentColor は「値(キーワード)」なので、色を受け取れる場所なら基本的に使えます。例:border-color、outline-color、background-color、box-shadow の色、SVGの fill/stroke など。
できること / できないこと(制約)
- できること
-
- 同一要素内で「文字・枠線・アイコン」などを同じ色に揃える
- 親の
colorを変えるだけで、子要素の装飾色(枠線など)もまとめて変える - SVGアイコンを
colorで着色する(fill="currentColor"など)
- できないこと(重要)
-
currentColor自体で“色を決める”こと(色の元は常にcolor)colorが意図通りでないのに「currentColorだけ直せば解決」すること(まずcolorを疑う)- 画像(PNG/JPG)そのものを“自動で着色”すること(SVGやCSSで描かれた形なら可能)
影響範囲(レイアウト/描画/ユーザー操作/アクセシビリティ)
- レイアウト
currentColorは色の値なので、基本的に レイアウト(幅・高さ・配置)には影響しません。ただし、色が変わることで“見え方”が変わり、境界が目立つ/目立たないは起きます。- 描画
- 色が変わるだけなので描画コストは小さめです。とはいえ、
box-shadowを濃く大きくすると重くなる、などは別問題として起きます。 - ユーザー操作
- 色が変わってもクリック領域は増えません。タップしやすさは
paddingやサイズで確保します。 - アクセシビリティ
- フォーカスリングやエラー強調の色を揃えやすい一方で、色だけで状態を伝えない(形/文言/アイコンも併用)判断が必要です。
基本の書き方(最短の型)
最小サンプル(コピペ用)
CSS
.btn {
color: #1d4ed8;
border: 2px solid currentColor;
}
border の色を currentColor にすると、color を変えたときに枠線も一緒に変わります。「色を変える入口」を color 1つに寄せられます。
よく使う値/典型パターン
- 枠線(境界)を揃える
border-color: currentColor;/border: 2px solid currentColor;- フォーカスリング(強調)に使う
:focus-visible { box-shadow: 0 0 0 4px currentColor; }のように「外側に広げるリング」を作る- SVGアイコンを文字色に合わせる
fill="currentColor"/stroke="currentColor"を使い、親のcolorでまとめて着色する- 薄い色(半透明)にしたい
currentColor自体に透明度は足せないので、color-mix()などを使うか(対応状況に注意)、別の色指定に分ける
どこに書くか(外部CSS/ページ内style/インライン)
- 基本:外部CSS(推奨)
- 色のルールはサイト全体のトーンに直結します。実務では、コンポーネントやユーティリティとして外部CSSにまとめ、差分管理しやすくします。
- ページ内
<style> - 学習用デモや、単独ページで完結させたい場合に便利です(このページのデモもそうしています)。
- インライン(例外)
style="color: ..."は検証には便利ですが、運用では保守が難しくなりやすいので最後の手段に寄せます。
コピペで動く最小デモ(このページ内で表示)
デモは「悪い例 → 良い例」で、差が一目で分かるようにします。
悪い例:同じ色を何度も直書き
色変更のたびに複数箇所を直すことになり、漏れやすい。
良い例:color に集約 → currentColor で追従
色を変える入口は color だけ。枠線・アイコンがまとめて追従。
テーマ切替のイメージ:親の color を変える
青テーマ:このブロックの color が基準
オレンジテーマ:親の color を変えただけ
“色の入口”を親に寄せると、部品の使い回しが楽になります。
フォーカス例:キーボード移動でフォーカスが当たるときだけ、currentColor でリングを出します(:focus-visible)。
ホバー例:動きは控えめに。動きを減らす設定の人にはアニメを切ります。
落とし穴の予告:currentColor が“意図しない色”になるのは、だいたい color が想定と違うのが原因です(次の章で整理)。
HTML
<button class="btn">Button</button>
<svg viewBox="0 0 24 24">
<path fill="currentColor" d="..."></path>
</svg>
CSS
.btn {
color: #1d4ed8;
border: 2px solid currentColor;
}
.btn:focus-visible {
outline: 2px solid transparent;
box-shadow: 0 0 0 4px currentColor;
}
仕様として押さえるポイント(初心者が事故りやすい所)
- 継承する?(inheritance)
currentColorはプロパティではなく「値」なので、“currentColorが継承する”というより、colorが継承すると考えます。親のcolorを子が継承していれば、子のcurrentColorも同じ色になります。- 初期値は?(initial)
currentColorの元になるcolorの初期値は、仕様上はシステム色(例:CanvasText)として定義されます。つまり「既定の文字色」が基準になり、環境(UA/テーマ)で見え方が変わり得ます。- 適用対象は?(applies to)
- 色を受け取るプロパティで使えます。代表例は
border-color/outline-color/text-decoration-color/box-shadowの色 /background-color/ SVGのfill/strokeなどです。 - %の基準は?(percentages)
currentColor自体は色なので、%の基準のような話は基本的に関係しません(長さやレイアウトの計算とは別の話です)。- 算出値/使用値の考え方(computed/used value)
currentColorの“実際の色”は、最終的に決まったcolor(算出された値)に置き換えられます。DevTools の Computed でcolorを確認し、その色がborder-colorなどに反映されているかを見ると切り分けが速いです。- 省略時の扱い、無効値の扱い
border: 2px solid;のように色を省略すると、既定でcurrentColor相当になるケースがあります(仕様や実装の範囲で)。「省略で揃う」場面もありますが、意図を明確にするならcurrentColorと書く方が安全です。- アニメーション可能?(animatable)
currentColor自体をアニメーションするのではなく、対象プロパティが色としてアニメ可能なら、colorを変えたときに連動して見た目が変わります。フォーカスやホバーでcolorを変える設計は分かりやすい一方、動きは控えめにします。- 特別扱い:
color: currentColor currentColorをcolor自体に指定すると、color: inheritと同じ扱いになります。「自分のcolorを参照して無限ループ」になるのを避けるための仕様です。
よくある勘違い・混同ポイント
currentColorとinherit-
inheritは「そのプロパティの値を親から引き継ぐ」という指定です。一方currentColorは「その要素のcolorと同じ色にする」という指定です。border-color: inherit;→ 親要素のborder-colorを引き継ぐborder-color: currentColor;→ 自分のcolorと同じ色にする
currentColorとカスタムプロパティ(var(--x))-
カスタムプロパティは「自分で作る変数」です。
currentColorは「すでにあるcolorの最終値」を参照するキーワードです。- デザインシステム的に“色の名前”で管理したい → カスタムプロパティが得意
- コンポーネント内で「文字色と装飾色を揃えたい」 →
currentColorが得意
- 「動くけど危ない書き方」
-
リンクの既定色(UAスタイル)に頼って
currentColorを使うと、親のcolorや状態(未訪問/訪問済み)で意図せず色が変わります。部品として再利用するなら、colorの入口を明示しておく方が安全です。
実務でよくある使用例(制作会社の現場を想定)
ボタン・バッジ:文字色と枠線を揃えて、デザイン変更に強くする
color を部品のテーマ色として持ち、枠線やアイコンは currentColor にして追従させます。デザイン変更で「テーマ色が変わる」場合も、直す箇所が減ります。
アイコン:SVGを currentColor で染める
SVGの path に fill="currentColor" を入れておくと、アイコンの色が文字色に追従します。ナビのアイコン、ボタンのアイコン、アラートのアイコンなどで使い回しやすいです。
注意:SVG側に固定色(fill="#000" など)が書かれていると、CSSで変えにくくなります。
フォーム:フォーカスリングを“部品の色”に揃える
:focus-visible のリング色を currentColor にすると、「危険(赤)」「安全(青)」など部品のテーマに合わせてフォーカス表現を揃えられます。ただし視認性は必ず確認します。
実務で起きがちな事故と回避策
「意図しない色になる」
- 原因候補:
colorが想定と違う - まず DevTools の Computed で対象要素の
colorを確認します。親からの継承、リンクの既定色、状態(:visitedなど)、テーマクラスの付け忘れを疑います。 - 原因候補:SVGに固定色が残っている
- SVGの
fill/strokeが#...のままだと、currentColorに置き換えない限り色が変わりません。DevTools でSVG要素の属性とスタイルを確認します。
「効いてないように見える」
- 原因候補:背景と同化している
- 枠線やリングが背景と近い色だと、あるのに見えません。コントラストを上げる(色を濃くする、太くする、
outlineを併用する)方向で調整します。 - 原因候補:上書きされている
- DevTools の Styles で
border-colorやbox-shadowが打ち消されていないか確認します。特にリセットCSSやコンポーネントの状態クラスでborder: none等が当たっているケースがあります。
「フォーカスリングが見えない」
currentColor を使うとリング色が部品に追従しますが、部品の色が薄いとリングも薄くなります。リングは“見えないと意味がない”ので、必要ならリングだけ別色にする/太くする/二重にするなどで調整します。
アクセシビリティ/UX観点での注意(必要な範囲で)
- フォーカスは消さない:
:focus-visibleを使い、キーボード操作時に見失わない表示を用意する - コントラストを確認する:
currentColorで揃えると“薄い色”がそのまま枠線/リングにも来る。背景と同化していないか確認する - 動きは控えめ:ホバーで色や影を変える場合も短く小さく。
prefers-reduced-motionでアニメを切る - 色だけで意味を伝えない:エラー/必須/選択状態は、文言やアイコン、枠の太さなども併用する
関連プロパティ・関連セレクタとの組み合わせ・相互作用
colorcurrentColorの“元”です。どの要素でcolorを決めるか(親で決める/部品で決める)が設計の肝になります。border/outline/box-shadow- 境界やフォーカス表現に使う代表例です。
outlineはフォーカスの王道で、box-shadowは馴染ませやすい一方、薄いと見落とされやすいです。 :hover/:focus-visible- 状態変化で
colorを変えると、currentColorが連動します。状態による“色の意味”があるUIでは、連動の強さがメリットにも事故の原因にもなります。 - SVGの
fill/stroke - アイコンの着色に強い組み合わせです。SVG側に固定色があると効かないので、
currentColor化(またはCSSで上書き)を検討します。 - カスタムプロパティ(
--themeColorなど) - 「サイト全体の色設計」を扱うならカスタムプロパティ、部品内の統一は
currentColor、という使い分けが実務では分かりやすいです。
試験(Webクリエイター能力認定試験)で得点できる整理
用語ミニ辞典
currentColor- 要素の
colorプロパティの値を表すキーワード。枠線や影など、色を受け取る場所で使える。 inherit- そのプロパティの値を、親要素から引き継ぐ指定。
computed value(算出値)- カスケードと継承を経て、ブラウザが“最終的に決めた値”。DevTools の Computed で確認できる。
:focus-visible- キーボード操作など「見える形で必要なときだけ」フォーカス表示を出せる疑似クラス。
ひっかけポイント(短く)
currentColorは「colorと同じ色」。親のborder-colorとは無関係border-color: inherit;とborder-color: currentColor;は意味が違うcolor: currentColor;はcolor: inherit;扱いになる- SVGが固定色だと、CSS側の
currentColorが効かないことがある
「問われ方」っぽいミニ確認(解説付き)
-
問題:
.card { border-color: currentColor; }と書いた。枠線の色はどの値で決まる?解説:その要素の
color(文字色)で決まります。まずcolorの最終値を確認します。 -
問題:
border-color: inherit;とborder-color: currentColor;の違いを一言で。解説:
inheritは親のborder-colorを引き継ぐ、currentColorは自分のcolorと同じ色にする、です。 -
問題:
color: currentColor;は何と同じ扱いになる?解説:
color: inherit;と同じ扱いになります(自分自身参照のループを避けるため)。 -
問題:SVGアイコンが
currentColorで着色できない。まず疑うべきポイントは?解説:SVGの
fill/strokeが固定色になっていないか、対象要素のcolorが想定通りか、を DevTools で確認します。 -
問題:フォーカスリングを
box-shadow: 0 0 0 4px currentColor;で作った。見えないときの対処は?解説:背景と同化している可能性が高いです。リングを太く/濃くする、
outlineを併用する、リングだけ別色にする、などで視認性を上げます。
よくある質問(FAQ)
currentColorはどのプロパティで使えますか?- 色を受け取れるプロパティなら使えます。代表例は
border-color、outline-color、background-color、box-shadowの色、SVGのfill/strokeなどです。 currentColorを使ったのに、枠線が想定の色になりません- まず対象要素の
colorを DevTools の Computed で確認してください。currentColorは必ずcolorに連動します。 - SVGアイコンが
currentColorになりません - SVG側の
pathにfill="#..."のような固定色が残っていると効きません。fill="currentColor"にするか、CSSで上書きできる構造になっているか確認します。 - リンク(
<a>)に使うと色が勝手に変わります - リンクは未訪問/訪問済みなどで既定色が変わることがあります。部品として再利用するなら、親か部品自身で
colorの入口を明示しておくと安全です。 currentColorで半透明の枠線にできますか?currentColor自体に透明度を足すことはできません。半透明が必要なら、別の色指定(例:rgba())にするか、対応状況を確認した上でcolor-mix()などを検討します。
よくあるエラー/症状 早見表
- 症状:枠線が黒っぽい/環境で色が違う
-
原因候補:
colorを指定しておらず既定色(システム色)が基準になっている
最短の確認:DevTools の Computed でcolorの最終値を見る
解決の方向性:親または部品でcolorを明示する - 症状:
currentColorを書いたのに“効いてない” -
原因候補:上書き(
border: noneなど)/ 背景と同化して見えない
最短の確認:DevTools の Styles と Computed で最終値を確認
解決の方向性:勝っているルールを直す、太さ/色/併用(outline)を調整する - 症状:SVGの色が変わらない
-
原因候補:SVG側が固定色(
fill="#..."/stroke="#...")
最短の確認:DevTools でSVG要素の属性(fill/stroke)を見る
解決の方向性:currentColor化する、またはCSSで上書きできる構造にする - 症状:フォーカスリングが見えない
-
原因候補:部品の
colorが薄い / 背景と同化 /outlineを消した
最短の確認:Tab移動で確認、DevTools で:focus-visibleを強制
解決の方向性:リングを太く/濃く、outlineを戻す、リングだけ別色にする
まとめ:迷ったときの判断軸(短いチェックリスト)
- 色の入口はまず
colorに寄せ、装飾色はcurrentColorで追従させる currentColorが想定と違うときは、最初に Computed のcolorを見るinheritと混同しない(currentColorは“自分のcolor”)- SVGは固定色が残りやすい。
fill/strokeを必ず確認する - フォーカスリングは「見えること」を優先し、薄いテーマ色なら別設計も検討する