我正在努力研究这个问题的解决方案:
找到一种方法来实现可折叠按钮(或其他类似对象)
这样
- 它们可以在同一行中使用
- 单击时,其内容显示在按钮所在行和下一行之间
- 他们反应敏捷
- 内容的样式独立于标题
我制作这个 gif 是为了更好地了解我想要获得什么
到目前为止,我尝试使用可折叠对象和详细信息/摘要标签。
似乎通过使用可折叠对象只能实现第 2 号和第 4 号功能。事实上,由于内容(div 类)必须手动放置在文本中的某个位置(因此在固定位置),所以我不这样做不知道如何才能实现响应能力。与第 1 点相同,如果两个按钮放置在同一行,并且两个内容放置在下一行,则第二个按钮将使用它找到的第一个内容,但第一个按钮和第二个内容不能同时使用。用过的。
这是一些关于可折叠对象的代码
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.maxHeight) {
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + "px";
}
});
}
.collapsible {
border: none;
background: none;
outline:none;
padding: 0;
font-size: 1em;
color: green;
}
.ccontent {
max-height: 0;
overflow: hidden;
background-color: #d3d3d3;
}
Does <button class="collapsible">this</button> work?
<div class="ccontent">Yes!</div>
Good job!
<hr>
Does <button class="collapsible">this</button> and <button class="collapsible">this</button> work?
<div class="ccontent">no</div><div class="ccontent">yes</div>
Ops
详细信息/摘要标签很容易实现,但很难设计样式。
似乎通过使用它们只能实现第 1 号和第 3 号特征,以及部分第 4 号特征。事实上,例如,细节的背景颜色也会影响摘要的特征。另外,设置时display: inline
,单击摘要,将文本移动到下一行中。
details {
display: inline;
color: red;
padding: 0;
background-color: #d3d3d3;
cursor: help;
}
details > summary {
display: inline;
background: none;
color: green;
list-style: none; /* to remove triangle */
outline:none; /* to remove blue border */
}
details > summary::-webkit-details-marker { /* to remove triangle */
display: inline;
display: none;
}
Does <details><summary>this</summary>so and so</details> work?
<p>Ops</p>
<hr>
Does <details><summary>this</summary>not</details> and <details><summary>this</summary>fully</details> work?
<p>Ops</p>
回顾一下:可折叠按钮具有功能 2 和 4,详细信息/摘要标签具有功能 1 和 3(组合两个对象即可完成工作!)。
是否可以仅用一个元素获得全部 4 个特征?
这样的事情对你有用吗?
它的工作原理是将细节绝对定位(你没有给它们顶部,所以顶部就是没有绝对的位置)
然后将 margin-bottom 添加到可折叠元素,并将负 margin-top 添加到详细信息元素
.container {
position:relative;
margin:2em;
}
.details {
display:none;
}
.collapsible.onactive:active,
.collapsible.onfocus:focus,
.collapsible.ontoggle:focus
{
margin-bottom:1.5em;
}
.collapsible.ontoggle:focus {
pointer-events:none;
}
.collapsible.onactive:active + .details,
.collapsible.onfocus:focus + .details,
.collapsible.ontoggle:focus + .details
{
display:block;
margin-top:-1.15em;
position:absolute;
left:0;
right:0;
background:yellow;
}
<div class=container>
Does
<button class="collapsible onactive">on active</button><span class=details>Yes!</span>
work? Good job!work? Good job!work? Good job!work? Good job!work? Good job!
<button class="collapsible onfocus">on focus</button><span class=details>Yes!</span>
work? Good job!work? Good job!work? Good job!work? Good job!work? Good
job!work? Good job!work?
<button class="collapsible ontoggle">toggle</button><span class=details>Yes!</span>
Good job!work? Good job!work? Good job!work? Good job!
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)