我会制作这些div的动画,这样当我点击右箭头时就会得到答案,当点击时就会关闭。我该怎么做?我想在你点击时打开盒子显示答案,然后关闭它,在点击时只显示问题。此处的屏幕截图:https://ibb.co/dc2MZTn
HTML
<body>
<div class="accordion">
<div class="item">
<p class="number">01</p>
<p class="text">Where are these chairs assembled?</p>
<svg
xmlns="http://www.w3.org/2000/svg"
class="icon"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M19 9l-7 7-7-7"
/>
</svg>
<div class="hidden-box">
<p>
Lorem ipsum, dolor sit amet consectetur adipisicing elit.
Accusantium dolor at sequi obcaecati cupiditate. Voluptates
repellendus cupiditate aperiam! Incidunt amet quo neque.
</p>
<ul>
<li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
<li>
Quasi accusamus corporis totam tempora suscipit ab obcaecati.
</li>
<li>Tempora, et atque officia at consequatur laborum!</li>
<li>Repudiandae praesentium illo voluptate in, atque enim.</li>
</ul>
</div>
</div>
<div class="item open">
<p class="number">02</p>
<p class="text">How long do I have to return my chair?</p>
<svg
xmlns="http://www.w3.org/2000/svg"
class="icon"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M19 9l-7 7-7-7"
/>
</svg>
<div class="hidden-box">
<p>
Lorem ipsum, dolor sit amet consectetur adipisicing elit.
Accusantium dolor at sequi obcaecati cupiditate. Voluptates
repellendus cupiditate aperiam! Incidunt amet quo neque.
</p>
<ul>
<li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
<li>
Quasi accusamus corporis totam tempora suscipit ab obcaecati.
</li>
<li>Tempora, et atque officia at consequatur laborum!</li>
<li>Repudiandae praesentium illo voluptate in, atque enim.</li>
</ul>
</div>
</div>
<div class="item">
<p class="number">03</p>
<p class="text">Do you ship to countries outside the EU?</p>
<svg
xmlns="http://www.w3.org/2000/svg"
class="icon"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M19 9l-7 7-7-7"
/>
</svg>
<div class="hidden-box">
<p>
Lorem ipsum, dolor sit amet consectetur adipisicing elit.
Accusantium dolor at sequi obcaecati cupiditate. Voluptates
repellendus cupiditate aperiam! Incidunt amet quo neque.
</p>
<ul>
<li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
<li>
Quasi accusamus corporis totam tempora suscipit ab obcaecati.
</li>
<li>Tempora, et atque officia at consequatur laborum!</li>
<li>Repudiandae praesentium illo voluptate in, atque enim.</li>
</ul>
</div>
</div>
</div>
</body>
</html>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: "Inter", sans-serif;
color: #343a40;
line-height: 1;
}
.accordion {
width: 700px;
margin: 100px auto;
display: flex;
flex-direction: column;
gap: 24px;
}
.item {
box-shadow: 0 0 32px rgba(0, 0, 0, 0.1);
padding: 24px;
display: grid;
grid-template-columns: auto 1fr auto;
column-gap: 24px;
row-gap: 32px;
align-items: center;
}
.number,
.text {
font-size: 24px;
font-weight: 500;
/* color: #087f5b; */
}
.number {
color: #ced4da;
}
.icon {
width: 24px;
height: 24px;
stroke: #087f5b;
}
.hidden-box {
grid-column: 2;
display: none;
}
.hidden-box p {
line-height: 1.6;
margin-bottom: 24px;
}
.hidden-box ul {
color: #868e96;
margin-left: 20px;
display: flex;
flex-direction: column;
gap: 12px;
}
/* OPEN STATE */
.open {
border-top: 4px solid #087f5b;
}
.open .hidden-box {
display: block;
}
.open .number,
.open .text {
color: #087f5b;
}
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<div class="accordion">
<div class="item">
<p class="number">01</p>
<p class="text">Where are these chairs assembled?</p>
添加标签
<label for="down-arrow1">
<svg
xmlns="http://www.w3.org/2000/svg"
class="icon"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M19 9l-7 7-7-7"
/>
</svg>
</label>
添加了输入类型复选框
<input type="checkbox" id="down-arrow1">
<div class="hidden-box">
<p>
Lorem ipsum, dolor sit amet consectetur adipisicing elit.
Accusantium dolor at sequi obcaecati cupiditate. Voluptates
repellendus cupiditate aperiam! Incidunt amet quo neque.
</p>
<ul>
<li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
<li>
Quasi accusamus corporis totam tempora suscipit ab obcaecati.
</li>
<li>Tempora, et atque officia at consequatur laborum!</li>
<li>Repudiandae praesentium illo voluptate in, atque enim.</li>
</ul>
</div>
</div>
<div class="item open">
<p class="number">02</p>
<p class="text">How long do I have to return my chair?</p>
<label for="down-arrow2">
<svg
xmlns="http://www.w3.org/2000/svg"
class="icon"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M19 9l-7 7-7-7"
/>
</svg>
</label>
<input type="checkbox" id="down-arrow2">
<div class="hidden-box">
<p>
Lorem ipsum, dolor sit amet consectetur adipisicing elit.
Accusantium dolor at sequi obcaecati cupiditate. Voluptates
repellendus cupiditate aperiam! Incidunt amet quo neque.
</p>
<ul>
<li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
<li>
Quasi accusamus corporis totam tempora suscipit ab obcaecati.
</li>
<li>Tempora, et atque officia at consequatur laborum!</li>
<li>Repudiandae praesentium illo voluptate in, atque enim.</li>
</ul>
</div>
</div>
<div class="item">
<p class="number">03</p>
<p class="text">Do you ship to countries outside the EU?</p>
<label for="down-arrow3">
<svg
xmlns="http://www.w3.org/2000/svg"
class="icon"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M19 9l-7 7-7-7"
/>
</svg>
</label>
<input type="checkbox" id="down-arrow3">
<div class="hidden-box">
<p>
Lorem ipsum, dolor sit amet consectetur adipisicing elit.
Accusantium dolor at sequi obcaecati cupiditate. Voluptates
repellendus cupiditate aperiam! Incidunt amet quo neque.
</p>
<ul>
<li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
<li>
Quasi accusamus corporis totam tempora suscipit ab obcaecati.
</li>
<li>Tempora, et atque officia at consequatur laborum!</li>
<li>Repudiandae praesentium illo voluptate in, atque enim.</li>
</ul>
</div>
</div>
</div>
</body>
</html>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: "Inter", sans-serif;
color: #343a40;
line-height: 1;
}
.accordion {
width: 700px;
margin: 100px auto;
display: flex;
flex-direction: column;
gap: 24px;
}
.item {
box-shadow: 0 0 32px rgba(0, 0, 0, 0.1);
padding: 24px;
display: grid;
grid-template-columns: auto 1fr auto;
column-gap: 24px;
row-gap: 32px;
align-items: center;
}
.number,
.text {
font-size: 24px;
font-weight: 500;
/* color: #087f5b; */
}
.number {
color: #ced4da;
}
.icon {
width: 24px;
height: 24px;
stroke: #087f5b;
}
.hidden-box {
grid-column: 2;
display: none;
}
.hidden-box p {
line-height: 1.6;
margin-bottom: 24px;
}
.hidden-box ul {
color: #868e96;
margin-left: 20px;
display: flex;
flex-direction: column;
gap: 12px;
}
隐藏复选框
input {
display: none;
}
/* OPEN STATE */
单击向下箭头=>显示文本
#down-arrow1:checked ~ .hidden-box, #down-arrow2:checked ~ .hidden-box, #down-arrow3:checked ~ .hidden-box {
display: block;
}
解释:将图像放在标签内,创建一个标签可点击的复选框,然后隐藏复选框(我也是HTML/CSS的新手,所以这可能不是最优化的方法(
有很多方法可以做到这一点,但我现在能想到的是下面的片段,如果你不想关闭其他项目,你可以简单地删除函数中的forEach方法
//this only closes others
document.querySelectorAll('.open').forEach(elm =>{
if(elm !== e.target.parentNode){
elm.classList.remove('open');
}
});
//attaching event listers to all svg.icon
document.querySelectorAll('svg.icon').forEach(elm =>{
elm.addEventListener('click', openMe);
});
//the main function
function openMe(e){
//toggle the open class of the parent (item itself)
var targ = e.target.parentNode;
if(targ.tagName == 'svg'){targ = targ.parentNode;}
targ.classList.toggle('open');
//====================
//This following block is to close every other item
document.querySelectorAll('.open').forEach(elm =>{
if(elm !== targ){
elm.classList.remove('open');
}
});
//===========================
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: "Inter", sans-serif;
color: #343a40;
line-height: 1;
}
.accordion {
width: 700px;
margin: 100px auto;
display: flex;
flex-direction: column;
gap: 24px;
}
.item {
box-shadow: 0 0 32px rgba(0, 0, 0, 0.1);
padding: 24px;
display: grid;
grid-template-columns: auto 1fr auto;
column-gap: 24px;
row-gap: 32px;
align-items: center;
}
.number,
.text {
font-size: 24px;
font-weight: 500;
/* color: #087f5b; */
}
.number {
color: #ced4da;
}
.icon {
width: 24px;
height: 24px;
stroke: #087f5b;
}
.hidden-box {
grid-column: 2;
display: none;
}
.hidden-box p {
line-height: 1.6;
margin-bottom: 24px;
}
.hidden-box ul {
color: #868e96;
margin-left: 20px;
display: flex;
flex-direction: column;
gap: 12px;
}
/* OPEN STATE */
.open {
border-top: 4px solid #087f5b;
}
.open .hidden-box {
display: block;
}
.open .number,
.open .text {
color: #087f5b;
}
<div class="accordion">
<div class="item">
<p class="number">01</p>
<p class="text">Where are these chairs assembled?</p>
<svg
xmlns="http://www.w3.org/2000/svg"
class="icon"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M19 9l-7 7-7-7"
/>
</svg>
<div class="hidden-box">
<p>
Lorem ipsum, dolor sit amet consectetur adipisicing elit.
Accusantium dolor at sequi obcaecati cupiditate. Voluptates
repellendus cupiditate aperiam! Incidunt amet quo neque.
</p>
<ul>
<li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
<li>
Quasi accusamus corporis totam tempora suscipit ab obcaecati.
</li>
<li>Tempora, et atque officia at consequatur laborum!</li>
<li>Repudiandae praesentium illo voluptate in, atque enim.</li>
</ul>
</div>
</div>
<div class="item open">
<p class="number">02</p>
<p class="text">How long do I have to return my chair?</p>
<svg
xmlns="http://www.w3.org/2000/svg"
class="icon"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M19 9l-7 7-7-7"
/>
</svg>
<div class="hidden-box">
<p>
Lorem ipsum, dolor sit amet consectetur adipisicing elit.
Accusantium dolor at sequi obcaecati cupiditate. Voluptates
repellendus cupiditate aperiam! Incidunt amet quo neque.
</p>
<ul>
<li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
<li>
Quasi accusamus corporis totam tempora suscipit ab obcaecati.
</li>
<li>Tempora, et atque officia at consequatur laborum!</li>
<li>Repudiandae praesentium illo voluptate in, atque enim.</li>
</ul>
</div>
</div>
<div class="item">
<p class="number">03</p>
<p class="text">Do you ship to countries outside the EU?</p>
<svg
xmlns="http://www.w3.org/2000/svg"
class="icon"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M19 9l-7 7-7-7"
/>
</svg>
<div class="hidden-box">
<p>
Lorem ipsum, dolor sit amet consectetur adipisicing elit.
Accusantium dolor at sequi obcaecati cupiditate. Voluptates
repellendus cupiditate aperiam! Incidunt amet quo neque.
</p>
<ul>
<li>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</li>
<li>
Quasi accusamus corporis totam tempora suscipit ab obcaecati.
</li>
<li>Tempora, et atque officia at consequatur laborum!</li>
<li>Repudiandae praesentium illo voluptate in, atque enim.</li>
</ul>
</div>
</div>
</div>