
スタイルシートが読み込まれない
本ブログはPCとスマホ表示をMedia Queriesを使って、cssを切り替えて表示を変えているのですが、ある時IE6・IE7、IE8で表示させてみると……

普段はFirefoxを使っているので、まったく気がつかなかったのですが、思いっきり表示に不具合が出ていました…… これはひどい
よく調べてみるとIE6・IE7・IE8でcssが読み込まれていないことがわかりました。
Media Queriesを使ってcssを読み込む方法は3つ
通常、Media Queriesを使ってスタイルシートを分ける時は、IE8以下には効かないので、
<!--[if lt IE 9]>
<script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
<![endif]-->
このおまじないをheadタグ内に書いて、Media Queriesに対応させます。しかし今回は効いていません。
Media Queriesを使ってcssを読み込む方法は3つあります。それぞれheadタグ内に書きます。
linkタグのmedia属性
<link rel="stylesheet" media="screen and (max-device-width: 769px)" href="pc.css" />
<link rel="stylesheet" media="screen and (max-device-width: 768px)" href="tablet.css" />
<link rel="stylesheet" media="screen and (max-device-width: 640px)" href="smart.css" />
@media
@media screen and (min-width: 769px){
/* 直接スタイルを記入 */
}
@media screen and (max-width: 768px){
/* 直接スタイルを記入 */
}
@media screen and (max-width: 640px){
/* 直接スタイルを記入 */
}
@import
@import url('pc.css') screen and (min-width: 769px);
@import url('tablet.css') screen and (max-width: 768px);
@import url('smart.css') screen and (max-width: 640px);
css3-mediaqueries.jsは@mediaの書き方のみ対応
よくよく調べてみると、css3-mediaqueries-jsは、@mediaの書き方のみ対応しているようです。
つまり本ブログの場合、このようにlinkタグで書いていたため、スタイルシートが読み込まれなかったのが不具合の原因でした。
<link rel="stylesheet" media="screen and (min-device-width: 641px)" href="<?php bloginfo('template_url'); ?>/pc.css" />
<link rel="stylesheet" media="screen and (max-device-width: 640px)" href="<?php bloginfo('template_url'); ?>/smartphone.css" />
しかしながら、linkタグで読み込んだpc.css内に、@media screen and (max-width: 640px){} ……と書いてもなぜかダメでした。
@mediaの書き方だと、もう直接書くしかないのですが、スタイルシートの記述も多いので、できればファイルを分けて管理したいというのが本音です。
暫定対処法
そこで検討した結果、発想の転換で「Media Queriesで読み込めないなら、IEの条件付きコメントでスタイルシートを読めばいいじゃない!」ということで、
<!--[if lt IE 9]>↓↓↓
<script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
<![endif]-->
<!--[if lt IE 9]>
<link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/pc.css" />
<![endif]-->
このように、css3-mediaqueries.jsを読み込むところを、かわりにPC用のスタイルシートを読みこませるようにしました。この状態で確認するとIE6・IE7・IE8の表示はokでした。
一応これでIE6-8に対処できたとはいえ、まっっったくスマートな対処ではないので、お恥ずかしい限りですが、これ以外思いつかなかったので、とりあえずこれで動かしている状態です。
同様の不具合でお悩みの方がおられれば、参考になれば幸いです。
コメント