html - 在不使用 jQuery 的情况下单击标签 a 时禁用滚动
问题描述
这是我在点击时生效的代码。
当窗口有滚动条并且选项卡内容不在顶部时,当我单击选项卡标题时,我会看到窗口滚动。我不想要这个。
如何在不使用 jquery 的情况下防止滚动?
我已经添加.contents-above
了.contents-below
inline 样式,因此滚动会出现在运行代码段
.tab div {
display: none;
}
.tab div:target {
display: block;
}
<div class="contents-above" style="height: 5em;">...</div>
<div class="tab">
<div id="link1">
<h3>Content to Link 1</h3>
<p>Hello World!</p>
</div>
<div id="link2">
<h3>Content to Link 2</h3>
<h4>Great success!</h4>
</div>
<div id="link3">
<h3>Content to Link 3</h3>
<p>Yeah!</p>
</div>
</div>
<div class="tab">
<a href="#link1">Link 1</a>
<a href="#link2">Link 2</a>
<a href="#link3">Link 3</a>
</div>
<div class="contents-below" style="height: 5em;">...</div>
解决方案
当您单击带有锚点的链接时,页面会滚动到该锚点并变为:target
. 您依靠它来显示选项卡会在单击标题或指向它们的其他链接时滚动到选项卡。
您可以通过将目标锚定在隐藏元素上来避免这种情况,然后使用 CSS 兄弟规则将选项卡设置为可见
.somestufftoscroll {
height: 36em;
background: gray;
}
.tab div {
display: none;
}
.tab .tab-target:target+div {
display: block;
}
<div class="linksontop">
<a href="#linktarget-1">Link 1</a>
<a href="#linktarget-2">Link 2</a>
<a href="#linktarget-3">Link 3</a>
</div>
<div class="somestufftoscroll">
tabs below this area
</div>
<div class="tab">
<div id="linktarget-1" class="tab-target" hidden></div>
<div id="link1">
<h3>Content to Link 1</h3>
<p>Hello World!</p>
</div>
<div id="linktarget-2" class="tab-target" hidden></div>
<div id="link2">
<h3>Content to Link 2</h3>
<h4>Great success!</h4>
</div>
<div id="linktarget-3" class="tab-target" hidden></div>
<div id="link3">
<h3>Content to Link 3</h3>
<p>Yeah!</p>
</div>
</div>
<div class="tab">
<a href="#linktarget-1">Link 1</a>
<a href="#linktarget-2">Link 2</a>
<a href="#linktarget-3">Link 3</a>
</div>
你的命名也令人困惑
我建议改为:
.somestufftoscroll {
height: 36em;
background: gray;
}
.tab-contents {
display: none;
}
.tabs-contents .tab-target:target + .tab-contents {
display: block;
}
<div class="top-links">
<a href="#tabtarget-1">Link to tab 1</a>
<a href="#tabtarget-2">Link to tab 2</a>
<a href="#tabtarget-3">Link to tab 3</a>
</div>
<div class="somestufftoscroll">
<p>Tabs below this area</p>
<p><em>This is here to test scrolling</em></p>
</div>
<div class="tabs-contents">
<div id="tabtarget-1" class="tab-target" hidden></div>
<div id="tab1" class="tab-contents">
<h3>Content to Link 1</h3>
<p>Hello World!</p>
</div>
<div id="tabtarget-2" class="tab-target" hidden></div>
<div id="tab2" class="tab-contents">
<h3>Content to Link 2</h3>
<h4>Great success!</h4>
</div>
<div id="tabtarget-3" class="tab-target" hidden></div>
<div id="tab3" class="tab-contents">
<h3>Content to Link 3</h3>
<p>Yeah!</p>
</div>
</div>
<div class="tabs">
<a href="#tabtarget-1">Tab 1</a>
<a href="#tabtarget-2">Tab 2</a>
<a href="#tabtarget-3">Tab 3</a>
</div>
推荐阅读
- python - 如何在一定时间后使对象在 pygame 中消失?
- sql - 即使删除一个数字,如何在序列号中创建列
- vb.net - 不执行对象的两个事件
- facebook - 调用 facebook 营销 api /insights 端点为沙盒营销帐户返回一个空数组 data []
- python - 如何检查格式日期python
- python - 正则表达式 - 从末尾开始的斜线之间的第二次出现
- python - 您如何处理时间序列分析中的零点?
- visual-studio - 如何在 Visual Studio(2019 或更高版本)中从 .vscode/tasks.json 运行任务
- php - 从 WooCommerce 订阅仪表板中删除特定用户角色的操作按钮
- reactjs - 如何在 MERN 中使用 params 发布和获取数据