如何知道哪个 HTML 元素导致垂直滚动条
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 
原文地址: http://stackoverflow.com/questions/19095964/
Warning: these are provided under cc-by-sa 4.0 license.  You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to Know Which HTML Element is Causing Vertical Scroll Bar
提问by Satya Prakash
I am learning Bootstrap. On the getting started menu, there are few templates given. I am playing with that. One example is about fixed Footer. I used nav from previous example and wanted to adjust that with fixed footer. But vertical scrollbar is coming. I am looking for element which is causing Vertical Scroll Bar.
我正在学习Bootstrap。在入门菜单上,给出的模板很少。我正在玩那个。一个例子是关于固定页脚。我使用了之前示例中的导航,并希望使用固定页脚对其进行调整。但是垂直滚动条来了。我正在寻找导致垂直滚动条的元素。
Here is HTML:
这是 HTML:
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Bootstrap, from Twitter</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="description" content="">
        <meta name="author" content="">
        <!-- Le styles -->
        <link href="css/bootstrap.css" rel="stylesheet">
        <style type="text/css">
            /* Sticky footer styles
            -------------------------------------------------- */
            html,
            body {
                height: 100%;
                /* The html and body elements cannot have any padding or margin. */
            }
            /* Wrapper for page content to push down footer */
            #wrap {
                min-height: 100%;
                height: auto !important;
                height: 100%;
                /* Negative indent footer by it's height */
                margin: 0 auto -60px;
            }
            /* Set the fixed height of the footer here */
            #push,
            #footer {
                height: 60px;
            }
            #footer {
                background-color: #f5f5f5;
            }
            /* Lastly, apply responsive CSS fixes as necessary */
            @media (max-width: 767px) {
                #footer {
                    margin-left: -20px;
                    margin-right: -20px;
                    padding-left: 20px;
                    padding-right: 20px;
                }
            }
            /* Custom page CSS
            -------------------------------------------------- */
            /* Not required for template or sticky footer method. */
            .container {
                width: auto;
                max-width: 680px;
                height: auto;
            }
            .container .credit {
                margin: 20px 0;
            }
            /* Adjust Nav */
            #wrap > .container {
                margin-top: 60px;
            }
        </style>
        <link href="css/bootstrap-responsive.css" rel="stylesheet">
        <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
        <!--[if lt IE 9]>
          <script src="html5shiv.js"></script>
        <![endif]-->
        <!-- Fav and touch icons -->
        <link rel="apple-touch-icon-precomposed" sizes="144x144" href="ico/apple-touch-icon-144-precomposed.png">
        <link rel="apple-touch-icon-precomposed" sizes="114x114" href="ico/apple-touch-icon-114-precomposed.png">
        <link rel="apple-touch-icon-precomposed" sizes="72x72" href="ico/apple-touch-icon-72-precomposed.png">
        <link rel="apple-touch-icon-precomposed" href="ico/apple-touch-icon-57-precomposed.png">
        <link rel="shortcut icon" href="ico/favicon.png">
    </head>
    <body>
        <div id="wrap">
            <div class="navbar navbar-inverse navbar-fixed-top" >
                <div class="navbar-inner">
                    <div class="container">
                        <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                        </button>
                        <a class="brand" href="#">Project name</a>
                        <div class="nav-collapse collapse">
                            <ul class="nav">
                                <li class="active"><a href="#">Home</a></li>
                                <li><a href="#about">About</a></li>
                                <li><a href="#contact">Contact</a></li>
                            </ul>
                        </div><!--/.nav-collapse -->
                    </div>
                </div>
            </div>
            <div class="container">
                <h1>Bootstrap starter template</h1>
                <p>Use this document as a way to quick start any new project.<br> All you get is this message and a barebones HTML document.</p>
            </div> <!-- /container -->
            <div id="push"></div>
        </div> <!-- End Wrap -->
        <div id="footer">
            <div class="container">
                <p class="muted credit">Example courtesy <a href="http://martinbean.co.uk">Martin Bean</a> and <a href="http://ryanfait.com/sticky-footer/">Ryan Fait</a>.</p>
            </div>
        </div>
        <!-- Le javascript
        ================================================== -->
        <!-- Placed at the end of the document so the pages load faster -->
        <script src="../jquery.js"></script>
        <script src="js-ext/bootstrap-transition.js"></script>
        <script src="js-ext/bootstrap-alert.js"></script>
        <script src="js-ext/bootstrap-modal.js"></script>
        <script src="js-ext/bootstrap-dropdown.js"></script>
        <script src="js-ext/bootstrap-scrollspy.js"></script>
        <script src="js-ext/bootstrap-tab.js"></script>
        <script src="js-ext/bootstrap-tooltip.js"></script>
        <script src="js-ext/bootstrap-popover.js"></script>
        <script src="js-ext/bootstrap-button.js"></script>
        <script src="js-ext/bootstrap-collapse.js"></script>
        <script src="js-ext/bootstrap-carousel.js"></script>
        <script src="js-ext/bootstrap-typeahead.js"></script>
    </body>
