【问题标题】:Bootstrap - messed up @media and overflow issueBootstrap - 搞砸了@media和溢出问题
【发布时间】:2015-05-31 07:25:42
【问题描述】:

https://jsfiddle.net/537wen91/

我正在使用 Bootstrap,在示例中,如果您使 html 视图变宽,滚动条会消失,而当视图变窄时,滚动条会出现。这就是我想要的。当我处于“窄视图”时,问题就开始了:向下滚动到灰色框,现在展开 html 视图,看看滚动条是如何消失的(好),但我也丢失了顶部的文本(不好)。为什么我顶部的文字不见了?

编辑澄清

它的工作方式是:在页面加载时 - 不要滚动到任何地方并拉伸屏幕,以便您在一行中看到所有彩色列。您会在顶部看到一些文本,在底部看到列,没有滚动条。应该是这样的。

这样它不会:刷新页面。向下滚动到粉红色的列。现在拉伸它,使所有彩色列出现在一行上。看到我在顶部的文字消失了吗?为什么?

如果还是不清楚,我就得录屏了……

HTML

<div class="container-fluid">
    <div class="row">
        <div class="col-md-2">
             <h2>title</h2>

        </div>
        <div class="col-md-4">
             <h2>title</h2>

            <p>2 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus et ultrices neque, vel vestibulum turpis. In ex nunc, vulputate at quam vitae, ultrices vestibulum velit. Phasellus lorem orci, maximus vitae tristique a, sollicitudin sed mauris. Donec ipsum nibh, pulvinar quis nulla at, cursus congue odio. Cras accumsan sem erat, volutpat elementum ante accumsan sed.</p>
        </div>
        <div class="col-md-4">
             <h2>title</h2>

            <p>bbb</p>
        </div>
        <div class="col-md-2">
             <h2>title</h2>

            <p>bbb</p>
        </div>
    </div>
    <div class="row">
        <div class="col-md-12">
             <h2>title</h2>

        </div>
    </div>
    <div id="see" class="row">
        <div class="col-md-2" style="background-color: #FFC;">...</div>
        <div class="col-md-2" style="background-color: #CCC;">...</div>
        <div class="col-md-2" style="background-color: #CCC;">...</div>
        <div class="col-md-2" style="background-color: #FC9;">...</div>
        <div class="col-md-2" style="background-color: #CCF;">...</div>
        <div class="col-md-2" style="background-color: #CCF;">...</div>
    </div>
</div>
<nav class="navbar navbar-fixed-bottom">
    <p>Place sticky footer content here.</p>
</nav>

CSS

html {
    /*position: relative;
    min-height: 100%;*/
    height: 100%;
}
body {
    overflow: hidden;
}
#see > div {
    height: 1200px;
}
.navbar {
    margin-bottom: 0;
    min-height: inherit;
}
nav {
    background-color: #222;
    color: #666;
}
@media (max-width: 992px) {
    body {
        overflow: auto;
    }
    #see > div {
        height: 500px;
    }
}

JS

$(window).bind('resize load', function () {
    if ($(this).width() <= 992) {
        $('nav').removeClass('navbar-fixed-bottom');
    } else {
        $('nav').addClass('navbar-fixed-bottom');
    }
});

【问题讨论】:

  • 在这里使用 FF36,你的小提琴工作正常!
  • 我没有看到任何消失的文字。你可以说得更详细点吗?什么元素消失了?
  • 在顶部查看我的说明。
  • 问题似乎是#see &gt; div 更新了宽度,但没有更新高度。将其保留为 1200 像素并将您的内容“隐藏”在视口之外
  • 是的,这就是问题所在。

标签: css twitter-bootstrap responsive-design media-queries


【解决方案1】:

尝试替换:

body { overflow: hidden; }

body { overflow: auto; }

关于溢出值的更多信息:http://www.w3schools.com/cssref/pr_pos_overflow.asp

【讨论】:

  • 您是否只是想在宽屏视口中隐藏“#see”div 的溢出?如果是这样,请将body { overflow: hidden; } 替换为#see { overflow: hidden; } 如果不是,您能否进一步解释您要达到的目标?
  • 我试过了 - 不工作。它对你有用吗?我希望在宽屏幕上没有滚动条。此外,#see 列 - 彩色的列中将有背景图像,我希望它们覆盖(跨越)用户屏幕的其余部分,这就是我将它们设为 1200 像素的原因。
【解决方案2】:

如上所述,问题在于#see div 改变了宽度而不是高度,并且当页面滚动时,滚动保持,将文本留在视口之外。像这样的东西(请原谅我糟糕的 MSPaint 技能):

一种可能的解决方案是在进行更改之前滚动到页面顶部,因此文本始终可见。只需添加一行代码即可实现:

$(window).scrollTop(0);

你可以在这里看到它的工作原理:https://jsfiddle.net/537wen91/12/


一种可能的纯 CSS 解决方案是,如果文本高度不变,则为 #see div 添加高度 calc(100% - HEIGHT_OF_TEXT)。但我没试过。

【讨论】:

  • 我更新了链接。在函数开始之前,不是在else 分支内
  • 解决了这个问题。如果没有更好的 CSS 解决方案,我将使用这个 JS 解决方案。这是我这边的一些错误 CSS 导致的错误吗?还是 Bootstrap 的东西?
  • 我会说两者都不是。这不是错误,也不是由错误的 CSS 引起的……用文本解释起来很复杂,如果我是正确的,我不知道只有 CSS 的解决方案。想象一下,您的窗口高 500 像素,页面高 1200 像素,文本占据顶部 300 像素(宽度无关紧要)。 body 有一个overflow:auto,所以它显示滚动条,你滚动 400px 留下文本。现在在您的代码中,您将正文显示更改为overflow:hidden。滚动条不再存在,但滚动值保持不变(400 像素),将文本排除在外
  • 让我试着画个草图,我觉得这样解释更容易
【解决方案3】:

您可能需要使用 Bootstrap 的网格布局来定义不同视图大小的情况:http://getbootstrap.com/css/#grid
在您的班级中,为这些定义网格大小: .col-xs- .col-sm- .col-md- .col-lg-

在你的类中添加 hidden-xs 以隐藏在超小,或在中等视图中隐藏,等等(在下面的 Fiddle 中,如果你使结果窗口的宽度足够窄,你会看到这个发生,

当您使用较小的屏幕尺寸时,假设您想显示两个“标题”元素而不是四个,您可以将 HTML 更改为:

<div class="row">
   <div class="hidden-xs col-md-2">
   <div class="col-xs-6 col-md-4">
   <div class="col-xs-6 col-md-4">
   <div class="hidden-xs col-md-2">
</div>

这使得在较小的屏幕上,只有中间的两个元素将显示,因为它们将占据网格的所有 12 列。或者你可以在较小的视图上做到这一点。这是一个小提琴:https://jsfiddle.net/1dtnd59s/1/

基本上,必须调整不同显示尺寸的列选项,如果您可以在小型显示器上隐藏某些元素,那将更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    相关资源
    最近更新 更多