一般tab
选项卡切换需要使用JS
,但利用css
中的focus
锚点定位和overflow
也能实现!
.box {
height: 10em;
border: 1px solid #ddd;
overflow: hidden;
}
.list {
height: 100%;
background: #ddd;
position: relative;
}
.list > input {
position: absolute;
top: 0;
height: 100%;
width: 1px;
border: 0;
padding: 0;
margin: 0;
clip: rect(0 0 0 0);
}
<div class="box">
<div class="list"><input id="one" />1</div>
<div class="list"><input id="two" />2</div>
<div class="list"><input id="three" />3</div>
<div class="list"><input id="four" />4</div>
</div>
<div class="link">
<label class="click" for="one">1</label>
<label class="click" for="two">2</label>
<label class="click" for="three">3</label>
<label class="click" for="four">4</label>
</div>
image.png
原理其实很简单,就是在每个列表里塞入一个肉眼看不见的<input>输入框,然后选项卡 按钮变成<label>元素,并通过 for 属性与<input>输入框的 id 相关联,这样,点击选项按 钮会触发输入框的 focus 行为,触发锚点定位,实现选项卡切换效果。
这种原理实现的选项卡还有一个优点就是,我们可以直接使用 Tab 键来切换、浏览各个选 项面板的内容,传统的选项卡实现并没有如此便捷的可访问性。
然而,上面这种技术要想用在实际项目中还离不开 JavaScript 的支持,一个是选项卡按钮 的选中效果,另一个就是处理列表部分区域在浏览器外面时依然会跳动的问题。
关键词:input
、label
、overflow: hidden;
引用来自:张鑫旭