スタイルシートと画像にも問題がありました。
Base Href ソリューションを使用したくなかったので、相対パスを単一のスラッシュで開始するように更新するという問題を修正しました。
マイセットアップ
nopCommerceStore は、Web ショップの構築に使用されます。
nopCommerce は、「UrlRewritingNet.UrlRewrite」ライブラリを使用して URL の書き換えを処理します。
nopCommerce は、Web ショップの外観を定義するために ASP.NET のテーマとスキンを使用します。
サーバー側では、次のフォルダー構造があります。
根
root/App_Themes/darkOrange/base.css
root/App_Themes/darkOrange/cart-checkout-order.css
root/App_Themes/darkOrange/category.css
root/App_Themes/darkOrange/css/ie6.css (このファイルは最終的に削除されました)
root/App_Themes/darkOrange/img/transparent_image_example.png
ルート/css/ie6.css
ルート/MasterPages/Root.Master
ルート/Default.aspx ルート/Category.aspx
既定のページ (ブラウザーが http;//yourstore/default.aspx を要求) に到達すると、html ソースには次の html コードが含まれます。
<link href="App_Themes/darkOrange/base.css" type="text/css" rel="stylesheet" />
<link href="App_Themes/darkOrange/cart-checkout-order.css" type="text/css" rel="stylesheet" />
<link href="App_Themes/darkOrange/category.css" type="text/css" rel="stylesheet" />
...
ブラウザは次のリクエストを発行します。
http;//yourstore/App_Themes/darkOrange/base.css
http;//yourstore/App_Themes/darkOrange/cart-checkout-order.css
http;//yourstore/App_Themes/darkOrange/category.css
...
カテゴリ「本」をクリックすると、ブラウザーは http;//yourstore/Category/29-books.aspx を要求します)、html ソースには次の html コードが含まれます。
<link href="../App_Themes/darkOrange/base.css" type="text/css" rel="stylesheet" />
<link href="../App_Themes/darkOrange/cart-checkout-order.css" type="text/css" rel="stylesheet" />
<link href="../App_Themes/darkOrange/category.css" type="text/css" rel="stylesheet" />
ブラウザは次のリクエストを発行します。
http;//yourstore/Category/../App_Themes/darkOrange/base.css
http;//yourstore/Category/../App_Themes/darkOrange/cart-checkout-order.css
http;//yourstore/Category/../App_Themes/darkOrange/category.css
IE6 の透過 PNG
これまでのところ、すべて正常に動作しています。すべてのブラウザで外観を統一するには、IE6 固有のスタイルシートをロードする必要がありました。次の 2 つの重要なことを学びました。
スタイルシートを「App_Themes」フォルダーに追加せず、別のフォルダーに配置します。
画像を参照する場合は、単一のスラッシュで始まる相対パスを使用してください。
スタイルシートと「App_Themes」フォルダー:
IE6 で表示されるページに特定のレイアウトを適用するために、新しいスタイルシートを作成し、「root/App_Themes/darkOrange/css」フォルダーに配置しました。ファイル「root/MasterPages/Root.Master」に、次の html コード行を追加しました。
<!--[if IE 6]>
<link rel="stylesheet" type="text/css" media="screen" href="/css/ie6.css" />
<![endif]-->
Css ファイルが「App_Themes フォルダー」または「App_Themes」内のサブフォルダーに配置されると、自動的に参照されます。これにより、IE6 以外のブラウザーで望ましくない動作が発生しました。IE6 レイアウトがページに適用され、ページの外観が台無しになりました。
既定のページ (ブラウザーが http;//yourstore/default.aspx を要求) に到達すると、サーバーは要求を解析します。結果の html ソースには、次の html コードが含まれます。
<!--[if IE 6]>
<link rel="stylesheet" type="text/css" media="screen" href="/css/ie6.css" />
<![endif]-->
しかし、html には次の行も含まれています。
<link href="App_Themes/darkOrange/css/ie6.css" type="text/css" rel="stylesheet" />
すべてのブラウザが次のリクエストを発行します。
http;//yourstore/App_Themes/darkOrange/css/ie6.css
IE6 は追加のリクエストを発行します (ファイルは IE キャッシュから取得されます)。
http;//yourstore/App_Themes/darkOrange/css/ie6.css
これは望ましくない動作であったため、「ie6.css」ファイルを新しいフォルダーに置き換える必要がありました。現在は「root/css/ie6.css」に配置されています。
画像の参照、URL の書き換え、および相対パス:
IE6 で透明な png 画像をサポートするために、ie6.css ファイルにはいくつかの css 'filter' プロパティが含まれています。
たとえば、div セレクターの 1 つには、次の CSS コード行が含まれます。
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true', sizingMethod='crop', src='../App_Themes/darkOrange/img/transparent_image_example.png');
既定のページ (ブラウザーが http;//yourstore/default.aspx を要求する) に到達すると、IE6 は次のように要求します。
http;//yourstore/img/transparent_image_example.png
カテゴリ「書籍」をクリックすると、ブラウザーは http;//yourstore/Category/29-books.aspx を要求します) IE6 は次のように要求します。
http;//yourstore/img/transparent_image_example.png
どちらも「ページが見つかりません」(HTTP/1.1 404 Not Found) という結果になります。
交換後:
「../App_Themes/darkOrange/img/transparent_image_example.png」
と:
「/App_Themes/darkOrange/img/transparent_image_example.png」
すべてがうまくいきました。
これは、相対パスが 1 つのスラッシュで始まるためです。ブラウザは次のように URL を解釈します。
「http;//」で始まっていますか?はいの場合、絶対パスである必要があります。いいえの場合は、相対パスにする必要があります。
相対パス:
単一のスラッシュで始まりますか?はいの場合、それは「絶対パス参照」でなければなりません。いいえの場合は、「相対パス参照」でなければなりません
注: ドキュメント「Uniform Resource Identifiers (URI): Generic Syntax」( http://www.ietf.org/rfc/rfc2396.txt )のセクション 5「相対 URI 参照」を参照してください。
URL 書き換えページの場合:
「相対パス参照」 (例: 「http;//yourstore/Category/29-books.aspx」および「../App_Themes/darkOrange/img/transparent_image_example.png」) を使用すると、ブラウザーは失敗します。
「絶対パス参照」を使用すると、ブラウザーは成功します (例: 「http;//yourstore/Category/29-books.aspx」および「/App_Themes/darkOrange/img/transparent_image_example.png」)。