実案件

CSSのメディアクエリが効かない原因は、pxのpが抜けていた

  • 公開日
  • 案件実案件
  • 環境WordPress・SCSS

SCSSがコンパイルされない原因を突き止めたものの、FVのカードの見た目は直りませんでした。結局、原因は単純なもので、メディアクエリの単位pxからpが抜けていたことでした。

この記事は、SCSSがコンパイルされない原因の続きとなっています。

FVのカードの縮小スタイルが効かなかった

LPの納品前に、SCSSのコンパイルエラーを直しました。しかし、その後も、FVのカードの見た目は崩れたままでした。

幅、余白、文字サイズ、リストの列数を狭い画面向けに縮小するスタイルが、カードに適用されていませんでした。

メディアクエリの単位がpxではなくxだった

FVのカード用のスタイルは、fv-narrowというブレークポイント名で、画面幅の条件を指定していました。ブレークポイントの名前と画面幅の条件は、$bpにまとめて定義しています。mq()というmixinが、渡された名前に対応する条件を取り出して、メディアクエリを作ります。mixinの説明は、前の記事に書いています。

$bpに定義していたfv-narrowの値は、次のとおりです。

"fv-narrow": "screen and (max-width: 1419x)",

pxのpが抜けて、1419xになっていたことに気づきました。

Sassのコンパイルは通ってエラーが出ない

この書き間違いは、コンパイルエラーになりません。手元のDart Sass(Ver:1.105.1)で確認すると、エラーも警告も出ずにコンパイルが完了し、書いたとおりの1419xがCSSに出力されました。

@media screen and (max-width: 1419x) {
  .card {
    color: blue;
  }
}

コンパイルの結果だけでは、書き間違いに気づけませんでした。コンパイルエラーにならないことが、原因をなかなか見つけられなかった理由でした。

ブラウザでメディアクエリが一致するかを確かめる

単位が不正なメディアクエリは、ブラウザがエラーとして扱いません。どの幅でも一致しない条件として扱われ、中のスタイルは適用されません。

Chromeのコンソールで、画面幅が1419px未満の状態で確認しました。結果は次のとおりです。

window.matchMedia('screen and (max-width: 1419x)').matches
// false
window.matchMedia('screen and (max-width: 1419px)').matches
// true

pが抜けた指定はfalse、正しい指定はtrueでした。

メディアクエリの単位の誤りをgrepで探す方法

コンパイル後のcss/style.cssに、単位がpx・em・rem以外の画面幅の指定が残っていないかを、検索で確かめられます。
案件のフォルダでターミナルを開いて、次のコマンドを実行します。Git Bashなど、bash系のターミナルの場合は、次のとおりです。

grep -nE "width: *[0-9.]+[a-z]*\)" css/style.css | grep -vE "(px|em|rem)\)"

PowerShellにはgrepがないため、次のように書きます。

Select-String -Path css\style.css -Pattern 'width: *[0-9.]+[a-z]*\)' | Where-Object { $_.Line -notmatch '(px|em|rem)\)' }

VS Codeの検索(Ctrl+Shift+F)では、正規表現を有効にして、次の文字列で検索します。

width: *[0-9.]+(?!px|em|rem)[a-z]*\)

結果が何も出なければ、単位の誤りはありません。1419xの例では、該当する行が1行表示されます。
max()の中の0の単位を忘れた書き間違いは、CSSのmax()内の単位なしが原因でwidthが無効になったに書いています。

結論

今回の原因は、メディアクエリの単位の誤りでした。1419pxに直すだけで済みましたが、コンパイルは通り、ブラウザにもエラーが出ないため、見た目だけでは気づけません。ブレークポイントを定義したときは、実際にその幅で適用されるかを、単体で確認するようにしています。

blog(ブログ一覧へ戻る) top(トップページへ戻る)

contact

お問い合わせ

お見積り・ご相談は、お問い合わせフォームから承ります。
返信は2〜3営業日以内です。