我将创建一个使用HTML5 <details>标签的展开/收缩信息组件,并添加一些美观的样式和实际使用示例。
<details>和<summary>标签下面是完整的实现代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HTML5 details标签:展开/收缩信息</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', 'Microsoft YaHei', sans-serif;
}
body {
background-color: #f7f9fc;
color: #333;
line-height: 1.6;
padding: 20px;
max-width: 1200px;
margin: 0 auto;
}
header {
text-align: center;
padding: 40px 20px;
background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);
color: white;
border-radius: 15px;
margin-bottom: 40px;
box-shadow: 0 10px 30px rgba(106, 17, 203, 0.2);
}
h1 {
font-size: 2.8rem;
margin-bottom: 15px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
}
.subtitle {
font-size: 1.2rem;
opacity: 0.9;
max-width: 700px;
margin: 0 auto;
}
.content {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 30px;
margin-bottom: 40px;
}
.card {
background-color: white;
border-radius: 12px;
padding: 25px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.card:hover {
transform: translateY(-5px);
box-shadow: 0 12px 20px rgba(0, 0, 0, 0.12);
}
.card h2 {
color: #2c3e50;
margin-bottom: 20px;
padding-bottom: 12px;
border-bottom: 2px solid #f0f2f5;
display: flex;
align-items: center;
gap: 10px;
}
.card h2 i {
color: #6a11cb;
}
.intro {
font-size: 1.1rem;
margin-bottom: 25px;
line-height: 1.8;
color: #555;
}
/* details默认样式 */
details {
margin-bottom: 15px;
border-radius: 8px;
overflow: hidden;
border: 1px solid #e1e5eb;
transition: all 0.3s ease;
}
details:hover {
border-color: #a8c6ff;
}
/* summary样式 */
summary {
padding: 18px 20px;
background-color: #f8fafd;
cursor: pointer;
font-weight: 600;
font-size: 1.1rem;
color: #2c3e50;
list-style: none;
position: relative;
transition: background-color 0.3s ease;
}
summary:hover {
background-color: #f0f5ff;
}
/* 自定义summary标记 */
summary::-webkit-details-marker {
display: none;
}
summary::after {
content: '+';
position: absolute;
right: 20px;
top: 50%;
transform: translateY(-50%);
font-size: 1.5rem;
font-weight: 300;
color: #6a11cb;
transition: transform 0.3s ease;
}
details[open] summary::after {
content: '-';
transform: translateY(-50%) rotate(0deg);
}
/* details内容样式 */
.details-content {
padding: 25px;
background-color: white;
border-top: 1px solid #eef2f7;
color: #4a5568;
}
.details-content h3 {
color: #2d3748;
margin-bottom: 12px;
font-size: 1.3rem;
}
.details-content p {
margin-bottom: 15px;
}
.details-content ul, .details-content ol {
padding-left: 20px;
margin-bottom: 15px;
}
.details-content li {
margin-bottom: 8px;
}
.code-example {
background-color: #f8f9fa;
padding: 15px;
border-radius: 6px;
border-left: 4px solid #6a11cb;
font-family: 'Courier New', monospace;
font-size: 0.95rem;
overflow-x: auto;
margin-top: 15px;
}
.code-example code {
color: #d63384;
}
.faq-item details {
background-color: #f9f9f9;
}
.faq-item summary {
background-color: #f0f7ff;
}
.tip {
background-color: #e8f4fd;
border-left: 4px solid #2196F3;
padding: 15px;
margin-top: 20px;
border-radius: 0 8px 8px 0;
}
.tip h4 {
color: #0d47a1;
margin-bottom: 8px;
display: flex;
align-items: center;
gap: 8px;
}
footer {
text-align: center;
margin-top: 50px;
padding: 25px;
color: #666;
border-top: 1px solid #eaeaea;
font-size: 0.95rem;
}
@media (max-width: 768px) {
.content {
grid-template-columns: 1fr;
}
h1 {
font-size: 2.2rem;
}
.card {
padding: 20px;
}
}
.highlight {
color: #6a11cb;
font-weight: 600;
}
</style>
</head>
<body>
<header>
<h1>HTML5 <details> 标签</h1>
<p class="subtitle">使用原生HTML5元素创建可展开/收缩的内容区域,无需JavaScript</p>
</header>
<main>
<section class="intro">
<p><span class="highlight"><details></span> 是HTML5中的一个新元素,用于创建可展开和折叠的内容区域。它通常与 <span class="highlight"><summary></span> 元素一起使用,后者为details元素提供标题或摘要。当用户点击summary元素时,details元素的内容会在显示和隐藏之间切换。</p>
</section>
<div class="content">
<!-- 基础用法 -->
<div class="card">
<h2><i class="fas fa-code"></i> 基础用法</h2>
<p>最简单的details标签使用示例:</p>
<details>
<summary>点击查看详细信息</summary>
<div class="details-content">
<p>这是被隐藏的详细信息内容。当用户点击summary元素时,这部分内容会显示出来。</p>
<p>这是一个完全使用HTML5原生元素实现的功能,无需任何JavaScript代码。</p>
</div>
</details>
<details>
<summary>HTML5新特性介绍</summary>
<div class="details-content">
<h3>HTML5 主要新特性</h3>
<ul>
<li>语义化标签(如header, footer, section, article等)</li>
<li>音频视频支持(audio, video标签)</li>
<li>Canvas绘图</li>
<li>本地存储(localStorage, sessionStorage)</li>
<li>地理位置API</li>
<li>Web Workers(多线程处理)</li>
</ul>
</div>
</details>
<div class="code-example">
<pre><code><details>
<summary>点击查看详细信息</summary>
<div>
<p>这是被隐藏的详细信息内容。</p>
</div>
</details></code></pre>
</div>
</div>
<!-- 常见应用 -->
<div class="card">
<h2><i class="fas fa-layer-group"></i> 常见应用场景</h2>
<p>details标签在多种场景下都非常有用:</p>
<details class="faq-item">
<summary>常见问题解答 (FAQ)</summary>
<div class="details-content">
<h3>什么是HTML5?</h3>
<p>HTML5是HTML的最新版本,于2014年10月由W3C完成标准制定。它增加了许多新特性,使Web应用开发更加方便。</p>
<h3>details标签的浏览器兼容性如何?</h3>
<p>details标签在所有现代浏览器中都得到良好支持,包括Chrome、Firefox、Safari和Edge。对于旧版浏览器,可以使用polyfill提供支持。</p>
<h3>details标签可以嵌套使用吗?</h3>
<p>是的,details标签可以嵌套使用,创建多级展开/收缩内容。</p>
</div>
</details>
<details>
<summary>产品功能说明</summary>
<div class="details-content">
<h3>高级功能</h3>
<ol>
<li>实时数据同步</li>
<li>多设备兼容</li>
<li>云端存储</li>
<li>团队协作工具</li>
<li>高级安全设置</li>
</ol>
</div>
</details>
<details>
<summary>操作步骤指南</summary>
<div class="details-content">
<h3>安装与配置</h3>
<p>1. 下载安装包并解压到本地目录</p>
<p>2. 运行安装程序,按照提示完成安装</p>
<p>3. 启动应用程序,完成初始配置</p>
<p>4. 登录账户,开始使用</p>
</div>
</details>
</div>
<!-- 高级示例 -->
<div class="card">
<h2><i class="fas fa-cogs"></i> 高级示例</h2>
<p>嵌套details和默认展开状态示例:</p>
<details open>
<summary>默认展开的内容</summary>
<div class="details-content">
<p>这个details元素使用了<code>open</code>属性,所以初始状态是展开的。</p>
<details>
<summary>嵌套的details元素</summary>
<div class="details-content">
<p>这是一个嵌套的details元素,可以创建多级展开/收缩内容。</p>
<details>
<summary>第三级details</summary>
<div class="details-content">
<p>第三级的details内容。</p>
</div>
</details>
</div>
</details>
</div>
</details>
<details>
<summary>代码示例展示</summary>
<div class="details-content">
<h3>details标签属性</h3>
<p><strong>open</strong>:布尔属性,如果存在,表示details内容默认可见</p>
<div class="code-example">
<pre><code><!-- 默认展开的details -->
<details open>
<summary>默认展开的内容</summary>
<p>这个details默认是展开状态</p>
</details>
<!-- 嵌套details -->
<details>
<summary>外层内容</summary>
<p>外层文本</p>
<details>
<summary>内层内容</summary>
<p>内层文本</p>
</details>
</details></code></pre>
</div>
</div>
</details>
</div>
</div>
<div class="tip">
<h4><i class="fas fa-lightbulb"></i> 使用提示</h4>
<p><strong>details标签的默认标记</strong>:在大多数浏览器中,summary元素左侧会有一个小三角形标记。可以使用CSS的<code>summary::-webkit-details-marker</code>和<code>summary::marker</code>来自定义或隐藏这个标记。</p>
<p><strong>无障碍访问</strong>:details元素默认具有很好的无障碍访问支持,屏幕阅读器可以识别其展开/收缩状态。</p>
<p><strong>JavaScript交互</strong>:虽然details元素不需要JavaScript即可工作,但你仍然可以通过JavaScript监听<code>toggle</code>事件来增强交互功能。</p>
</div>
</main>
<footer>
<p>HTML5 details标签示例 © 2023 | 无需JavaScript的展开/收缩内容解决方案</p>
<p>兼容现代浏览器,优雅降级方案可供旧版浏览器使用</p>
</footer>
<script>
// 添加一些简单的交互效果
document.addEventListener('DOMContentLoaded', function() {
// 为所有details元素添加toggle事件监听
const allDetails = document.querySelectorAll('details');
allDetails.forEach(detail => {
detail.addEventListener('toggle', function() {
// 添加简单的动画效果
if (this.open) {
console.log('Details expanded:', this.querySelector('summary').textContent);
} else {
console.log('Details collapsed:', this.querySelector('summary').textContent);
}
});
});
// 显示当前details使用数量
const detailsCount = document.querySelectorAll('details').length;
const footer = document.querySelector('footer');
const countElement = document.createElement('p');
countElement.textContent = `本页面共使用 ${detailsCount} 个details元素`;
countElement.style.marginTop = '10px';
countElement.style.fontSize = '0.9em';
countElement.style.color = '#888';
footer.appendChild(countElement);
});
</script>
</body>
</html>
这个页面展示了HTML5 <details>标签的各种用法:
<details>和<summary>标签页面加载后,您可以直接点击各个标题来查看展开和收缩的效果,无需任何JavaScript即可工作。