Mime type error when adding a CSS file to Angular
Asked Answered
W

20

39

I'm trying to build a static site using Angular. What I want is to have some global css/js/image files to be added to the index.html

This is my code in index.html

<link rel="stylesheet" type="text/css" href="css/layers.css">

My css folder in in the same level as the index.html file

I'm getting this error for each stylesheet I added (from ng serve with chrome)

Refused to apply style from 'http://localhost:4200/css/layers.css' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.

I've tried adding this too

#.angular-cli.json
"styles": [
        "styles.css",
        "css/layers.css"
      ],

How can I fix this?

My angular setup is

Angular CLI: 1.6.5
Node: 8.1.4
OS: darwin x64
Angular: 5.2.2
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

@angular/cli: 1.6.5
@angular-devkit/build-optimizer: 0.0.42
@angular-devkit/core: 0.0.29
@angular-devkit/schematics: 0.0.52
@ngtools/json-schema: 1.1.0
@ngtools/webpack: 1.9.5
@schematics/angular: 0.1.17
typescript: 2.5.3
webpack: 3.10.0
Whooper answered 30/1, 2018 at 12:53 Comment(6)
you should be adding the relative path "./css/layers.css" – Chlorine
mmm.. double check the path of your styles... remeber angular.cli json file start from src folder .. – Martineau
Can you load the stylesheet into your browser by typing localhost:4200/css/layers.css into the location bar? And if that works, what does the browser report the MIME type to be? – Perak
hey @Aravind, tried ./css.. and the same issue 😞. @Mr Lister, I cannot access the css directly. Maybe its not loading due to this MIME type issue ? – Whooper
@Whooper What do you mean, you cannot access the css directly? Do you get a 404 error? If so, that might well be the cause of the problem. – Perak
@Whooper Were you able to solve this? – Radiator
W
18

Solution 1 (with Bootstrap installed)

All you need to do is:

  1. Go to .angular-cli.json under the root directory of your angular app.

  2. Modify the styles array to include bootstrap before styles.css

    "styles": [
        "../node_modules/bootstrap/dist/css/bootstrap.min.css",
        "styles.css"
      ],

Note: the path to bootstrap is relative to /src/index.html that's why you need "../" before node_modules.

  1. Exit the current session of ng serve and start it again.

Here is an Awesome tutorial

Solution 2 (with Bootstrap referenced)

All you need to do is:

  1. Go to styles.css under the root directory of your angular app.

  2. Add this line at the top:

@import url('https://unpkg.com/[email protected]/dist/css/bootstrap.min.css');

Here is Angular docs

Welldressed answered 14/3, 2018 at 3:43 Comment(0)
L
13

For someone who will face same problem.

The usual reason for this error message is when the browser tries to load that resource, the server returns an HTML page instead. For example, if your router catches unknown paths and displays a default page without a 404 error. Of course that means the path does not return the expected CSS file / image / icon / whatever... ref from here

Lets assume we have Angular 6 project with a file structure like this:

project
    |-src
      |-app
      |-assets
      |-environments 
      |----

lets assume we need to put a theming folder (that contains css files) directly inside src folder.

project
    |-src
      |-app
      |-assets
      |-environments
      |-vendor // Theming
         |-theme-light.css
          |theme-dark.css

if we tried to access that theme file like this:

<link rel="stylesheet" type="text/css" href: '../vendor/theme-dark.css'>

an error will be thrown.

Refused to apply style from 'http://localhost:4200/vendor/theme-dark.css' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.

If we paste that url in the browser, it will not give the plain css file because the path is wrong.

Solution

So What you need to do is find the correct path. (we can find out by past that url in the browse and see what will returned)

In whis case putting ../src/ reference will fix the error

<link rel="stylesheet" type="text/css" href: '../src/vendor/theme-dark.css'>

Note: The exact path and router configuration depends on how you have setup your project and the libraries you are using with Angular.

Liv answered 30/1, 2018 at 12:54 Comment(1)
Thank you! This was a problem we hit after we made changes to our webpack config. – Jennette
T
13

If you already have the styles.css in angularcli.json or angular.json, you don't need it in index.html. The cli will inject the contents automatically. So remove that line from the index.html and everything should work.

Teachin answered 20/6, 2018 at 13:45 Comment(0)
S
11

@sameera207 Answers in comments are correct, relative path must work, I too had same issue and answers of comments are working for me. I tried to reproduce your error, I made css folder at level of index.html and added css file then added path in styles array.

"styles": [
    "styles.css",
    "./css/my-styles.css",
    "../node_modules/bootstrap/dist/css/bootstrap.min.css",
    "../node_modules/tether/dist/css/tether.min.css"
  ],

then restarted server, I mean performed ng serve again and its working. Make sure you have done it and restared server and if still problem persists please let me know, I would be glad to help you.Thanks.

Sigismundo answered 20/2, 2018 at 8:17 Comment(0)
W
7

Try by adding

<base href="/">

at top of all styles in index.html; it works for me

Webby answered 2/5, 2022 at 13:6 Comment(1)
By default it's added in index.html file – Possibility
C
3

I had the same issue when I have installed material-icons using npm i -S material-icons from the terminal.

