1

I have a BrowserRouter set up in my main.js file and it switches between the desired pages when I visit the respective URLs

index.html

<link rel="stylesheet" href="css/style.css" />
<link rel="stylesheet" href="css/main.css" />

main.js

return (
    <StateContext.Provider value={state}>
      <DispatchContext.Provider value={dispatch}>
        <BrowserRouter>
          <Header />
          <Switch>
            <Route path="/ingredient">
              <IngredientPage />
            </Route>
            <Route path="/ingredientsList/:id" exact>
              <IngredientListPage />
            </Route>
            <Route path="/create-recipe">
              <CreateRecipe />
            </Route>
            <Route path="/list-recipes">
              <ListRecipes />
            </Route>
            <Route>
              <NotFound />
            </Route>
          </Switch>
          <Footer />
        </BrowserRouter>
      </DispatchContext.Provider>
    </StateContext.Provider>
  );

My issue is that the CSS files are loaded with the wrong URL whenever I visit a route that has a parameter.

Example 1 (expected) I visit a route URL without a parameter http://localhost:3000/ingredient The CSS files are successfully loaded e.g. http://localhost:3000/css/style.css and styling applied to the page

Example 2 (unexpected) I visit a URL with a parameter http://localhost:3000/ingredientsList/1 The page loads but no styling is applied. CSS files are requested from the URL up to where the parameter is added e.g. http://localhost:3000/ingredientsList/css/style.css

Any idea what's causing the URL to change here and how it can be fixed?

EDIT: Ok, I have it working now by hardcodeing the URL in the index.html

<link rel="stylesheet" href="http://localhost:3000/css/style.css" />
<link rel="stylesheet" href="http://localhost:3000/css/main.css" />

Not exactly ideal though as the base URL is now hardcoded

1 Answer 1

3

So the issue here is just that your css was being accessed from a relative path instead of the root path.

I bet your link looked like this:

<link rel="stylesheet" href="css/style.css" />
<link rel="stylesheet" href="css/main.css" />

Which will start at the current directory and then look for the css directory, so when you're in a deeper file path it's looking at the wrong place.

What you need is something like this:

<link rel="stylesheet" href="/css/style.css" />
<link rel="stylesheet" href="/css/main.css" />

The leading / says to go back to the root directory and then access the css directory from there.

The fact that it happened when you were on a parameter page might mean that your css href was "../css/main.css" or "./css/main.css" or something. In any case, changing it to what I've suggested should fix your problem without hardcoding the base url.

Sign up to request clarification or add additional context in comments.

1 Comment

That was Perfect! why didn't I find it two days earlier? :(

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.