</html>
Is there any trick, which works in these cases to know which Element is causing Scroll Bar?I faced similar problem earlier, I do not remember if I could find the easy solution.
有什么技巧可以在这些情况下知道哪个元素导致滚动条?我之前遇到过类似的问题,我不记得是否能找到简单的解决方案。
采纳答案by Satya Prakash
Ok, I got that if I change from margin-topto padding-topfor container to adjust for nav then problem is solved. I reached to the solution after deleting elements in Firebug. So, quick fix problem is solved but my questions are still open.
好的,我明白了,如果我将容器从margin-top更改为padding-top以调整导航,那么问题就解决了。在 Firebug 中删除元素后,我找到了解决方案。因此,快速修复问题已解决,但我的问题仍然存在。
How to know which element is causing scroll bar? Any trick?
如何知道哪个元素导致滚动条?有什么技巧吗?
Also, why margin-top is not working but padding-top has worked?
另外,为什么 margin-top 不起作用但 padding-top 起作用了?
To make clear where I made change, I am adding the modified CSS:
为了弄清楚我在哪里进行了更改,我添加了修改后的 CSS:
   /* Adjust Nav */
    #wrap > .container {
        padding-top: 60px;
    }
回答by Jeffpowrs
Add:
添加:
  * {
   outline: 1px solid red;
  }
Then when you scroll down you should see one really tall box. Right click on it and select inspect element. That should give you the information you need.
然后当您向下滚动时,您应该会看到一个非常高的框。右键单击它并选择检查元素。这应该给你你需要的信息。
UPDATE:
更新:
Here is a nifty chrome plugin that can do that for you : http://pesticide.io/
这是一个漂亮的 chrome 插件,可以为您做到这一点:http: //pesticide.io/
回答by Mosijava
There is an excellent articleby Chris Coyier which explain everything you need about this problem.
Chris Coyier撰写了一篇出色的文章,其中解释了有关此问题的所有信息。
after reading this article, I personally use this code in my console to find out which element cause vertical scroll:
看完这篇文章后,我个人在我的控制台中使用这段代码来找出导致垂直滚动的元素:
press F12in your Browser then choose consoleand copy paste this code there and press enter
F12在浏览器中按然后选择console并复制粘贴此代码,然后按 Enter
var all = document.getElementsByTagName("*"), i = 0, rect, docWidth = document.documentElement.offsetWidth;
for (; i < all.length; i++) {
    rect = all[i].getBoundingClientRect();
    if (rect.right > docWidth || rect.left < 0){
        console.log(all[i]);
        all[i].style.border = '1px solid red';
    }
}
Update:
it might be an element inside an iframe make page to vertically scroll.
in this case you should check every suspected iframe with this code:
更新:
它可能是 iframe 中的一个元素,使页面垂直滚动。在这种情况下,您应该使用以下代码检查每个可疑的 iframe:
var frame = document.getElementsByTagName("iframe"); 
frame = frame[0];
frame = (frame.contentWindow || frame.contentDocument);
var all = frame.document.getElementsByTagName("*"), i = 0, rect, docWidth = document.documentElement.offsetWidth;
for (; i < all.length; i++) {
    rect = all[i].getBoundingClientRect();
    if (rect.right > docWidth || rect.left < 0){
        console.log(all[i]);
        all[i].style.border = '1px solid red';
    }
}
回答by zhirzh
I'd say you should use document.scrollingElement.
我会说你应该使用document.scrollingElement.
回答by lcharbon
Paste the below in the console and scroll. It will log the culprit in the console.
将以下内容粘贴到控制台中并滚动。它将在控制台中记录罪魁祸首。
function findScroller(element) {
    element.onscroll = function() { console.log(element)}
    Array.from(element.children).forEach(findScroller);
}
findScroller(document.body);
回答by Satbir Kira
I find it's usually an image without a max-width: 100%
我发现它通常是没有最大宽度的图像:100%
回答by Blaise
Use some browser debugging tool. Hit F12to open it and check the dom elements. You'll be able to find it.
使用一些浏览器调试工具。点击F12打开它并检查 dom 元素。您将能够找到它。

