使用 HTML5 新标签 <details> 制作 Accordion 组件(赠送3个相关案例源码)

891d3c5b189f56ceb8ec085ac19a86d6.jpeg

今天,我要和大家分享一个使用 HTML5 新标签 <details> 制作 Accordion(手风琴)组件的源码。通过这个源码,你可以快速掌握如何在网页中实现可折叠的问答列表功能,非常适合用于 FAQ 页面。

案例展示

案例效果,如下图所示:

6595aa8625054164030e25565d46a2f1.gif

了解 <details> 和 <summary> 标签

HTML5 引入了很多新的标签,其中就包括 <details> 和 <summary> 标签。使用这两个标签,我们可以很方便地实现内容的展开和折叠功能。下面我们来详细介绍一下它们的用法。

  • <details>:这个标签用于包裹可折叠的内容。默认情况下,内容是折叠的,用户点击时可以展开。

  • <summary>:这个标签用作 <details> 的标题。点击这个标题可以展开或折叠其后的内容。

HTML 部分

首先,我们来看一下 HTML 部分的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Accordion 01</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet" type='text/css'>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
    <div class="faq-container">
        <details>
            <summary>
                <span class="faq-title">How long does the course take?</span>
                <img src="assets/plus.svg" class="expand-icon" alt="Plus">
            </summary>
            <div class="faq-content">The video content takes more than 4.5 hours. ...</div>
        </details>
        <details>
            <summary>
                <span class="faq-title">Who teaches courses on Atheros Learning?</span>
                <img src="assets/plus.svg" class="expand-icon" alt="Plus">
            </summary>
            <div class="faq-content">The authors of the courses are mostly ...</div>
        </details>
        <!-- 继续添加其他 details 元素 -->
    </div>
    <script src="script.js"></script>
</body>
</html>

在这个 HTML 代码中,我们使用了 <details> 和 <summary> 标签来创建可折叠的问答部分。当用户点击 <summary> 部分时,对应的内容会展开或折叠。每个 <details> 标签包含一个 <summary> 和一个 <div>,用于显示具体的问答内容。

CSS 部分

接下来是 CSS 样式部分,用于美化我们的 Accordion 组件:

html {
    font-size: 16px;
    font-family: "Poppins";
}

body {
    background: white;
    height: 100%;
}

* {
    box-sizing: border-box;
}

.faq-container {
    display: flex;
    flex-direction: column;
    gap: 1rem;
    margin-top: 12em;
}

details {
    font-size: 1rem;
    margin: 0 auto;
    width: 100%;
    background: #F6FAFF;
    border-radius: 0.5rem;
    position: relative;
    max-width: 600px;
    border: 1px solid #C3DEFF;
    transition: all 0.3s ease-in-out;
}

details:hover {
    border: 1px solid #A4A1FF;
}

summary {
    user-select: none;
    cursor: pointer;
    font-weight: 600;
    display: flex;
    list-style: none;
    padding: 1rem;
    align-items: center;
}

summary:hover .faq-title {
    opacity: 1;
}

summary::-webkit-details-marker {
    display: none;
}

summary:focus {
    outline: none;
}

summary:hover .expand-icon {
    opacity: 1;
}

.faq-title {
    color: #1C2035;
    width: 90%;
    opacity: 0.65;
    transition: all 250ms ease-in-out;
}

.faq-content {
    color: #303651;
    padding: 0.2rem 1rem 1rem 1rem;
    font-weight: 300;
    line-height: 1.5;
}

.expand-icon {
    opacity: 0.65;
    pointer-events: none;
    position: absolute;
    right: 1rem;
    transition: all 150ms ease-out;
}

