Tab 面板容器 #tab_panel 內的子元素使用 float: left,導致父容器**高度塌陷**(無法被撐開)。切換顯示/隱藏時,未觸發重新計算高度。
#dialog_select_blocks2 #block_tabs #tab_panel {
width: 480px;
clear: both;
padding: 5px 0;
/* 缺少清除浮動機制 */
}
#dialog_select_blocks2 #block_tabs #tab_panel div {
display: inline-block; /* 此處無效,子元素是 float */
}
#dialog_select_blocks2 #block_tabs #tab_panel div ul li {
float: left; /* 罪魁禍首 */
width: 100px;
...
}
#dialog_select_blocks2 #block_tabs #tab_panel {
clear: both;
padding: 5px 0;
width: 480px;
overflow: auto; /* 觸發 BFC,包含浮動子元素 */
zoom: 1; /* IE6/7 兼容 hasLayout */
}
.clearfix::after {
content: "";
display: table;
clear: both;
}
/* HTML 添加 class */
<div id="tab_panel" class="clearfix">...</div>
#dialog_select_blocks2 #block_tabs #tab_panel > div {
display: flex;
flex-wrap: wrap;
gap: 10px; /* 替代 margin */
padding: 5px;
}
#dialog_select_blocks2 #block_tabs #tab_panel div ul li {
/* 移除 float: left */
width: 100px;
height: 24px;
line-height: 24px;
/* 其餘樣式保持 */
}
$(function() {
$("#block_tabs #tab_opt li").on("click", function() {
var $this = $(this);
var index = $this.index();
$this.addClass("selected").siblings().removeClass("selected");
// 使用 fadeIn/fadeOut 或 show/hide 並觸發重排
$("#tab_panel > div").eq(index).show().siblings().hide();
// 強制觸發重排(某些瀏覽器需要)
// document.getElementById('tab_panel').offsetHeight;
});
});
#dialog_select_blocks2 #block_tabs #tab_panel {
clear: both;
padding: 5px 0;
width: 480px;
overflow: auto; /* 核心修復 */
zoom: 1; /* IE 兼容 */
}
#dialog_select_blocks2 #block_tabs #tab_panel > div {
display: none; /* 默認隱藏 */
}
#dialog_select_blocks2 #block_tabs #tab_panel > div:first-child {
display: block; /* 默認顯示第一個 */
}
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| overflow: auto | 代碼最少、兼容性好 | 可能出現滾動條 | 快速修復、老項目 |
| clearfix | 語義化、無副作用 | 需修改 HTML | 新項目、規範團隊 |
| Flexbox | 現代、功能強、無浮動問題 | IE10+ 完整支持 | 新項目、移動端優先 |
**推薦**:老項目直接加 overflow: auto; zoom: 1; 即時生效;新項目重構用 Flexbox。