因此,我正在使用Twitter的Bootstrap创建一个带有选项卡式内容的页面,但是起始活动div的内容始终与其他选项卡的内容不同。例如,我在不同的选项卡中使用highcharts.js插入图表,但活动的一个始终正确显示,而其他的宽度不正确。
查看以下示例:
<div class = "row-fluid"> <div class = "span9"> <div class = "row-fluid"> <h3>Test</h3> <ul class="nav nav-tabs"> <li class = "active"> <a data-toggle = "tab" href = "#one">One</a> </li> <li><a data-toggle = "tab" href = "#two">Two</a></li> <li><a data-toggle = "tab" href = "#three">Three</a></li> </ul> <div class="tab-content"> <div class="tab-pane active" id="one" > <h4>One</h4> <div id = "container1"></div> <script type = "text/javascript"> $(function () { $('#container1').highcharts({ chart: { }, xAxis: { categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] }, series: [{ data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4] }] }); }); </script> </div> <div class="tab-pane" id="two" > <h4>Two</h4> <div id = "container2"></div> <script type = "text/javascript"> $(function () { $('#container2').highcharts({ chart: { }, xAxis: { categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] }, series: [{ data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4] }] }); }); </script> </div> <div class="tab-pane" id="three" > <h4>Three</h4> <div id = "container3"></div> <script type = "text/javascript"> $(function () { $('#container3').highcharts({ chart: { }, xAxis: { categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] }, series: [{ data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4] }] }); }); </script> </div> </div> </div> </div> <div class = "span3"> <p>Here is the content on my sidebar</p> </div> </div>
在这种情况下,在页面加载时切换活动选项卡会使该图表对我来说是正确的,但其余部分始终一直延伸到边缘(就我的数据而言,我只想填充跨度的空间9) div。在这种情况下,我只是使用了虚拟图表,但这是相同的想法。
这是一个JSFiddle:http : //jsfiddle.net/dw9tn/
我对大家的问题是:
1.)这就是我吗?
2)当选项卡被激活时,到底发生了什么?看着引导CSS,这似乎与display:none和display:块有关,但是在这种情况下,我对它的工作原理没有很好的了解。
3.)这是高图问题还是引导问题?我注意到这种情况发生在非Highchart元素上(例如在侧栏中显示推文),因此我倾向于自举。
4.)有什么解决方案可以使所有内容保持一致?
谢谢你们!
这不是Highcharts问题,至少不是一个问题本身,该问题是由Bootstrap用于display:none隐藏不活动的选项卡的事实引起的:
display:none
.tab-content > .tab-pane, .pill-content > .pill-pane { display: none; /* this is the problem */ }
这将导致Highcharts无法获得预期的宽度来初始化图表,因此默认为600px。使用相同方法隐藏内容的其他工具也会发生这种情况。
600px
无需使用额外的重绘或延迟的初始化来解决该问题,我们可以使用来实现隐藏效果height: 0; overflow-y: hidden,这样,隐藏的选项卡窗格仍然存在并且有效width:
height: 0; overflow-y: hidden
width
/* bootstrap hack: fix content width inside hidden tabs */ .tab-content > .tab-pane:not(.active), .pill-content > .pill-pane:not(.active) { display: block; height: 0; overflow-y: hidden; } /* bootstrap hack end */
更新 :现在,我们直接通过定位非活动标签页:not(.active),以避免可能产生的副作用。
:not(.active)
该解决方案是无缝的,因此您不必担心图表是否在选项卡窗格中。而且它非常有效,因为它首先解决了宽度问题,因此以后无需通过使用javascript进行大小调整/重绘/重排来解决宽度问题。
由于CSS级联顺序规则,因此需要 在引导CSS 之后 加载此补丁,简而言之, 后一个规则将获胜。
提示:切换到“ 配置文件” 选项卡以查看区别。