在 FlexBox 中使用 ScrollTop 不起作用

Posted

技术标签:

【中文标题】在 FlexBox 中使用 ScrollTop 不起作用【英文标题】:Using ScrollTop in FlexBox does not work 【发布时间】:2018-03-12 05:13:00 【问题描述】:

nav、main、footer,共有 3 个标签。我将它们应用于 FlexBox:

body 
  color: #ddd;
  font-family: Gotham;
  background: url(../assets/body-background.png);
  display: flex;
  min-height: 100%;
  flex-direction: column;

main 
  flex: 1;

一切看起来都那么好。但在那之后事情变得更糟了

我的脚本文件中有以下代码(使用 jQuery):

$('.scroll-top').click(function () 
  $('body').animate(
     scrollTop: 0
  , 1000);
)

但页面滚动动画不起作用

jsfiddle

$('a').click(function()
	$('body').animate(
      scrollTop: 0
    , 1000);
)
nav
  padding: 10px;
  background: grey;

main
  height:800px;
  background: lightgrey;

footer
  padding: 10px;
  background: grey;

body
  display: flex;
  min-height: 100vh;
  flex-direction: column;

main
  flex: 1;

a
  position: fixed;
  right: 40px;
  bottom: 40px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<nav>nav content</nav>
<main>main content</main>
<a href="javascript:;">scroll top</a>
<footer>footer content</footer>

【问题讨论】:

已编辑问题jsfiddle.net/vcode/yex3199w 【参考方案1】:

它在 Chrome 中运行良好,但在 Firefox 中无法运行。要在 Firefox 中滚动,您必须在 html 上使用 scrollTop

$('body,html').animate(
  scrollTop: 0
, 1000);

main 也不会占用您在 Firefox 中分配给它的 800px。将 flex: 1 更改为 flex: 1 1 800px 以获得相同的跨浏览器行为。

请看下面的演示:

$('a').click(function() 
  $('body,html').animate(
    scrollTop: 0
  , 1000);
)
nav 
  padding: 10px;
  background: grey;


main 
  height: 800px;
  background: lightgrey;


footer 
  padding: 10px;
  background: grey;


body 
  display: flex;
  min-height: 100vh;
  flex-direction: column;


main 
  flex: 1 1 800px; /* NEW */


a 
  position: fixed;
  right: 40px;
  bottom: 40px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<nav>nav content</nav>
<main>main content</main>
<a href="javascript:;">scroll top</a>
<footer>footer content</footer>

【讨论】:

我实际上并没有使用 800px 作为主标签。我很容易写了800px。我实际上并没有使用 800px 作为主标签。我很容易写了800px。我尝试并尝试了您建议的脚本代码。非常感谢。 只需在 jquery 标记为我修复它之前添加“html”。谢谢!

以上是关于在 FlexBox 中使用 ScrollTop 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery scrollTop 在 Chrome 中不工作但在 Firefox 中工作

使用 FlexBox(或其他 css),是不是可以在每行中有不同数量的相同大小的列(即不使用空 div)?

UEditor图片焦点错位,火狐document.body.scrollTop不管用的问题

动态选项卡中的 ScrollTop

Safari 8:Flexbox 的“justify-content”根本不起作用

Flexbox 和 vh 高度单位在 IE11 中不兼容吗?