試一試
<p>
This content should be read right now, as it is important. I am so glad you
are able to find it!
</p>
<p hidden>
This content is not relevant to this page right now, so should not be seen.
Nothing to see here. Nada.
</p>
p {
background: #ffe8d4;
border: 1px solid #f69d3c;
padding: 5px;
border-radius: 5px;
}
描述
hidden 屬性表示元素的內容不應呈現給使用者。該屬性接受以下任何一個值:
- 關鍵字
hidden - 關鍵字
until-found - 空字串或無值
無效的 hidden 屬性值也會使元素處於*隱藏*狀態。因此,以下所有元素都處於隱藏狀態:
<span hidden>I'm hidden</span>
<span hidden="">I'm also hidden</span>
<span hidden="hidden">I'm hidden too!</span>
<span hidden="bananas">I'm equally as hidden!</span>
關鍵字 until-found 將元素設定為直到找到才顯示狀態
<span hidden="until-found">I'm hidden until found</span>
隱藏狀態
隱藏狀態表示元素當前與頁面不相關,或者它被用於宣告內容以便頁面其他部分重用,並且不應直接呈現給使用者。瀏覽器不會渲染處於隱藏狀態的元素。
Web 瀏覽器可能會使用 display: none 來實現隱藏狀態,在這種情況下,元素將不參與頁面佈局。此外,更改隱藏元素的 CSS display 屬性的值將覆蓋隱藏狀態。例如,即使存在 hidden 屬性,樣式為 display: block 的元素也將顯示。
直到找到才顯示狀態
在直到找到才顯示狀態下,元素是隱藏的,但其內容可透過瀏覽器的“頁面查詢”功能或片段導航進行訪問。當這些功能導致滾動到*直到找到才顯示*子樹中的元素時,瀏覽器將:
- 在隱藏元素上觸發
beforematch事件 - 從元素中移除
hidden屬性 - 滾動到元素
這允許您摺疊內容部分,同時仍然允許使用者透過搜尋或導航找到它。
瀏覽器通常使用 content-visibility: hidden 來實現*直到找到才顯示*。這意味著,與處於隱藏狀態的元素不同,處於*直到找到才顯示*狀態的元素會生成盒子,並且:
- 它們參與頁面佈局
- 它們的邊距、邊框、內邊距和背景都會被渲染
此外,元素需要受到 佈局隔離 的影響才能被揭示。如果處於*直到找到才顯示*狀態的元素其 display 值為 none、contents 或 inline,則該元素將不會透過“頁面查詢”或片段導航而被揭示。
用法說明
hidden 屬性不得用於僅從一種呈現方式中隱藏內容。如果某物被標記為隱藏,它將從所有呈現方式中隱藏,包括(例如)螢幕閱讀器。
除非使用 hidden="until-found",否則不應從可見元素連結到隱藏元素。例如,使用 href 屬性連結到具有 hidden 屬性的部分是不正確的。如果內容不適用或不相關,則不應連結。
然而,可以使用 ARIA aria-describedby 屬性來引用隱藏的描述。雖然隱藏描述意味著它們本身沒有用處,但當以這種方式引用時,它們可以提供有用的上下文。
同樣,具有 hidden 屬性的 canvas 元素可以被指令碼圖形引擎用作離屏緩衝區,並且表單控制元件可以透過其 form 屬性引用隱藏的表單元素。
最後,請注意,隱藏元素的後代元素仍然處於活動狀態,這意味著指令碼元素仍然可以執行,表單元素仍然可以提交。
<div hidden>
<script>
console.warn("Boo! I'm hidden *and* running!");
</script>
</div>
示例
使用 hidden 屬性
在此示例中,我們有三個 <div> 元素。第一個和第三個沒有隱藏,而第二個具有 hidden 屬性。請注意,隱藏元素沒有生成的盒子。
<div>I'm not hidden</div>
<div hidden>I'm hiding!</div>
<div>I'm not hidden, either</div>
使用 until-found 值
在此示例中,我們有三個 <div> 元素。第一個和第三個是可見的,而第二個具有 hidden="until-found" 和 id="until-found-box" 屬性。id 為 until-found-box 的元素具有紅色虛線邊框和灰色背景。
我們還有一個連結,它指向 "until-found-box" 片段,以及一個 JavaScript 指令碼,它監聽該隱藏元素上觸發的 beforematch 事件。事件處理程式更改盒子的文字內容,以說明當即將移除直到找到才顯示狀態時可能發生的操作。
HTML
<a href="#until-found-box">Go to hidden content</a>
<div>I'm not hidden</div>
<div id="until-found-box" hidden="until-found">Hidden until found</div>
<div>I'm hidden</div>
CSS
div {
height: 40px;
width: 300px;
border: 5px dashed black;
margin: 1rem 0;
padding: 1rem;
font-size: 2rem;
}
div#until-found-box {
color: red;
border: 5px dotted red;
background-color: lightgray;
}
JavaScript
const untilFound = document.querySelector("#until-found-box");
untilFound.addEventListener(
"beforematch",
() => (untilFound.textContent = "I've been revealed!"),
);
結果
點選“轉到隱藏內容”連結會導航到*直到找到才顯示*元素。beforematch 事件觸發,文字內容更新,元素變為可見。請注意,儘管元素的內容被隱藏,但元素仍然有一個生成的盒子,佔據佈局空間,並且背景和邊框都會被渲染。
要再次執行示例,請點選“重置”。
規範
| 規範 |
|---|
| HTML # the-hidden-attribute |
瀏覽器相容性
載入中…