由于 div 的高度,页面未从顶部开始
Page doesn't start at the top due to height of div
我目前正在使用 Vuejs 并路由到其他页面。对于我的 link 照片,我想要一张覆盖整个屏幕的主封面照片。
<template>
<div id="album-container">
<div class="cover-image"></div>
<section class='intro'>Lorem </section>
<div class="image-flex-wrap">
<div class="image-cell" v-for="image in images">
<img :src="image">
</div>
</div>
</div>
</template>
.cover-image {
background: url('my photo') #fff no-repeat center center;
background-size: cover;
height: 100vh;
}
这按我想要的方式显示页面,但是当我从之前向下滚动的页面路由到此页面时,问题就出现了。它不是从页面顶部开始,而是从我的封面图片的中间开始 div。我认为问题与高度有关:100vh,因为如果我将其替换为位置:绝对和 100% 的宽度,那么页面将从顶部开始。但是,我想避免使用绝对定位,但我对 css 的了解还不足以理解为什么会发生这种情况。
可能也与你的vue-router
配置的scrollBehaviour有关,尝试在配置中添加以下scrollBehaviour
:
export default new Router({
mode: 'history',
scrollBehavior: (to, from, savedPosition) => {
if (to.hash) {
return {selector: to.hash}
} else {
return {x: 0, y: 0}
}
},
routes: [
{ path: '/', component: landingView },
....
....
{ path: '/healthcheck', name: 'healthcheck', component: healthCheckView }
]
})
感谢您的建议。
事实证明问题与 Vuejs 无关。我没有提到我正在使用 Material Design Lite,因为我没想到它是原因,但不幸的是。由于它的工作方式,您不再通过 MDL 提供的 .mdl-layout__content class 在 window 对象上滚动。这就是与 window 相关的所有滚动属性都返回 0 的原因。
我只是在我的路线上设置了一个 watch 方法来强制 scrollTop。
watch: {
$route() {
document.getElementsByClassName('mdl-layout').scrollTop = 0;
}
}
我目前正在使用 Vuejs 并路由到其他页面。对于我的 link 照片,我想要一张覆盖整个屏幕的主封面照片。
<template>
<div id="album-container">
<div class="cover-image"></div>
<section class='intro'>Lorem </section>
<div class="image-flex-wrap">
<div class="image-cell" v-for="image in images">
<img :src="image">
</div>
</div>
</div>
</template>
.cover-image {
background: url('my photo') #fff no-repeat center center;
background-size: cover;
height: 100vh;
}
这按我想要的方式显示页面,但是当我从之前向下滚动的页面路由到此页面时,问题就出现了。它不是从页面顶部开始,而是从我的封面图片的中间开始 div。我认为问题与高度有关:100vh,因为如果我将其替换为位置:绝对和 100% 的宽度,那么页面将从顶部开始。但是,我想避免使用绝对定位,但我对 css 的了解还不足以理解为什么会发生这种情况。
可能也与你的vue-router
配置的scrollBehaviour有关,尝试在配置中添加以下scrollBehaviour
:
export default new Router({
mode: 'history',
scrollBehavior: (to, from, savedPosition) => {
if (to.hash) {
return {selector: to.hash}
} else {
return {x: 0, y: 0}
}
},
routes: [
{ path: '/', component: landingView },
....
....
{ path: '/healthcheck', name: 'healthcheck', component: healthCheckView }
]
})
感谢您的建议。
事实证明问题与 Vuejs 无关。我没有提到我正在使用 Material Design Lite,因为我没想到它是原因,但不幸的是。由于它的工作方式,您不再通过 MDL 提供的 .mdl-layout__content class 在 window 对象上滚动。这就是与 window 相关的所有滚动属性都返回 0 的原因。
我只是在我的路线上设置了一个 watch 方法来强制 scrollTop。
watch: {
$route() {
document.getElementsByClassName('mdl-layout').scrollTop = 0;
}
}