【发布时间】:2012-11-01 00:12:58
【问题描述】:
TL;DR
我已经阅读了有关 Stack Overflow 上有关此问题的许多问题,并尝试遵循给定的建议。不过,我的 CSS 样式表在 Chrome/Safari 中无法使用,但它可以在 Internet Explorer 中使用。
我能看到的关于我的场景的唯一奇怪的事情是我的服务器正在返回类型为application/octet-stream 的所有文件。我无法更改服务器的这一方面。有什么办法可以将我的 CSS 文件解释为 Chrome/Safari 和 IE 中的样式表吗?
我正在开发一个嵌入式 Web 服务器项目。我对服务器软件的控制和进行页面级设置的能力非常有限。我所能做的就是创建编译到服务器应用程序中的静态 HTML、CSS 和图像文件。
因此,从嵌入式服务器返回的所有文件都在 HTTP 标头中声明为 application/octet-stream。这会在 Chrome 中产生警告,但不会出现错误。
最初,我在 Chrome/Safari 中加载此样式表时遇到问题,但它可以在 IE 中使用。在阅读了关于 Stack Overflow 的几个问题后,我发现我需要更改样式表声明:
<link rel="stylesheet" href="/styles/index.css">
到:
<link rel="stylesheet" type="text/css" href="/styles/index.css">
当我进行此更改时,Chrome 和 Safari 仍然无法处理 CSS 文件,但 IE 也开始忽略样式表。
奇怪的是,如果我不在我的 HTML 文档上声明 DOCTYPE,我可以让链接的样式表在我的所有浏览器中工作。然而,这不是一个理想的解决方案。
我的猜测是这个问题与 HTTP 标头声明有关,它与 link 元素中声明的类型不匹配。
如何让这个样式表在 Chrome、Safari 和 IE 中工作,同时遵循良好的 Web 开发实践代码(即在我的 HTML 文件上使用 doctypes 并且不在 HTML 标头中嵌入样式代码?)
为清楚起见,相关的 CSS/HTML 代码如下所示。
index.css
html {height:100%}
body {margin:0;min-height:100%;position:relative}
iframe {width:100%;height:100%;border:none}
.hdr {min-width:765px;overflow:auto}
.logo1 {float:left;margin:4px}
.logo2 {float:right;margin:4px}
.menu {position:absolute;top:70px;left:0px;bottom:0px;width:175px}
.content {position:absolute;top:70px;left:175px;bottom:0px;right:0px;}
index.htm
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<link rel="stylesheet" href="/styles/index.css"> <!-- Removed the type declaration so that this would at least work in IE9 //-->
</head>
<body lang="en-us">
<div class="hdr"><img class="logo1" src="/images/logo1.png" alt="Logo #1"><img class="logo2" src="/images/logo2.png" alt="Logo #2"></div>
<div class="menu"><iframe name="menu" src="/menu.shtm"></iframe></div>
<div class="content"><iframe name="main" src="/home.htm"></iframe></div>
</body>
仅供参考,这是一个从现有项目开发的新项目。原始项目没有在 HTML 文件上声明 DOCTYPE。因此,所有页面数据都以怪异模式在浏览器中加载和执行。此外,index.htm 最初由多个frames 组成frameset。
我正在尝试更新此应用程序,使用正确且最新的方法来开发网页。我可以让这个应用程序工作,但我觉得如果我不得不依赖浏览器怪癖模式和框架集,这将牺牲未来浏览器的兼容性。
我试图关闭链接标签,但没有帮助。从技术上讲,这应该不是问题,因为该文档被声明为 HTML5 文档,而不是 XHTML。
【问题讨论】:
-
奇怪,第一次 IE 做得很好,而其他浏览器却没有
-
尝试使用
/>关闭您的元和链接标签,它们目前处于打开状态。 (也可以对<img>做同样的事情,尽管这不会影响问题 -
@Andy 是的,我的图片没有任何问题,但我会尝试你的建议。
-
不,它没有帮助。 @insertusernamehere,我想试一试只是为了确定,但这就是我忽略它的原因。
-
您的 CSS 文件位于何处?是在根吗?因为根据我的实验,
/styles/index.css将在 Chrome 的根目录中查找。 (例如,在我的 Windows 机器上,它正在寻找C:\styles\index.css。)一旦我将 CSS 文件放在那里,它就可以正常工作了。
标签: html css internet-explorer google-chrome http-headers