Html 为什么引导选项卡在使用highcharts时显示宽度不正确的选项卡窗格div?
因此,我使用Twitter的引导程序创建了一个带有标签内容的页面,但是我的起始活动div的内容总是不同于我的其他标签。例如,我在不同的选项卡中使用highcharts.js输入图表,但活动的图表始终显示正确,而其他的图表的宽度不正确 查看下面的示例:Html 为什么引导选项卡在使用highcharts时显示宽度不正确的选项卡窗格div?,html,twitter-bootstrap,highcharts,Html,Twitter Bootstrap,Highcharts,因此,我使用Twitter的引导程序创建了一个带有标签内容的页面,但是我的起始活动div的内容总是不同于我的其他标签。例如,我在不同的选项卡中使用highcharts.js输入图表,但活动的图表始终显示正确,而其他的图表的宽度不正确 查看下面的示例: <div class = "row-fluid"> <div class = "span9"> <div class = "row-fluid">
<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>
试验
-
一个
$(函数(){
$(“#container1”)。高图({
图表:{
},
xAxis:{
类别:[一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月、十二月]
},
系列:[{
数据:[29.9,71.5,106.4,129.2,144.0,176.0,135.6148.5,216.4194.1,95.6,54.4]
}]
});
});
两个
$(函数(){
$(“#container2”)。高图({
图表:{
},
xAxis:{
类别:[一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月、十二月]
},
系列:[{
数据:[29.9,71.5,106.4,129.2,144.0,176.0,135.6148.5,216.4194.1,95.6,54.4]
}]
});
});
三
$(函数(){
$(“#container3”)。高图({
图表:{
},
xAxis:{
类别:[一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月、十二月]
},
系列:[{
数据:[29.9,71.5,106.4,129.2,144.0,176.0,135.6148.5,216.4194.1,95.6,54.4]
}]
});
});
这是我的侧边栏上的内容
在这种情况下,在页面加载时切换活动选项卡使该图表看起来对我来说是正确的,但其余的总是一直延伸到边缘(对于我的数据,我只想填充span9 div的空间。在这种情况下,我只使用了虚拟图表,但这是相同的想法
下面是一个JSFIDLE:
我想问大家的问题是:
这就是我吗
2.)选项卡处于活动状态时到底发生了什么?看看引导css,它似乎处理display:none和display:block,但我不太了解在这种情况下如何工作
3.)这是highcharts问题还是bootstrap问题?我注意到这种情况发生在我的非highchart元素上(比如在侧边栏中显示tweets),所以我倾向于引导
4.)是否有任何解决方案可以让一切保持一致
谢谢大家 对于图表,内嵌样式“宽度”是不同的。我不确定何时以及如何计算这些值,但您可以覆盖css中的值。问题是Highcharts无法计算包含css的容器的宽度:
display:none
,因此应用的是默认宽度(600px)。事实上,浏览器无法计算此类元素的宽度
例如,当您将使用分隔符调整结果窗口的大小时,图表将调整大小并正常工作。所以你有三个选择:
- 在第一次单击该选项卡后渲染图表
- 在开始时渲染图表,但每次单击并调整窗口大小后,请使用新宽度和高度的
chart.setSize(w,h)
- 在开始时呈现图表,但在选项卡之后单击调用
chart.reflow()
display:none
隐藏非活动选项卡引起的:
.tab content>.tab窗格,.pill content>.pill窗格{
显示:无;/*这就是问题所在*/
}
这导致Highcharts无法获得初始化图表的预期宽度,因此默认值为600px
。这将发生在使用相同方法隐藏内容的其他工具上
纯CSS解决方案
而不是用一个额外的重画来解决这个问题
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
$('#container').highcharts().setSize($('#container').width(),$('#container').height());
})
// fix dimensions of chart that was in a hidden element
jQuery(document).on( 'shown.bs.tab', 'a[data-toggle="tab"]', function (e) { // on tab selection event
jQuery( ".contains-chart" ).each(function() { // target each element with the .contains-chart class
var chart = jQuery(this).highcharts(); // target the chart itself
chart.reflow() // reflow that chart
});
})