初心者編|無料コーディング教材|HTML・CSS・jQueryを実践で学ぶ

jQueryでCSSを変更する方法|css()の取得・複数指定・classとの使い分け

jQueryでWebカードのCSSを変更するイメージ

ボタンを押したときに文字色や背景色を変えたいものの、jQueryの.css()へ何を渡せばよいか分からないことがありますよね。

.css()は、CSSの値を取得したり、選択した要素のインラインstyleを変更したりするメソッドです。1つの値は.css('color', '#fff')、複数の値はオブジェクト形式で指定します。

先に結論:その場で計算した値を入れるなら.css()、あらかじめ決まったデザインを切り替えるならaddClass()toggleClass()を使うと管理しやすくなります。

jQueryのcss()でできること

目的書き方
値を1つ取得$('.card').css('color')
値を1つ設定$('.card').css('color', '#fff')
複数の値を設定$('.card').css({ color: '#fff', padding: '24px' })
直接設定した値を解除$('.card').css('color', '')

設定した値は、対象要素のstyle属性へ追加されます。CSSファイル自体を書き換えるわけではなく、ブラウザに表示されているHTMLの状態を変更します。

$('.card').css('background-color', '#1676d2');

実行後のHTMLは、次のような状態になります。

<div class="card" style="background-color: rgb(22, 118, 210);">
  カードの内容
</div>

CSSの値を取得する

引数を1つだけ渡すと、最初に一致した要素の計算済みスタイルを取得できます。

const color = $('.card').css('background-color');

console.log(color); // 例: rgb(248, 251, 255)

CSSファイルに16進数で指定していても、取得結果がrgb()になる場合があります。計算済みスタイルはブラウザによって表記が変わるため、文字列が完全一致する前提で判定しないほうが安全です。

複数の値をまとめて取得する

const styles = $('.card').css([
  'color',
  'background-color',
  'padding-top',
]);

console.log(styles);

配列を渡すと、プロパティ名と値の組み合わせを持つオブジェクトが返ります。余白や枠線を調べるときは、marginのような一括指定よりmargin-topなど個別のプロパティを取得すると結果が安定します。

CSSを1つ変更する

プロパティ名と値の2つを渡すと、一致したすべての要素へ同じstyleが設定されます。

$('.card').css('color', '#ffffff');
$('.card').css('padding', '24px');

ハイフンを使う'background-color'と、JavaScript風の'backgroundColor'はどちらも指定できます。記事内で書き方を統一すると読みやすくなります。

複数のCSSをまとめて変更する

複数のプロパティは、波括弧を使うオブジェクト形式でまとめます。プロパティと値の間はコロン、各組み合わせの間はカンマです。

$('.card').css({
  backgroundColor: '#1676d2',
  color: '#ffffff',
  borderColor: '#0f5da6',
  borderRadius: '28px',
});

ハイフンを含むプロパティ名をそのまま使う場合は、'background-color'のようにクォーテーションで囲んでください。

実例:カードの見た目を切り替える

左のカードは.css()で直接変更し、右のカードはclassで切り替えます。最初はどちらも同じ白いデザインです。

cssメソッドとclass操作を適用する前のカード表示

index.htmlにプレビューカードと操作ボタンを用意します。

<article class="sample-card" id="css-card">
  <span class="tag">おすすめ</span>
  <h2>はじめてのWeb制作</h2>
  <p>HTML・CSS・jQueryを順番に学べます。</p>
</article>

<button type="button" id="apply-css">青いデザインに変更</button>
<button type="button" id="reset-css">元に戻す</button>

<p id="css-result" aria-live="polite">
  背景色:rgb(248, 251, 255)
</p>

style.cssでは初期状態と、classで使う強調状態を定義します。

.sample-card {
  min-height: 180px;
  padding: 24px;
  border: 2px solid #d3dfeb;
  border-radius: 14px;
  background-color: #f8fbff;
  color: #18304a;
  transition: background-color 0.2s, color 0.2s;
}

.sample-card.is-highlighted {
  border-color: #f0a000;
  background: #fff7dc;
  color: #624300;
  transform: translateY(-4px);
}

