我正在开发一个使用gulp
进行编译和浏览器同步的网站,以使浏览器与我的更改保持同步。
gulp任务正确编译所有内容,但在网站上,我无法看到任何样式,并且控制台显示以下错误消息:
拒绝从'http://localhost:3000/assets/styles/custom-style.css'应用样式,因为它的MIME类型('text / html')不是受支持的样式表MIME类型,并且启用了严格的MIME检查。
现在,我真的不明白为什么会这样。
HTML包含这样的文件(我非常肯定是正确的):
<link rel="stylesheet" type="text/css" href="assets/styles/custom-style.css"/>
而样式表现在是Bootstrap和font-awesome样式之间的合并(现在还没有定制)。
路径也是正确的,因为这是文件夹结构:
index.html
assets
|-styles
|-custom-style.css
但我一直在收到错误。
会是什么呢? gulp / browsersync可能是这个(可能是一个设置?)吗?
我认为,问题在于以评论开头的CSS库。
在开发过程中,我不会缩小文件,也不会删除注释。这意味着样式表以一些注释开始,使其被视为与CSS不同的东西。
删除库并将其放入供应商文件(总是在没有注释的情况下缩小)解决了这个问题。
再说一遍,我不是百分之百确定这是一个修复,但它仍然是我的胜利,因为它现在按预期工作。
正如本文中提到的解决方案,一些解决方案适合我,但CSS不适用于页面。
简单地说,我只是将“css”目录移动到“Assets /”目录中,一切正常。
<link rel="stylesheet" type="text/css" href="assets/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="assets/css/site.css" >
对于使用Angular-CLI并发布到Web服务器上的子文件夹的其他人,请检查以下答案:
当您部署到域中的非根路径时,您需要手动更新<base href="/">
中的dist/index.html.
标记
在这种情况下,您需要更新到<base href="/sub-folder/">
我的问题是我使用的是webpack,在我的HTML CSS链接中,我有一个相对路径,并且无论何时我都会导航到嵌套页面,这将解析为错误的路径:
<link rel="stylesheet" href='./index.css'>
所以简单的解决方案是删除.
,因为我的是single-page application。
像这样:
<link rel="stylesheet" href='/index.css'>
所以它总是解决到/index.css
您可以打开Google Chrome工具,选择网络标签,重新加载页面并查找CSS的文件请求,并查找文件中的内容。
当您合并文件中的两个库时,也许你做错了什么,包括一些不适合CSS的字符或标题?
添加到一长串答案中,这个问题也发生在我身上,因为从浏览器同步的角度来看,我没有意识到路径错误。
鉴于此简单的文件夹结构:
package.json
app
|-index.html
|-styles
|-style.css
在href
的<link>
内的index.html
属性必须是app/styles/style.css
而不是styles/style.css
我得到了同样的问题然后我检查了我写道:
index.html中的<base href="./">
然后我改为
<base href="/">
然后它工作正常。
当我将它移动到localhost和PhpStorm时,我遇到了一个我知道在线工作的网站的问题。
这在网上很好用:
<link rel="stylesheet" href="/css/additional.css">
但是对于localhost,我需要摆脱斜线:
<link rel="stylesheet" href="css/additional.css">
所以我正在强化这里提供的一些答案 - 它可能是一个路径或拼写错误,而不是任何复杂的服务器设置问题。控制台中的错误是红鲱鱼;首先需要检查404网络选项卡。
这里提供的答案中有一些不正确的解决方案。添加type="text/html"
或改变href
到src
不是答案。
如果你想拥有所有的属性,以便它在最挑剔的验证器和你的IDE上验证,那么应该提供媒体值,并且rel
应该是stylesheet
,例如:
<link rel="stylesheet" href="css/additional.css" type="text/css" media="all">
我曾经也有过一样的问题。
如果项目的结构类似于以下树:
index.html
assets
|-styles
|-custom-style.css
server
|- server.js
我建议在server.js
中添加以下代码:
var path = require('path')
var express = require('express')
var app = express()
app.use('/assets', express.static(path.join(__dirname, "../assets")));
注意:Path是一个内置的Node.js模块,因此不需要通过npm安装此软件包。
对于Node.js应用程序,只需在导入服务器文件中的所有必需模块后使用它:
app.use(express.static("."));
link rel="stylesheet" href="style.css">
在我的情况下,当我正在部署包时,我把它从公共HTML文件夹中删除了。这是有原因的。
但显然已经激活了一个严格的MIME类型检查,我不太确定它是在我身边还是由我托管的公司。
但是一旦我将样式文件夹移动到与index.php文件相同的目录中,我就停止了错误,并且样式被完美激活。
对于Node.js应用程序,请检查您的配置:
app.use(express.static(__dirname + '/public'));
请注意,/public
最后没有正斜杠,因此您需要将其包含在HTML的href选项中:
href="/css/style.css">
如果你确实包括正斜杠(/public/
)那么你可以做href="css/style.css"
。
导致此问题的主要原因之一是尝试加载的CSS文件不是有效的CSS文件。
原因:
检查您尝试加载的文件是否是有效的CSS样式表(从网络选项卡中获取文件的服务器URL并点击新选项卡并验证)。
在body标签内使用<link>时需要考虑的有用信息。
虽然在体内有一个link
标签不是使用标签的标准方式。但我们可以将它用于页面优化(更多信息:https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery)/如果业务用例需要(当您提供内容和服务器的主体时,必须使用提供的内容呈现HTML页面)。
保持在body标签内部,我们必须在itemProperty
标签中添加属性link
<body>
<!-- … -->
<link itemprop="url" href="http://en.wikipedia.org/wiki/The_Catcher_in_the_Rye" />
<!-- … -->
</body>`
有关itemProperty
的更多信息,请查看https://webmasters.stackexchange.com/questions/55130/can-i-use-link-tags-in-the-body-of-an-html-document。
删除rel =“stylesheet”并添加type =“text / html”。所以它看起来像这样 -
<link href="styles.css" type="text/html" />
如果您在JavaScript中将样式设置为:
var cssLink = document.createElement("link");
cssLink.href = "./content.component.scss";
cssLink.rel = "stylesheet";
--> cssLink.type = "html/css";
(iframe as HTMLIFrameElement).contentDocument.head.appendChild(cssLink);
然后只需将cssLint.type(在上面的描述中用箭头表示)更改为“MIME”:
cssLink.type = "MIME";
它将帮助您摆脱错误。
npm install bootstrap --save
apps[0].scripts
:
"scripts": [
"../node_modules/bootstrap/dist/js/bootstrap.js"
],
// And the Bootstrap CSS to the apps[0].styles array
"styles": [
"styles.css",
"../node_modules/bootstrap/dist/css/bootstrap.css"
],
它对我有用。
三重检查文件的名称和路径。在我的情况下,我在目标文件夹中有这样的内容:
lib
foobar.bundle.js
foobr.css
这个链接:
<link rel="stylesheet" href="lib/foobar.css">
我猜浏览器试图加载JavaScript文件并抱怨其MIME类型,而不是给我一个文件未找到错误。
我遇到了同样的问题,经过几个小时的调试后发现它与临时文件无法写入有关。
转至管理→配置→文件系统。设置正确的临时目录。确保您的服务器有权写入该目录。
我在Angular中遇到了这个错误。我解决它的方法是在我的链接元素上放置一个ngIf,这样在填充动态URL之前它就不会出现在DOM中。
它可能与OP无关,但我最终在这里寻找答案。
<link *ngIf="cssUrl" rel="stylesheet" type="text/css" [href]="sanitizer.bypassSecurityTrustResourceUrl(cssUrl)">
我遇到了这个问题。
我拒绝应用'http://m.b2b-v2-pre1.jcloudec.com/mobile-dynamic-load-component-view/resource/js/resource/js/need/layer.css?2.0'中的样式,因为它的MIME类型('text / html')不是受支持的样式表MIME类型,并且启用了严格的MIME检查。
改变路径可以解决这个问题。
我有同样的问题,在我的情况下,这是因为我手动尝试在HTML文件中导入CSS文件(就像我们一直使用静态网站),实际上文件必须是在Webpack使用的入口点JavaScript文件中导入。
将样式表导入主JavaScript文件时,而不是手动编写HTML,这一切都按预期工作。
来自this thread的解决方案解决了我的问题:
不确定这是否会对任何人有所帮助,但如果您使用的是angular-cli,我通过从index.html中删除CSS引用并将其添加到“style”部分下的angular-cli.json文件来修复此问题。重新启动我的网络服务器后,我不再遇到这个问题。
当您没有正确引用CSS文件时,也会出现此错误。
例如,如果您的链接标记是
<link rel="stylesheet" href="styles.css">
但你的CSS文件名为style.css
(没有第二个s),那么很有可能你会看到这个错误。
我试图重启我的Windows机器并重新安装“npm i”。
它对我有用。
我有一个Bootstrap模板的错误。
<link href="starter-template.css" rel="stylesheet">
然后我从链接中删除了rel="stylesheet"
,即:
<link href="starter-template.css">
一切正常。如果您使用的是Bootstrap模板,请尝试此操作。
我改变了'href' - >'src'。所以从这个:
<link rel="stylesheet" href="dist/photoswipe.css">
对此:
<link rel="stylesheet" src="dist/photoswipe.css">
有效。我不知道为什么,但它完成了这项工作。
您文件中的评论将使此行为。一些minifiers不会删除评论。
也
如果您使用Node.js并使用express
设置静态文件,例如:
app.use(express.static(__dirname + '/public'));
您需要正确地处理文件。
在我的情况下,两者都是问题,所以我在CSS链接前加上“/css/styles.css”。
例:
<link type="text/css" rel="stylesheet" href='/css/styles.css">
此解决方案非常完美,因为路径是CSS无法渲染的主要问题