marc-leopold/components/ContentPage.vue

140 lines
2.2 KiB
Vue
Raw Normal View History

2019-01-03 14:06:28 +00:00
<template>
<div class="content-page">
2019-01-03 17:52:38 +00:00
<h1 class="page-heading">{{ heading }}</h1>
2019-01-03 14:06:28 +00:00
<section class="content-container">
2019-01-03 18:15:02 +00:00
<div class="content">
<slot></slot>
</div>
2019-01-03 14:06:28 +00:00
</section>
2019-01-03 14:49:25 +00:00
<div class="background background-container">
<div class="background background-loading"
:style="loadingStyle"></div>
<div class="background background-img"
:style="backgroundStyle"></div>
</div>
2019-01-03 14:06:28 +00:00
</div>
</template>
<script>
export default {
props: {
bgLoading: {
type: String,
required: false,
default: function () {
2019-01-03 14:49:25 +00:00
return 'linear-gradient(to top, orange, green)'
2019-01-03 14:06:28 +00:00
}
},
img: {
type: String,
required: false,
default: function () {
return 'url(https://via.placeholder.com/1920x1080)'
}
},
heading: {
type: String,
required: true
}
},
data () {
return {
}
},
computed: {
loadingStyle () {
return {
2019-01-03 14:49:25 +00:00
background: this.bgLoading
}
},
backgroundStyle () {
return {
2019-01-03 14:55:20 +00:00
backgroundImage: this.img
2019-01-03 14:06:28 +00:00
}
}
},
methods: {
}
}
</script>
<style lang="scss" scoped>
2019-01-03 17:52:38 +00:00
$z-index-bottom: 5;
$z-index-top: 10;
2019-01-03 14:06:28 +00:00
.content-page {
position: relative;
2019-01-03 17:52:38 +00:00
display: flex;
flex-direction: column;
2019-01-03 14:06:28 +00:00
width: 100%;
height: 100%;
padding: $site-menu__header-width 0 0 0;
@media (min-width: $bp__layout) {
padding: 0 0 0 $site-menu__header-width;
}
background-color: rgba(black, .1); // TEMP
}
2019-01-03 14:49:25 +00:00
.content-container {
2019-01-03 17:52:38 +00:00
z-index: $z-index-top;
2019-01-03 14:49:25 +00:00
position: relative;
2019-01-03 17:52:38 +00:00
height: 100%;
2019-01-03 18:15:02 +00:00
width: 100%;
2019-01-03 17:52:38 +00:00
overflow-y: auto;
overflow-x: hidden;
@media (min-width: $bp__layout) {
position: absolute;
top: 0;
right: 0;
}
2019-01-03 14:49:25 +00:00
}
2019-01-03 18:15:02 +00:00
.content {
position: absolute;
width: 100%;
top: 0;
right: 0;
@media (min-width: $bp__layout) {
width: 50%;
}
}
2019-01-03 14:49:25 +00:00
.background-container {
2019-01-03 17:52:38 +00:00
z-index: $z-index-bottom
}
.page-heading {
z-index: $z-index-top;
position: relative;
@media (min-width: $bp__layout) {
max-width: 50%;
padding-right: $site-menu__header-width;
}
2019-01-03 14:49:25 +00:00
}
.background {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
}
2019-01-03 14:55:20 +00:00
.background-img {
background-size: cover;
2019-01-03 17:52:38 +00:00
background-position: center center;
2019-01-03 14:55:20 +00:00
opacity: .5;
}
2019-01-03 14:06:28 +00:00
</style>