- ベストアンサー
CSSで@importを使った場合の特定のページでの読み込み制御方法
- CSSで@importを使っている場合、特定のページでのCSS読み込み制御は可能ですか?
- 要らないCSSファイルを特定のページで読み込まないようにする方法について教えてください。
- HTMLの変更なしで、CSSに記述する方法が望ましいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
本来は、HTML側で選択するのが良いです。次善の策としてCSS側で対処します。 HEAD内、および要素内のスタイルはまったく書かないとして、外部スタイルシートには、固定スタイルシートと優先スタイルシート、代替スタイルシートがあります。別途メディア別スタイルシートも。 [HTML側で選択する方法] <link href="style/default.css" rel="stylesheet" type="text/css"> 固定スタイルシートは、スクリーン端末、携帯端末、テレビ、プリンターを問わずすべてに適用されるスタイルシートで「text-indent」や「font-family」など、サイト全体のデザインを統一するために記述したりします。 <link href="style/standard.css" media="screen" rel="stylesheet" type="text/css" tytle="標準"> これはmediatypeがscreenに指定された標準 <link href="style/standard_tty.css" media="handhelt,tty" rel="stylesheet" type="text/css" tytle="標準"> これはmediatypeがhandhelt ttyに指定された標準 <link href="style/standard_color.css" media="screen,tty,handheld" rel="stylesheet" type="text/css" tytle="標準"> 色指定 <link href="style/wide.css" media="screen" rel="alternate stylesheet" type="text/css" tytle="幅広ウィンドウ用"> これはmediatypeがscreenに指定された代替スタイルシート <link href="style/index.css" media="screen" rel="stylesheet" type="text/css"> これはmediatypeがscreenに指定されたスタイルシート <link href="style/print.css" media="print" rel="stylesheet" type="text/css"> これは印刷用に指定されたスタイルシート などとして、HTML側で選択するのが一般的な方法です。 [スタイルシート側で選択する方法] それぞれのHTMLのbodyにclass名をつけて対応。 <body class="long_text"> <body class="short_text"> <body class="index"> として、スタイルシートのセレクタに div.section{} ---変更---> body.long_text div.section{} と子孫セレクタになるよう追加 body.long_text{@import:url();}はできない!! この方法ではスタイルシートが悠長になる。 [プログラム] <FilesMatch "^standard.css$"> SetHandler cgi-script </FilesMatch> という.htaccessを書きCSSフォルダーにおき、$ENV{'HTTP_REFERER'}によってCSSを書き換える。 foreach $CITE(@cites){ if( $ENV{'HTTP_REFERER'} =~ /$CITE/){ print "Content-type: text/css\n"; print "Pragma: no-cache\n"; print "Cache-Control: no-cache\n"; print "Expires: -1\n\n"; while(<DATA>){ print; } elsif(){ } } とか・・・ ★HTMLのhead内を書き換えてしまうのがベスト。今後の作業も楽です。