原文地址:http://www.zhangxinxu.com/wordpress/2018/01/html5-details-summary-no-js-ux/
注:本文只有原文部分內容,且對內容有過修改,需要看原文請移步上方連接 ↑↑↑
<details> 標籤是 HTML5 中的新標籤,目前瀏覽器支持程度有所欠缺,最新支持情況可以點擊https://caniuse.com
<details>標籤的默認摺疊展開效果
<details>
<summary>標題</summary>
<div>
隱藏的內容
</div>
</details>
<details open>
<summary>標題</summary>
<div>
隱藏的內容
</div>
</details>
如此看來,應用的場景還是比較多的,但是三角圖標的外觀一般美工也不會設計成這個樣子,但是可以通過修改樣式來改變此圖標
1、修改<details>三角形圖標
::before
或::after
僞元素重新生成我們想要的UI效果,下面這個案例就將展示相關的處理::-webkit-details-marker
,在Firefox瀏覽器下使用::-moz-list-bullet
可以對小三角進行UI控制,例如改變顏色,改變大小,使用自定義的圖形代替,或者直接隱藏等display:none
進行隱藏,但是這一招在Firefox瀏覽器下確實沒有效果的,即使設置display:none!important
也是如此,根據我的測試,只有font-size:0
能夠比較完美的隱藏。類似position:absolute;visibility:hidden
這種常見的隱藏也是不行的,因爲position:absolute
無法生效。以下是修改後效果
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
/* 隱藏默認三角 chrome Safari*/
details ::-webkit-details-marker {
display: none;
}
/*隱藏默認三角 Firefox*/
details ::-moz-list-bullet {
font-size: 0;
}
/* 自定義的三角 */
details:not([open]) summary::before {
margin-left: -1.2em;
transform: rotate(90deg);
}
details summary::before {
content: '';
position: absolute;
width: 1em;
height: 1em;
margin-top: .1em;
margin-left: -1.2em;
background: url(http://www.zhangxinxu.com/study/201801/arrow-on.svg) no-repeat;
background-size: 100% 100%;
transform: rotate(180deg);
transition: transform .2s;
}
/*取消可以選定*/
summary {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
margin-left: 1.1em;
}
summary {/*去掉標題的外邊框*/
outline: 0;
}
/*標題內嵌套<a>標籤目的是讓其可以選定,且使其選定後外邊框不會選定一整行。可以看到默認情況下,選中或者點擊後是有個外邊框的,且佔據一整行十分不美觀*/
summary a {
color: inherit;
text-decoration: none;
pointer-events: none;
}
details>content {
display: block;
padding-left: 20px;
}
</style>
</head>
<body>
<details>
<summary><a href="javascript:;" onClick="this.parentNode.click();">一、級標籤</a></summary>
<content>
這是內容
<br>這是隱藏的內容
<br>這是隱藏的內容
<br>這是隱藏的內容
<br>這是隱藏的內容
<br>這是隱藏的內容
</content>
</details>
</body>
</html>
使用<details>可以實現我們平常常見的一些功能,如菜單下拉、樹形結構等。
2、<details>標籤實現樹形結構
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
/* 隱藏默認三角 chrome Safari*/
details ::-webkit-details-marker {
display: none;
}
/*隱藏默認三角 Firefox*/
details ::-moz-list-bullet {
font-size: 0;
}
/* 自定義的三角 */
details:not([open]) summary::before {
margin-left: -1.2em;
border: 1px solid #999;
background: linear-gradient(to right, #999, #999) no-repeat center,linear-gradient(to bottom, #999, #999) no-repeat center;
background-size: 10px 2px,2px 10px;
}
details summary::before {
content: '';
position: absolute;
width: 1em;
height: 1em;
margin-left: -1.2em;
border: 1px solid #999;
background: linear-gradient(to right, #999, #999) no-repeat center;
background-size: 10px 2px;
}
summary {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
margin-left: 1.1em;
}
summary {
outline: 0;
}
summary a {
color: inherit;
text-decoration: none;
pointer-events: none;
}
details,summary{
margin-bottom: 2px;
}
details>details,details>content {/*調整下縮進*/
display: block;
padding-left: 20px;
}
</style>
</head>
<body>
<details>
<summary><a href="javascript:;" onClick="this.parentNode.click();">一、級標籤</a></summary>
<details>
<summary><a href="javascript:;" onClick="this.parentNode.click();">1、OPTION</a></summary>
<content>a選項
<br> b選項
<br> c選項
</content>
</details>
<details>
<summary><a href="javascript:;" onClick="this.parentNode.click();">2、OPTION</a></summary>
<content>a選項
<br>b選項
<br>c選項
</content>
</details>
</details>
<details>
<summary><a href="javascript:;" onClick="this.parentNode.click();">一、級標籤</a></summary>
<details>
<summary><a href="javascript:;" onClick="this.parentNode.click();">1、OPTION</a></summary>
<content>a選項
<br> b選項
<br> c選項
</content>
</details>
<details>
<summary><a href="javascript:;" onClick="this.parentNode.click();">2、OPTION</a></summary>
<content>a選項
<br>b選項
<br>c選項
</content>
</details>
</details>
</body>
</html>