HTML hidden 全域性屬性

hidden 全域性屬性是一個列舉屬性,表示瀏覽器不應渲染該元素的內容。例如,它可以用於隱藏頁面中直到登入過程完成後才能使用的元素。

試一試

<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 屬性值也會使元素處於*隱藏*狀態。因此,以下所有元素都處於隱藏狀態:

html
<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 將元素設定為直到找到才顯示狀態

html
<span hidden="until-found">I'm hidden until found</span>

隱藏狀態

隱藏狀態表示元素當前與頁面不相關,或者它被用於宣告內容以便頁面其他部分重用,並且不應直接呈現給使用者。瀏覽器不會渲染處於隱藏狀態的元素。

Web 瀏覽器可能會使用 display: none 來實現隱藏狀態,在這種情況下,元素將不參與頁面佈局。此外,更改隱藏元素的 CSS display 屬性的值將覆蓋隱藏狀態。例如,即使存在 hidden 屬性,樣式為 display: block 的元素也將顯示。

直到找到才顯示狀態

直到找到才顯示狀態下,元素是隱藏的,但其內容可透過瀏覽器的“頁面查詢”功能或片段導航進行訪問。當這些功能導致滾動到*直到找到才顯示*子樹中的元素時,瀏覽器將:

  1. 在隱藏元素上觸發 beforematch 事件
  2. 從元素中移除 hidden 屬性
  3. 滾動到元素

這允許您摺疊內容部分,同時仍然允許使用者透過搜尋或導航找到它。

瀏覽器通常使用 content-visibility: hidden 來實現*直到找到才顯示*。這意味著,與處於隱藏狀態的元素不同,處於*直到找到才顯示*狀態的元素會生成盒子,並且:

  • 它們參與頁面佈局
  • 它們的邊距、邊框、內邊距和背景都會被渲染

此外,元素需要受到 佈局隔離 的影響才能被揭示。如果處於*直到找到才顯示*狀態的元素其 display 值為 nonecontentsinline,則該元素將不會透過“頁面查詢”或片段導航而被揭示。

用法說明

hidden 屬性不得用於僅從一種呈現方式中隱藏內容。如果某物被標記為隱藏,它將從所有呈現方式中隱藏,包括(例如)螢幕閱讀器。

除非使用 hidden="until-found",否則不應從可見元素連結到隱藏元素。例如,使用 href 屬性連結到具有 hidden 屬性的部分是不正確的。如果內容不適用或不相關,則不應連結。

然而,可以使用 ARIA aria-describedby 屬性來引用隱藏的描述。雖然隱藏描述意味著它們本身沒有用處,但當以這種方式引用時,它們可以提供有用的上下文。

同樣,具有 hidden 屬性的 canvas 元素可以被指令碼圖形引擎用作離屏緩衝區,並且表單控制元件可以透過其 form 屬性引用隱藏的表單元素。

最後,請注意,隱藏元素的後代元素仍然處於活動狀態,這意味著指令碼元素仍然可以執行,表單元素仍然可以提交。

html
<div hidden>
  <script>
    console.warn("Boo! I'm hidden *and* running!");
  </script>
</div>

示例

使用 hidden 屬性

在此示例中,我們有三個 <div> 元素。第一個和第三個沒有隱藏,而第二個具有 hidden 屬性。請注意,隱藏元素沒有生成的盒子。

html
<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

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

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

js
const untilFound = document.querySelector("#until-found-box");
untilFound.addEventListener(
  "beforematch",
  () => (untilFound.textContent = "I've been revealed!"),
);

結果

點選“轉到隱藏內容”連結會導航到*直到找到才顯示*元素。beforematch 事件觸發,文字內容更新,元素變為可見。請注意,儘管元素的內容被隱藏,但元素仍然有一個生成的盒子,佔據佈局空間,並且背景和邊框都會被渲染。

要再次執行示例,請點選“重置”。

規範

規範
HTML
# the-hidden-attribute

瀏覽器相容性

另見