如何阻止此 CSS 手风琴自动向下滚动?
How can I stop this CSS accordion from scrolling down automatically?
我正在为我正在制作的网站使用 CSS 和 jQuery 制作的手风琴。该站点还使用 Bootstrap 为其其他部分设置样式。
每次打开或关闭标签页时,页面都会出于某种原因自动向下滚动,我应该更改什么?提前谢谢大家。
$(document).ready(function() {
$("a.accordion__trigger").click(function() {
$(this).parent().find(".accordion__content").toggleClass("accordion__content__hidden");
});
});
.final__accordion {
position: relative;
display: block;
border: 1px solid #e0e0e0;
font-size: 0.8rem;
}
.final__accordion .accordion__item {
display: block;
margin-top: 5px;
}
.final__accordion .accordion__content {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
background-color: rgba(255, 255, 255, 0.5);
overflow: hidden;
height: 0;
-webkit-transition: height 1s ease, padding 0.3s linear;
-o-transition: height 1s ease, padding 0.3s linear;
transition: height 1s ease, padding 0.3s linear;
}
.final__accordion .accordion__content p {
padding: 20px;
margin: 0;
text-align: left;
max-width: initial;
}
.accordion__item .accordion__content {
overflow: hidden;
box-sizing: content-box;
-moz-box-sizing: content-box;
}
.final__accordion .accordion__content__hidden:target {
/*CHANGED TARGET ON TOGGLE CLASSNAME*/
height: 150px;
text-align: left;
}
.accordion__content__hidden {
height: 0;
}
.final__accordion .accordion__trigger {
text-decoration: none;
}
.final__accordion .accordion__title {
position: relative;
display: block;
margin: 0;
padding: 10px;
font-size: 1em;
background-color: rgb(234, 10, 42);
color: #FFFFFF;
border: 1px solid red;
cursor: pointer;
}
.final__accordion .accordion__title:hover {
background-color: red;
}
.final__accordion .accordion__title:after {
position: absolute;
top: calc(50% - 12px);
right: 20px;
width: 15px;
height: 15px;
border-left: 1px solid #FFFFFF;
border-bottom: 1px solid #FFFFFF;
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
content: "";
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="final__accordion" id="#accordion">
<div class="accordion__item">
<a href="#final__tab1" class="accordion__trigger accordion__title">Accordion 1</a>
<div id="final__tab1" class="accordion__content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="accordion__item">
<a href="#final__tab2" class="accordion__trigger accordion__title">Accordion 2</a>
<div id="final__tab2" class="accordion__content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="accordion__item">
<a href="#final__tab3" class="accordion__trigger accordion__title">Accordion 3</a>
<div id="final__tab3" class="accordion__content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="accordion__item">
<a href="#final__tab4" class="accordion__trigger accordion__title">Accordion 4</a>
<div id="final__tab4" class="accordion__content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="accordion__item">
<a href="#final__tab5" class="accordion__trigger accordion__title">Accordion 5</a>
<div id="final__tab5" class="accordion__content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="accordion__item">
<a href="#final__tab6" class="accordion__trigger accordion__title">Accordion 6</a>
<div id="final__tab6" class="accordion__content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
</div>
单击 <a>
nchor 标记时,默认行为是跳转到由 href
值确定的位置。所以所有 <a>
都有 href="#/"
这基本上可以防止这种跳跃行为。
使用 jQuery 时,您需要使用 #id
.01% 的时间和 .class
99.99% 的时间。所以所有 #id
都被删除了。
对于滑动等动画效果有.slideUp/Down/Toggle()
手风琴的行为是一次只能打开一个部分。因此,所有 .content
除了 .content
之后的 .trigger
(即 $(this)
)将 .slideUp()
。那么点击.trigger
之后的.content
会.slideToggle()
.
.open
在 .title
上 .toggleClass()
以动画箭头。
顺便说一句,我从所有 类 中删除了 .accordion__
部分以节省我的理智,如果你愿意,可以随意用 .accordion__
把它弄乱。
$(".trigger").on('click', function(e) {
$('.title').not($(this)).removeClass('open');
$(this).toggleClass('open');
$('.content').not($(this).next('.content')).slideUp();
$(this).next('.content').slideToggle();
});
body {
overflow-y: scroll
}
.accordion {
position: relative;
border: 1px solid #e0e0e0;
font-size: 0.8rem;
}
.accordion .item {
margin-top: 5px;
}
.accordion .content {
display: flex;
align-items: center;
background-color: rgba(255, 255, 255, 0.5);
overflow: hidden;
box-sizing: content-box;
height: 150px;
}
.accordion .content p {
padding: 20px;
margin: 0;
text-align: left;
max-width: initial;
}
.content.hidden {
display: none;
}
.accordion .trigger {
text-decoration: none;
}
.accordion .title {
position: relative;
display: block;
margin: 0;
padding: 10px;
font-size: 1em;
background-color: rgb(234, 10, 42);
color: #FFFFFF;
border: 1px solid red;
cursor: pointer;
}
.accordion .title:hover {
background-color: red;
}
.accordion .title::after {
position: absolute;
top: calc(50% - 12px);
right: 20px;
width: 15px;
height: 15px;
border-left: 1px solid #FFFFFF;
border-bottom: 1px solid #FFFFFF;
transform: rotate(-135deg);
transition: 0.7s;
content: "";
}
.accordion .title.open::after {
transform: rotate(-45deg);
transition: 0.7s;
}
<div class="accordion">
<div class="item">
<a href="#/" class="trigger title">Accordion 1</a>
<div class="content hidden">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="item">
<a href="#/" class="trigger title">Accordion 2</a>
<div class="content hidden">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="item">
<a href="#/" class="trigger title">Accordion 3</a>
<div class="content hidden">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="item">
<a href="#/" class="trigger title">Accordion 4</a>
<div class="content hidden">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="item">
<a href="#/" class="trigger title">Accordion 5</a>
<div class="content hidden">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="item">
<a href="#/" class="trigger title">Accordion 6</a>
<div class="content hidden">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
我正在为我正在制作的网站使用 CSS 和 jQuery 制作的手风琴。该站点还使用 Bootstrap 为其其他部分设置样式。
每次打开或关闭标签页时,页面都会出于某种原因自动向下滚动,我应该更改什么?提前谢谢大家。
$(document).ready(function() {
$("a.accordion__trigger").click(function() {
$(this).parent().find(".accordion__content").toggleClass("accordion__content__hidden");
});
});
.final__accordion {
position: relative;
display: block;
border: 1px solid #e0e0e0;
font-size: 0.8rem;
}
.final__accordion .accordion__item {
display: block;
margin-top: 5px;
}
.final__accordion .accordion__content {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
background-color: rgba(255, 255, 255, 0.5);
overflow: hidden;
height: 0;
-webkit-transition: height 1s ease, padding 0.3s linear;
-o-transition: height 1s ease, padding 0.3s linear;
transition: height 1s ease, padding 0.3s linear;
}
.final__accordion .accordion__content p {
padding: 20px;
margin: 0;
text-align: left;
max-width: initial;
}
.accordion__item .accordion__content {
overflow: hidden;
box-sizing: content-box;
-moz-box-sizing: content-box;
}
.final__accordion .accordion__content__hidden:target {
/*CHANGED TARGET ON TOGGLE CLASSNAME*/
height: 150px;
text-align: left;
}
.accordion__content__hidden {
height: 0;
}
.final__accordion .accordion__trigger {
text-decoration: none;
}
.final__accordion .accordion__title {
position: relative;
display: block;
margin: 0;
padding: 10px;
font-size: 1em;
background-color: rgb(234, 10, 42);
color: #FFFFFF;
border: 1px solid red;
cursor: pointer;
}
.final__accordion .accordion__title:hover {
background-color: red;
}
.final__accordion .accordion__title:after {
position: absolute;
top: calc(50% - 12px);
right: 20px;
width: 15px;
height: 15px;
border-left: 1px solid #FFFFFF;
border-bottom: 1px solid #FFFFFF;
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
content: "";
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="final__accordion" id="#accordion">
<div class="accordion__item">
<a href="#final__tab1" class="accordion__trigger accordion__title">Accordion 1</a>
<div id="final__tab1" class="accordion__content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="accordion__item">
<a href="#final__tab2" class="accordion__trigger accordion__title">Accordion 2</a>
<div id="final__tab2" class="accordion__content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="accordion__item">
<a href="#final__tab3" class="accordion__trigger accordion__title">Accordion 3</a>
<div id="final__tab3" class="accordion__content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="accordion__item">
<a href="#final__tab4" class="accordion__trigger accordion__title">Accordion 4</a>
<div id="final__tab4" class="accordion__content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="accordion__item">
<a href="#final__tab5" class="accordion__trigger accordion__title">Accordion 5</a>
<div id="final__tab5" class="accordion__content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="accordion__item">
<a href="#final__tab6" class="accordion__trigger accordion__title">Accordion 6</a>
<div id="final__tab6" class="accordion__content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
</div>
单击
<a>
nchor 标记时,默认行为是跳转到由href
值确定的位置。所以所有<a>
都有href="#/"
这基本上可以防止这种跳跃行为。使用 jQuery 时,您需要使用
#id
.01% 的时间和.class
99.99% 的时间。所以所有#id
都被删除了。对于滑动等动画效果有
.slideUp/Down/Toggle()
手风琴的行为是一次只能打开一个部分。因此,所有
.content
除了.content
之后的.trigger
(即$(this)
)将.slideUp()
。那么点击.trigger
之后的.content
会.slideToggle()
..open
在.title
上.toggleClass()
以动画箭头。
顺便说一句,我从所有 类 中删除了 .accordion__
部分以节省我的理智,如果你愿意,可以随意用 .accordion__
把它弄乱。
$(".trigger").on('click', function(e) {
$('.title').not($(this)).removeClass('open');
$(this).toggleClass('open');
$('.content').not($(this).next('.content')).slideUp();
$(this).next('.content').slideToggle();
});
body {
overflow-y: scroll
}
.accordion {
position: relative;
border: 1px solid #e0e0e0;
font-size: 0.8rem;
}
.accordion .item {
margin-top: 5px;
}
.accordion .content {
display: flex;
align-items: center;
background-color: rgba(255, 255, 255, 0.5);
overflow: hidden;
box-sizing: content-box;
height: 150px;
}
.accordion .content p {
padding: 20px;
margin: 0;
text-align: left;
max-width: initial;
}
.content.hidden {
display: none;
}
.accordion .trigger {
text-decoration: none;
}
.accordion .title {
position: relative;
display: block;
margin: 0;
padding: 10px;
font-size: 1em;
background-color: rgb(234, 10, 42);
color: #FFFFFF;
border: 1px solid red;
cursor: pointer;
}
.accordion .title:hover {
background-color: red;
}
.accordion .title::after {
position: absolute;
top: calc(50% - 12px);
right: 20px;
width: 15px;
height: 15px;
border-left: 1px solid #FFFFFF;
border-bottom: 1px solid #FFFFFF;
transform: rotate(-135deg);
transition: 0.7s;
content: "";
}
.accordion .title.open::after {
transform: rotate(-45deg);
transition: 0.7s;
}
<div class="accordion">
<div class="item">
<a href="#/" class="trigger title">Accordion 1</a>
<div class="content hidden">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="item">
<a href="#/" class="trigger title">Accordion 2</a>
<div class="content hidden">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="item">
<a href="#/" class="trigger title">Accordion 3</a>
<div class="content hidden">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="item">
<a href="#/" class="trigger title">Accordion 4</a>
<div class="content hidden">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="item">
<a href="#/" class="trigger title">Accordion 5</a>
<div class="content hidden">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
<div class="item">
<a href="#/" class="trigger title">Accordion 6</a>
<div class="content hidden">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>