I’m trying to make the background color of the landing page orange, but the issue is that what I currently have makes all the pages orange.
I tried adding scoped
to the landing page so it would style only that page, but when I do this, the entire page isn’t orange anymore.
The end goal is to only affect the landing page.
I’ve tried HTML and Body already instead of the ‘ * ‘, those don’t work in this case either.
landingpage.vue
:
<template>
<div class="container">
<div class=landing>
<h1>Hello.</h1>
<router-link to="/work">
<button id="work" type="button">See my work</button>
</router-link>
<router-link to="/home">
<button id="home" type="button">Go home</button>
</router-link>
</div>
</div>
</template>
<script>
export default {
name: 'Landing',
};
</script>
<style scoped>
* {
background: orange;
}
h1 {
margin-top: 100px;
text-align: center;
font-size: 80px;
color: green;
}
#work {
color: green;
border: none;
font-size: 25px;
text-decoration: none;
margin: 0;
position: absolute;
top: 50%;
left: 50%;
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
#work:hover {
color: white;
}
#home{
color: green;
border: none;
font-size: 15px;
text-decoration: none;
margin: 0;
position: absolute;
top: 70%;
left: 50%;
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
#home:hover {
color: white;
}
</style>
Advertisement
Answer
HTML
and body
are outside the application (+ Vue Router = SPA => the body/html not re-render when you go from page-1
to page-2
).
“problem one” – SPA
On Single File Component – body
, html
Styles applies only if the page-refresh (Go from page-1
to page-2
and click F5 for example):
<!-- page_2 -->
<style>
body{
background: orange; /* not apply if you go from page-1 to page-2 */
}
</style>
“problem two” – “out of scoped”
scoped
== CSS will apply to elements of the current component
only.
body
is not a part of the current scoped component
.
Hello World solution
The most basic “hello world” not dynamic idea to solve this is to use Lifecycle-Hooks– On created
change body background by simple JS. On destroyed
remove the background.
<script>
export default {
name: "orange-page",
created: function () {
document.body.style.backgroundColor = "orange";
},
destroyed: function () {
document.body.style.backgroundColor = null;
},
};
</script>
“min:100vh app”
One more idea is to add “wrapper” + style min:100vh
inside your #app
(The #app will cover the entire body/html ***set: body { margin: 0;}
.
Related example: https://www.pluralsight.com/guides/change-page-background-color-each-route
More ideas:
Changing body styles in vue router
css
In general use:
body{
background: orange;
}
Not (*
==> selects all elements):