我正在学习Bootstrap。在入门菜单中,提供的模板很少。我正在玩那个。一个例子是关于固定页脚。我使用了前一个示例中的nav,并希望使用固定页脚进行调整。但垂直滚动条即将到来。 我正在寻找导致垂直滚动条的元素。
这是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>
是否有任何技巧,在这些情况下可以知道哪个元素导致滚动条?我之前遇到过类似的问题,我不记得是否能找到简单的解决方案。
答案 0 :(得分:89)
添加:
* {
outline: 1px solid red;
}
然后当你向下滚动时,你会看到一个非常高的盒子。右键单击它并选择inspect元素。这应该会为您提供所需的信息。
更新:
这是一个漂亮的Chrome插件,可以为您做到这一点:http://pesticide.io/
答案 1 :(得分:14)
将以下内容粘贴到控制台中并滚动。它将罪魁祸首记录在控制台中。
function findScroller(element) {
element.onscroll = function() { console.log(element)}
Array.from(element.children).forEach(findScroller);
}
findScroller(document.body);
答案 2 :(得分:12)
Chris Coyier有一个excellent article解释了你对这个问题所需的一切。
阅读本文后,我个人在我的控制台中使用此代码来找出导致垂直滚动的元素:
在浏览器中按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';
}
}
<强>更新强>
它可能是iframe make页面中垂直滚动的元素。
在这种情况下,您应该使用以下代码检查每个可疑的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';
}
}
答案 3 :(得分:2)
我说你应该使用document.scrollingElement
。
答案 4 :(得分:0)
使用一些浏览器调试工具。点击F12
打开它并检查dom元素。你将能够找到它。
答案 5 :(得分:0)
好吧,如果我从 margin-top 更改为 padding-top 以便容器调整为nav,那么问题就解决了。 删除Firebug中的元素后,我找到了解决方案。所以,快速修复问题已经解决,但我的问题仍然存在。
如何知道导致滚动条的元素?任何伎俩?
另外,为什么margin-top不起作用,但padding-top工作了?
为了明确我做出改变的地方,我正在添加修改后的CSS:
/* Adjust Nav */
#wrap > .container {
padding-top: 60px;
}
答案 6 :(得分:0)
我发现它通常是没有最大宽度的图像:100%
答案 7 :(得分:0)
下面的代码可帮助您找到导致垂直或holizon滚动条的元素。
这将找到导致滚动条的元素并在元素上创建带有红色:5px的边框。
在浏览器的devtool中运行此命令后,检查是否有任何元素具有导致滚动条的'_____target'类。
如果找到该元素,则从html中注释掉该标记,然后刷新并重试。
/* Parameter should be either horizon OR vertical */
let checktype = 'horizon';
(function(which){
style();
var elements = document.querySelectorAll("body *");
var found = false;
elements.forEach(element => {
if( found ) return;
element.classList.add("_____zerospace");
var scrollbar = detectScrollbar(element);
if(!scrollbar[which])
{
console.log(element);
element.classList.add('_____target');
found = true;
}
})
return;
function detectScrollbar(target)
{
//var div = document.getElementById('container_div_id');
var element = document.scrollingElement;
var hasHorizontalScrollbar = element.scrollWidth > element.clientWidth;
var hasVerticalScrollbar = element.scrollHeight > element.clientHeight;
return {horizon: hasHorizontalScrollbar, vertical: hasVerticalScrollbar};
}
function style()
{
var style = document.createElement('style');
style.innerHTML = '._____zerospace { padding:0 !important; margin:0 !important } ._____target{border: solid 5px red}';
document.head.appendChild(style);
}
})(checktype)