問題発生状況を正確に把握
状態:-
閲覧数:29,173
投稿日:2013-03-23
更新日:2018-03-15
手順
0.コンソール画面でエラー確認
1.該当CSSの読込可否(CSS該当箇所が正常に読み込まれているかどうか。コンソール画面で確認)
2.該当CSSの反映可否(設定CSS内容が、ブラウザに正常反映されているかどうか)
それでもダメな場合
CSS該当箇所を先頭へ記述し反映を確認
・コメントアウト絡みのエラーなら、これで解決するはず
実際に遭遇した例1.「CSSセレクタ{プロパティ名:値}」とすべきところを「CSSセレクタ」と記述
問題発生
・単純なCSSなのに、どうしても内容が反映されない
解決した方法
・ソースにあった余計なコードを削除したら、無事反映されるようになった
遭遇例
・このCSS見て、何が問題か一発で分かる人がいたら、プロだと思う
・自分はまるで分からなかった
・20分ぐらい悩み続けた
▼style.css
div.main .nav-global>li>a {
padding-top: 0px;
padding-bottom: 0px;
}
div.mian .nav-global>li>a {
}
.nav>li>a:hover
/* グローバルナビ */
/* ソースコード表示 */
div.hoge1 pre {
background-color:#191970;
color:white;
}
div.hoge1 pre {
background-color:#333333;
color:white;
}
div.hoge2 pre{
background-color:#000000;
color:white;
}
症状
問題になった症状
・CSS内容が反映されない
・「relative」絡みの「z-index」とか、そんなややこしいヤツではない
・単純なCSS
・具体的には、背景色が反映されない
・「invalid property value css」エラーは表示されていないので、プロパティ記述間違いではない
・クラス名が違っていたとか、そういうオチではない
謎の挙動
一番混乱したのは、以下に記載した「謎の挙動」を示したこと
・一つ目の「div.hoge1 pre」の背景色は表示されない
・二つ目の「div.hoge1 pre」の背景色は表示される
・一つ目の「div.hoge1 pre」を削除すると、二つ目の「div.hoge1 pre」の背景色は表示されなくなる
・つまり、どゆこと? ???
この時の心境は?
・自分の人格を否定されたような気分
・そこまでいかなくても、これまで培ってきたコーディングスキルを全否定されたような気分
・あり得ねええええ!
実際に遭遇した例1.の原因(もしくは敗因)
結論
・「.nav>li>a:hover」が邪魔をしている
Why?
・初め「「.nav>li>a:hover」」には「{」タグも書いていないのに、何で最初の「}」まで取り込まれるのかまるで分からなかった
解説
要は、こういうこと
・人間の目
▼style.css
.nav>li>a:hover
/* グローバルナビ */
/* ソースコード表示 */
div.hoge1 pre {
background-color:#191970;
color:white;
}
div.hoge1 pre {
background-color:#333333;
color:white;
}
・ブラウザ解析
▼style.css
.nav>li>a:hoverdiv.hoge1 pre {
background-color:#191970;
color:white;
}
div.hoge1 pre {
background-color:#333333;
color:white;
}
今回の反省を踏まえて
コメント
・解決してから最初に考えたことは、普段書かないコメントを残したりするから、こんなコード残骸に気が付かないんだよ
・コメント書いていなければ、もっと早期発見できたはず
経験値
・だけど、よくよく考えてみれば、それは無能な人間の言い訳に過ぎない
・今回の件で言えば、一つ目のCSSが効かずに、二つ目のCSSが効いた時点で、「}」忘れを真っ先に疑うべきではないのか?
・また、確かに「invalid property value css」エラーは表示されなかったが、肝心のCSSが表示されない時点の対処方法の保持リストが少な過ぎた
・単純に経験値が足りない。要は、オレのコーディングスキルの問題……
CSSが反映されない時にやること
要約
まず、問題を2つに分けて考える
1.該当CSSの読込可否(ブラウザから設定CSS該当箇所が表示されるかどうか)
2.該当CSSの反映可否(設定CSS内容が、ブラウザに正常反映されるかどうか)
※同じように見えるが、この2つを切り離して考え、順を追って原因を探していく方が、最終的には効率的な解決に繋がる
1.読込可否
設定CSS該当箇所が読み込まれない(表示されない)時の対処バリエーション
1.CSS自体の読込を確認 … CSSファイル名、パスを間違えていないか
2.設定CSS該当箇所の読込確認 … 「ID」もしくは「クラス名」を間違えていないか
3.CSSファイル(特に、該当箇所より前部分)に、余計なコード残骸がないか確認 … 「{」「}」の「入れ子」や「2重掲載」はないか、など
2.反映可否
(設定CSS該当箇所は読み込まれているのに)設定したCSS内容が反映されない時の対処バリエーション
1.「invalid property value css」エラー … その属性に存在しないプロパティ名を指定など
2.重複 … 同じプロパティが存在する場合、後で書いた内容の方が反映される
3.重要度 … 但し「!important;」が付与されている場合は、そのプロパティ内容が優先される
4.内部外部 … 外部CSSより、HTML直書しているプロパティ内容が優先される(多分)
5.その他個別対応 … 「relative」絡みの「z-index」や、「ブラウザ(及びバージョン)間差異」など
3.コメントアウト
1.コメントアウトする際、誤って「//」を利用していないか
4.その他
疲れていると、普段なら絶対にしない間違いをおかす
・しかもそういうあり得ないミスほど、間違うはずないと思っているので、発見に時間がかかる
・以下、実際に遭遇した例
・頼むよ、オレ!
1.""の片方が足りない
<div class="container>
2.余計な"を付与
・別の個所で「content: "\f10d";」があったので、恐らくコピペミスだと思われる
.imgyearspot{
left:1.3rem;"
}
3.タグ名が異なる
・ulなのにui
<ui class="container>
4.{}記述漏れ
.nav>li>a:hover
5.{}記述ミス
section table{margin-top:-1rem;]
6.クラス記述ミス
・「.」と書くべき所を「..」と記述
<?php
$h3Img = file_get_contents("/var/www/xxxx/xxxx/views/common/lib/sceditor/minified/themes/headers-button.png");
?>
<style>
..sceditor-button-headers div{
background-image:url(data:image/jpg;base64,<?php echo base64_encode($h3Img); ?>);
}
</style>
JavaScriptを疑う
概要
・実際にトラブッたわけではないけど、トラブル可能性があるかも、と感じたのでメモ
具体例
・予めCSSで透明度を0にしておき、jQueryでopacityを1へ変更
・今回は自分でコーディングしたから当然把握できるけど、誰かがコーディングしたこのコードを見た場合、すぐに挙動を理解できるだろうか?
実際に遭遇した例2.「CSSセレクタ{プロパティ名:値}」とすべきところを「CSSセレクタ{プロパティ名:値]」と記述
問題発生
レイアウトが崩れまくっている
・位置ずれ
・フォントサイズが勝手に変更されている
・「兄弟要素の兄要素を選択出来ない」ため、無理やり記述した内容がイケなかったの?
em{
font-style:normal;
font-weight:bold;
}
/* テーブル直前のpタグを選択出来ないので */
section table{margin-top:-1rem;]
疑った内容
sectionタグは指定できない?
・sectionタグ内にあるtableタグは指定できない?
・そんなはずないよね?
原因判明
「}」と記述すべきところを「]」と記述していたから
×
ゲストコメント一覧
番号 | 内容 | 投稿日 |
---|---|---|
1 | この記事で助かりました ありがとうございます | 2013-09-11 |
2 | うむ | 2014-03-21 |
3 | 本当に、くる日も来る日も修正ばかりしているとそのうち自らが修正箇所をつくっていしまうというスパイラルに陥りますね。吐きそうになります。 | 2014-12-26 |
コメント件数 … 3件 |