这些样式定义了 Accordion 组件的外观,包括背景颜色、字体样式、边框、悬停效果等。让我们逐步解析每一个重要的部分:

  • .faq-container:定义了一个容器,用于包裹所有的 FAQ 项。我们使用了 flex 布局来垂直排列这些项,并设置了一个上边距,让内容居中。

  • details:设置了每个 details 标签的样式,包括背景色、边框、圆角和过渡效果。当鼠标悬停时,边框颜色会发生变化。

  • summary:定义了 summary 标签的样式,包括鼠标指针、字体加粗、内部对齐等。还隐藏了默认的 marker(箭头)。

  • .faq-title .faq-content:分别设置了标题和内容的样式,使其更加美观和易读。

  • .expand-icon:设置了图标的样式和过渡效果,使得在展开和折叠时有更好的视觉体验。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将template标签替换为template属性,并使用v-slot指令来命名插槽,例如: <el-collapse accordion class="filter-div-row"> <el-collapse-item v-slot:item1="{title}"> <template #title> 一致性 Consistency<i class="header-icon el-icon-info"></i> </template> <div>与现实生活一致:与现实生活的流程、逻辑保持一致,遵循用户习惯的语言和概念;</div> <div>在界面中一致:所有的元素和结构需保持一致,比如:设计样式、图标和文本、元素的位置等。</div> </el-collapse-item> <el-collapse-item v-slot:item2="{title}"> <template #title> 反馈 Feedback </template> <div>控制反馈:通过界面样式和交互动效让用户可以清晰的感知自己的操作;</div> <div>页面反馈:操作后,通过页面元素的变化清晰地展现当前状态。</div> </el-collapse-item> <el-collapse-item v-slot:item3="{title}"> <template #title> 效率 Efficiency </template> <div>简化流程:设计简洁直观的操作流程;</div> <div>清晰明确:语言表达清晰且表意明确,让用户快速理解进而作出决策;</div> <div>帮助用户识别:界面简单直白,让用户快速识别而非回忆,减少用户记忆负担。</div> </el-collapse-item> <el-collapse-item v-slot:item4="{title}"> <template #title> 可控 Controllability </template> <div>用户决策:根据场景可给予用户操作建议或安全提示,但不能代替用户进行决策;</div> <div>结果可控:用户可以自由的进行操作,包括撤销、回退和终止当前操作等。</div> </el-collapse-item> </el-collapse> 不对
05-26
抱歉,我之前的回答有误,template标签不能直接替换为template属性。正确的做法是使用v-slot指令来命名插槽,例如: ``` <el-collapse accordion class="filter-div-row"> <el-collapse-item v-slot:item1="{title}"> <template #title> <span>一致性 Consistency<i class="header-icon el-icon-info"></i></span> </template> <div>与现实生活一致:与现实生活的流程、逻辑保持一致,遵循用户习惯的语言和概念;</div> <div>在界面中一致:所有的元素和结构需保持一致,比如:设计样式、图标和文本、元素的位置等。</div> </el-collapse-item> <el-collapse-item v-slot:item2="{title}"> <template #title> <span>反馈 Feedback</span> </template> <div>控制反馈:通过界面样式和交互动效让用户可以清晰的感知自己的操作;</div> <div>页面反馈:操作后,通过页面元素的变化清晰地展现当前状态。</div> </el-collapse-item> <el-collapse-item v-slot:item3="{title}"> <template #title> <span>效率 Efficiency</span> </template> <div>简化流程:设计简洁直观的操作流程;</div> <div>清晰明确:语言表达清晰且表意明确,让用户快速理解进而作出决策;</div> <div>帮助用户识别:界面简单直白,让用户快速识别而非回忆,减少用户记忆负担。</div> </el-collapse-item> <el-collapse-item v-slot:item4="{title}"> <template #title> <span>可控 Controllability</span> </template> <div>用户决策:根据场景可给予用户操作建议或安全提示,但不能代替用户进行决策;</div> <div>结果可控:用户可以自由的进行操作,包括撤销、回退和终止当前操作等。</div> </el-collapse-item> </el-collapse> ``` 在这里,我们使用v-slot指令来将每个插槽命名为item1、item2、item3和item4,并在每个插槽内部使用template标签来定义子组件的内容。在template标签内部,我们使用#title来指定当前模板是用于渲染标题的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值