JSP 頁面中使用 include 引入片段,動態切換顯示/隱藏時,設置 visibility: hidden 元素雖然不見了,但**仍佔據佈局空間**,導致滾動條不消失、下方內容不上移。
| 屬性 | 視覺效果 | 佈局空間 | 事件響應 | 子元素可見性 |
|---|---|---|---|---|
visibility: hidden | 隱藏 | 保留(佔位) | 不可點擊 | 可通過 visibility: visible 顯示 |
display: none | 隱藏 | 釋放(不佔位) | 不可點擊 | 全部隱藏,不可單獨顯示子元素 |
opacity: 0 | 透明 | 保留 | 可點擊(穿透) | 跟隨父元素 |
<div id="target" style="display: none;">內容</div>
<script>
// 顯示
document.getElementById('target').style.display = 'block'; // 或 flex/grid/inline 等
// 隱藏
document.getElementById('target').style.display = 'none';
</script>
<style>
.hidden { display: none !important; }
</style>
<div id="target" class="hidden">內容</div>
<script>
// 切換
const el = document.getElementById('target');
el.classList.toggle('hidden'); // 或 el.classList.add/remove
</script>
<c:if test="${showContent}">
<div id="target">內容</div>
</c:if>
<%@ include file="..." %> 是**靜態包含**,編譯階段合併為單個 Servlet// 開發者工具 Console 輸入
document.getElementById('target').style.display // 檢查當前值
getComputedStyle(document.getElementById('target')).display // 獲取最終計算值
// 批量檢查所有隱藏元素
$$('*').filter(el => getComputedStyle(el).display === 'none').length
visibility: hidden 保留佔位 → 滾動條不變display: none 釋放佔位 → 滾動條自動調整display 切換