不用 JS 就可以有開合功能

Cover Image for 不用 JS 就可以有開合功能
PoYu Chen
PoYu Chen

最近在建置自己的網站時,發現一個各大 browser 早就支援的 Tags。

details {
  border: 1px solid #aaa;
  border-radius: 4px;
  padding: 0.5em 0.5em 0;
}

summary {
  font-weight: bold;
  margin: -0.5em -0.5em 0;
  padding: 0.5em;
}

details[open] {
  padding: 0.5em;
}

details[open] summary {
  border-bottom: 1px solid #aaa;
  margin-bottom: 0.5em;
}
<details>
	<summary> 填上一些 摘要 </summary> 
	想收合的內容們, 想收合的內容們 想收合的內容們 想收合的內容們 
</details>

簡單的範例

簡單的範例,開

簡簡單單,不需要靠 JS 就可以做出可以收合的 UI 了。 當發現這個新大陸的時候,一定會想說,那個三角形好醜,可以換嗎? 你想的到的,當初定義的人也都想的到。

從上面的 css,可以發現 details 有一個屬性是 open open 是一個 bolean 設為 true ,就是開反之就是合

第一步,先來隱藏三角形

簡單的把 list-style 設定成 none 就好了。 這邊我還加上 cursor: pointer; 的原因是,少了三角形,很難知道整個文字是可以被按的

summary {
  font-weight: bold;
  margin: -0.5em -0.5em 0;
  padding: 0.5em;
  cursor: pointer;
  list-style: none;
}

第二步,自制按鈕

我在 summary 這裡多加了一個 svg 的 icon, 然後當 details tag 是 open 的時候,就讓這個 svg 旋轉 45度。

<details>
	<summary> 
      <svg
           xmlns="http://www.w3.org/2000/svg"
           width=20
           height=20
           viewBox="0 0 20 20"
           fill="currentColor"
           >
        <path
          fillRule="evenodd"
          d="M10 3a1 1 0 011 1v5h5a1 1 0 110 2h-5v5a1 1 0 11-2 0v-5H4a1 1 0 110-2h5V4a1 1 0 011-1z"
          clipRule="evenodd"
         />
      </svg>
       這裡寫摘要 
  </summary> 
	想收合的內容們, 想收合的內容們 想收合的內容們 想收合的內容們 
</details>

details[open] summary svg{
  transform: rotate(45deg);
}

十字指示

十字指示,內文開

有沒有很酷呢!!以下是參考文獻