【问题标题】:Navbar exceeds the length of the page content when move to the left导航栏向左移动时超过了页面内容的长度
【发布时间】:2017-12-27 22:10:28
【问题描述】:

我正在使用 react-bootstrap 构建导航栏,但遇到以下问题。

当我滚动到顶部/右侧/底部或保持页面静止时,一切看起来都很好。

但是当我向左滚动时,内容右侧出现了一个空白,使得导航栏超出了主体的长度。

这是我的脚本:

const HomePage = () => {
  return (
    <div id="homePageTitle">
        <h1>Home Page</h1>
    </div>
  )
}


class Header extends React.Component {
  render() {
    return (
        <div>
          <Navbar inverse collapseOnSelect id="navbar">
            <Navbar.Header>
              <Navbar.Brand>
                <p>Brand</p>
              </Navbar.Brand>
            <Navbar.Toggle />
            </Navbar.Header>
            <Navbar.Collapse>
              <Nav pullRight>
                <NavItem eventKey={1}>Home</NavItem>
                <NavItem eventKey={2}>Projects</NavItem>
                <NavItem eventKey={3}>Passions</NavItem>
                <NavItem eventKey={4}>Contact</NavItem>
              </Nav>
            </Navbar.Collapse>
          </Navbar>
          <HomePage />
        </div>
    )};
  }

这是我的 CSS:

/*---------Header----------*/
.navbar-brand {
    min-height: 100px;
}

.navbar.navbar-inverse{
    width: 100%;
    height: 100px;
    margin-bottom: 0;
    background-color: lightskyblue;
    border: lightskyblue;
    border-radius: 0;
    position: fixed;
    top: 0;
    transition: opacity 0.5s;
}

.navbar-right {
    margin-top: 30px;
    font-size: 18px;
} 

/*---------HomePage----------*/

#homePageTitle {
    padding-top: 80px;
    padding-bottom: 420px;
    width: 100%;
    text-align: center;
    background-color: lightcoral;
    margin: 0;
    color: #507e9a;
}

即使只是关于为什么会发生这种情况的线索也非常感谢!谢谢!

【问题讨论】:

  • 您能否在codepen.io 上为我们构建一个工作示例来解决您的问题?
  • @RickyDam 我已经构建了一个similar example (相同的css,对JS 的小改动,因为似乎我需要这些改动才能在codepen 中使用react-bootstrap 的导航栏)。但问题并没有出现在 codepen 的版本中。我现在很困惑:(
  • 您向 Don 提到您只是决定禁用水平滚动。您是要这样做还是要我尝试为您找到另一种方法?
  • @RickyDam 嗨,对不起,我没有告诉你。我将简单地禁用水平滚动。感谢您提供帮助。

标签: css reactjs react-bootstrap


【解决方案1】:

我发现有人有类似的问题,并通过禁用水平滚动来解决这个问题post 中的建议。这完美解决了我的问题。

【讨论】:

    【解决方案2】:

    body 的默认边距为 8px。如果你想要那里的空白,然后添加相同的

    margin: 0 8px;

    到导航栏类。或者,您可以添加:

    body{
        margin: 0;
    }
    

    这将完全删除空白。发生这种情况是因为 #homePageTitle 仍在文档流中,而导航栏为 position: fixed 已从文档流中删除,因此不受正文边缘的影响,因为它不再受正文的限制。

    您可以通过添加以下内容来进一步了解这一点:

    body{
        position:relative;
    }
    

    这会将 body 设置为要固定的导航栏的上下文,因此会再次受到 body 的边距的影响。如果您想保留边距,这可能是首选方法,因为您不需要在任何其他 position: fixed 元素上设置边距。

    由于无法使用页面本身,很难确定,但我很确定这是您的问题。

    【讨论】:

    • 感谢您的回答。但事实是,我已经将position:relative添加到body,并且我也尝试了您提出的其他两个建议,但问题仍然存在。我尝试在 codepen 中构建一个working example,但问题没有出现。您知道为什么会发生这种情况吗?
    • 嗨,唐。我发现有人遇到类似问题并决定简单地禁用水平滚动。 stackoverflow.com/questions/17756649/…
    • 我真的不建议禁用水平滚动。如果您不希望它在那里,那么这是一个很好的 hack,但是有一个根本原因导致您的标题变得太宽并且最终会为您提供更清洁的 CSS。现在对我来说,这听起来像是一个填充/边距问题。你试过box-sizing: border-box;吗??
    • 是的,我已经试过box-sizing: border-box,问题还是没有解决。您是否认为问题可能是由浏览器本身的某些默认设置引起的(正如我在上面提到的帖子中所建议的那样)?
    • 如果它是默认浏览器设置,那么我希望它会出现在 codepen 中。如果没有看到和玩过它的例子,我真的想不出其他任何东西。对不起:/至少你有一些解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2018-07-10
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多