I have followed the instructions given in the npm package installation and have placed a link in the index.html like <link rel="stylesheet" type="text/css" href=<node_module_path/material-icons/iconfont/material-icons.css>

It has thrown a its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.

You have to actually paste the path mentioned in href in angular.json file under styles array

Don't forget to restart the angular server, you can thank me later

FYI: Angular - V8.x, material-icons - V0.3.1

Thanks

Collapse answered 16/4, 2020 at 22:39 Comment(0)
N
2

I got the same type of error in my angular project. After adding this type="text/html" piece of code the error is gone.

<link rel="stylesheet" type="text/html" href="filename.css">
Neubauer answered 4/5, 2021 at 9:41 Comment(1)
this is the only answer that worked for me. i would still like to know why it worked though, because it was complaining about MIME type to be ('text/html') to begin with. – Avoirdupois
S
2

(*Note: regarding asp.net boilerplate zero (paid version) but could be your solution also *)

Yes, @Franklin, strange though for a paid app making me repeatedly look like a forgetful old man. ;-) But might be system related.

I did found: support.aspnetzero.com/QA/Questions/7742/Refused-to-apply-style-from- :

"run >> gulp build << command on terminal and recreate minified files"

worked for me. (again ;-) )

Slender answered 31/7, 2021 at 1:32 Comment(0)
V
1

in your angular.json, add the config option

"extractCss": false,

like this

"options": {
        
        "aot": true,
        "outputPath": "dist",
        "index": "src/index.html",
        "extractCss": false,
        "main": "src/main.ts",
        "polyfills": "src/polyfills.ts",
        "tsConfig": "src/tsconfig.app.json",
        "assets": [
          "src/favicon.ico",
          "src/assets"
        ],
        "styles": [
...
Ventilation answered 1/3, 2021 at 21:48 Comment(0)
R
0

This is your code which links your layers.css file.

<link rel="stylesheet" type="text/css" href="css/layers.css">

From this line please remove type="text/css".

So, the code will become:

<link rel="stylesheet" href="css/layers.css">

Use this line, I hope It will work now. Thank You

Rushing answered 12/11, 2019 at 17:46 Comment(0)
K
0

make new CSS folder inside the assets folder then put your CSS file inside CSS then link again with the new location

Eg : -  <link rel="stylesheet" href="assets/css/materialize.min.css"> 
Karenkarena answered 12/4, 2020 at 23:29 Comment(0)
E
0

I tried to run an angular code by asp.net zero using ng serve and faced this issue.

Normally all angular project run with the command ng serve. But the asp.net zero framework initially minifies the css file and then do the ng serve process..these 2 things are integrated in the command npm start. If atleast once npm start is done, the minified files are stored in our local... So next time onwards even if you do ng serve , it would be working..

So running npm start fixed the issue for me.

Elle answered 10/5, 2020 at 9:49 Comment(0)
S
0

Had that issue because I have defined the same *.css file, in both the *.html & the angular.json files on angular

Sogdian answered 4/10, 2020 at 16:27 Comment(0)
O
0

remove this line from index.html

<link rel="stylesheet" type="text/css" href="css/layers.css">

and then go to angular.json (since angular 5) or angular-cli.json depend on your version. set the path to your css files in the styles array like below

"styles": [
          "src/style1.css",
          "src/style2.css"
        ],

finally, restart the app. ng serve

Overeat answered 5/7, 2021 at 8:32 Comment(0)
R
0

Check the name file and path is right, in my case in angular I had under the array css

src/styles.css

And in the index.html file I added by mistake this

 <link rel="stylesheet" type='text/css' href="style.css">

The style.css not exists in my case but styles.ccs yes.

Reitman answered 29/12, 2021 at 10:13 Comment(0)
G
0

Step 1: Update your angular.json with the below details.

        "styles": [
          "./node_modules/bootstrap/dist/css/bootstrap.min.css",
          "src/styles.css"
        ],
        "scripts": [
          "./node_modules/jquery/dist/jquery.js",
          "./node_modules/bootstrap/dist/js/bootstrap.js"
        ]

Step 2: Make sure the index.html DONT have the "css" and "js" imports/references.

Gopher answered 5/8, 2022 at 15:53 Comment(0)
A
0

I just had the same problem, it will solve it just by moving them from the node_modules folder to the assert folder. For example...

<script  type="text/javascript" src="assets/jquery/dist/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="assets/bootstrap/dist/css/bootstrap.min.css" />
<script src="assets/bootstrap/dist/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="assets/css/styles.css" />
Anemography answered 19/8, 2022 at 13:24 Comment(0)
H
0

ADD <base href="/"> at top of all styles in index.html; Works for me

Hiphuggers answered 14/6, 2023 at 7:52 Comment(0)
M
0

if you are using bootstrap CDN then you have to import it to src/styles.css files as below

@import url('https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css');
 <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">

the bootstrap version can be changed so you can use the version as yours.

Mcclenaghan answered 13/10, 2023 at 7:20 Comment(0)
M
0

What worked for me is setting the <base href="/"> in my index.html BEFORE all the link tags.

See: https://github.com/froala/angular-froala/issues170#issuecomment-386117678

Malign answered 15/4 at 11:39 Comment(0)

© 2022 - 2024 β€” McMap. All rights reserved.