URL锚链锚点定位和overflow的选项卡切换效果实例页面

在这里插入图片描述

选项卡切换

<div class="box">
    <div class="list" id="one">1</div>
    <div class="list" id="two">2</div>
    <div class="list" id="three">3</div>
    <div class="list" id="four">4</div>
</div>
<div class="link">
    <a class="click" href="#one">1</a>
    <a class="click" href="#two">2</a>
    <a class="click" href="#three">3</a>
    <a class="click" href="#four">4</a>
</div>
.box {
    width: 20em;
    height: 10em;
    border: 1px solid #ddd;
    overflow: hidden;
}
.list {
    line-height: 10em;
    background: #ddd;
    text-align: center;
}

此效果乍一看很酷,但却有不少不足之处:其一,容器高度需要固定;其二,也是最麻烦
的,就是“由内而外”的锚点定位会触发窗体的重定位,也就是说,如果页面也是可以滚动的,
则点击选项卡按钮后页面会发生跳动,这种体验显然是非常不好的。那有没有什么解决办法呢?
有,还记不记得前面提过有两种方法可以触发锚点定位,其中有一种方法就是“focus 锚
点定位”,只要定位的元素在浏览器窗体中,就不会触发窗体的滚动,也就是选项卡切换的时候
页面不会发生跳动。

<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>
.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);
}

原理其实很简单,就是在每个列表里塞入一个肉眼看不见的<input>输入框,然后选项卡
按钮变成<label>元素,并通过 for 属性与<input>输入框的 id 相关联,这样,点击选项按
钮会触发输入框的 focus 行为,触发锚点定位,实现选项卡切换效果。
这种原理实现的选项卡还有一个优点就是,我们可以直接使用 Tab 键来切换、浏览各个选
项面板的内容,传统的选项卡实现并没有如此便捷的可访问性。
然而,上面这种技术要想用在实际项目中还离不开 JavaScript 的支持,一个是选项卡按钮
的选中效果,另一个就是处理列表部分区域在浏览器外面时依然会跳动的问题。相关处理类似
下面的做法,即使用 jQuery 语法,:

$('label.click').removeAttr('for').on('click', function() {
	$('.box').scrollTop(xxx); //'xxx'表示滚动数值
});

于是,就算 JavaScript 出现异常或者加载缓慢,选项卡点击功能依然正常,并且直接用 Tab
键浏览选项卡内容的超级便捷的可访问性也保留下来了。

同样,这一技术只适用于高度固定的选项卡效果,如各大站点首页经常出现的幻灯片广告
切换效果等。
实际上,如果不用考虑 IE8 浏览器,可以利用:checked 伪类、单选按钮和<label>标签
的点击行为实现选项卡切换,由于本书知识点面向 IE8 及以上版本的浏览器,因此这一技术不
做详细介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值