青いボタンを押すと、4つの値をまとめて変更します。変更後の背景色も取得して結果欄へ表示します。

cssメソッドでカードを青くし角丸を変更した表示
function updateCssResult() {
  window.setTimeout(function () {
    const color = $('#css-card').css('background-color');
    $('#css-result').text(`背景色:${color}`);
  }, 250);
}

$('#apply-css').on('click', function () {
  $('#css-card').css({
    backgroundColor: '#1676d2',
    color: '#ffffff',
    borderColor: '#0f5da6',
    borderRadius: '28px',
  });

  updateCssResult();
});

画像では、左のカードだけが青色と大きな角丸へ変わりました。右側のclass操作とは独立しているため、必要な値だけを個別に変更できます。

直接設定したCSSを解除する

値へ空文字を渡すと、jQueryやstyle属性で直接設定したプロパティを取り除けます。その後はCSSファイルの指定が再び適用されます。

$('#css-card').css({
  backgroundColor: '',
  color: '',
  borderColor: '',
  borderRadius: '',
});

この方法でCSSファイル内のルール自体を削除することはできません。解除後の色や余白は、CSSファイルの通常ルールや継承によって決まります。

css()とclass操作を使い分ける

計算する値はcssメソッド、再利用する見た目はclass操作という比較

ユーザーが選んだ色、ドラッグで計算した位置、APIから受け取ったサイズなど、実行時に値が決まる場合は.css()が便利です。

選択中・エラー・開閉中など、あらかじめ決まった状態ならCSSファイルへclassを用意します。メディアクエリや:focus-visibleも同じCSS側で管理できるため、レスポンシブ対応とアクセシビリティを保ちやすくなります。

is-highlightedクラスでカードを黄色く強調した表示
$('#toggle-class').on('click', function () {
  const isHighlighted = $('#class-card')
    .toggleClass('is-highlighted')
    .hasClass('is-highlighted');

  $('#class-result').text(
    `class:${isHighlighted ? 'is-highlighted' : '通常'}`
  );
});

単位は省略せずに指定する

jQuery 4では、数値を渡したときに自動でpxが付くプロパティが限定されています。バージョン差による動作の違いを避けるため、単位が必要な値は文字列で明示しましょう。

$('.card').css('padding', '24px');
$('.card').css('font-size', '1.125rem');
$('.card').css('line-height', '1.7');

line-heightのように単位なしで使える値は文字列の'1.7'で問題ありません。幅、余白、文字サイズなどにはpxrem%など目的に合う単位を付けます。

現在値を基準に増減する

+=-=を使うと、現在の値を基準に増減できます。

$('.card').css('padding-left', '+=8');

クリックのたびに増やすUIでは、上限を決めないと画面からはみ出します。デザイン状態を切り替えるだけならclassのほうが安全です。

CSSカスタムプロパティを変更する

サイト全体で色や余白をCSS変数として管理している場合は、プロパティ名をそのまま渡します。

$('.card').css('--card-accent', '#1676d2');

const accent = $('.card').css('--card-accent');

--card-accentはcamelCaseへ変換せず、ハイフンを含む名前のまま記述してください。

css()が動かないときの確認項目

  • セレクタがHTMLのclass・idと一致しているか
  • プロパティ名と値の間がカンマになっているか
  • 複数指定で波括弧、コロン、カンマが揃っているか
  • 必要な値へpxremを付けているか
  • jQuery本体をscript.jsより先に読み込んでいるか
  • !importantへ頼らずclassで優先度を整理できないか

.css('color', 'red !important')は期待どおりに動きません。強い指定が必要な状況では、まずCSSセレクタの詳細度や読み込み順を見直し、状態classへスタイルをまとめましょう。

関連するjQueryの使い方

class操作、マウス操作、表示切り替えを組み合わせる場合は、次の記事も参考にしてください。

まとめ

jQueryの.css()は、CSSの取得・追加・変更・解除に使えます。1つの設定はプロパティ名と値、複数の設定はオブジェクト形式で渡します。

実行時に計算する値は.css()、再利用する見た目はclass操作を選びましょう。単位を明示し、レスポンシブやフォーカスの指定をCSS側へ残すと、保守しやすい実装になります。