文档章节

最简单的兼容firefox和ie的锚点方法

harries
 harries
发布于 2014/06/26 10:37
字数 1877
阅读 135
收藏 5

精选30+云产品,助力企业轻松上云!>>>

在需要指定到页面的特定部分时,标记锚点是最佳的方法

这是在设计网站时经常遇到的情况,你想链接到某个页面的特定部分,可是使用者正在阅读的可能是在另外的一个页面,接下来讨论的四种方法之中任选一种都能让你达成目标.

在示例中,假设我们打算链接到同一个页面中的特定标题:

方法A:空洞的名称

<p><a href="#oranges">About Oranges</a></p>

...一些文字...

<a name="oranges"></a>

<h2>Oranges Are Tasty</h2>

...更多文字...

使用一个内容空白的锚点标签再配上name属性,标记特定的链接点,或许这是你熟悉的方法,在标题前放一个内容空白的<a>,并且连向它(使用#符号,后面加上name属性的值),就能让我们连到页面的特定部分了,当页面包含了很长需要滚动的项目清单时,我们能通过这个方法十分方便的连到特定的项目.

效果不错,但是浪费一个内容空白的标签来标识链接位置有点不合语义,方法B能改进这点.

方法B:全部在名称之内

<p><a href="#oranges">About Oranges</a></p>

...一些文字...

<h2><a name="oranges">Oranges Are Tasty</a></h2>

...更多文字...

与方法A一样,我们仍然使用<a>标签配上name属性,但这次我们把它包在我想要链接的标题外面,这么做看起来的确比较符合语义,在方法A里头,我们的连接对象是...恩,什么都没有,但是在方法B里,我们不仅说明了这段文字是标题标签的一部分,同时也是这个页面的连接锚点之一.

小心<a>的全局样式

如果使用了方法B的话,有个地方必须要注意.如果你为所有的<a>元素指定了全局的CSS样式的话(颜色,文字大小,文字装饰等等),这些样式就会覆盖你为<h2>元素指定的样式.会发生这种情况的原因是,在这个例子里头,<a>标签是位于包围它的<h2>标签之内的子元素.

举例来说,假如你的CSS内有类似这样的声明:

a{

color:green;

font-weight:bold;

text-decoration:underline;

}

方法B配上这段CSS就会让标题与其他页面内的<a>一样变成绿色,粗体,加上下划线,或许与你期望的<h2>样式不同.

我们能使用<a>的:link伪类以避免这种现象(同时也能获得其他好处),在本章稍后的"技巧延伸"中会详细讨论.

更丰富的名称属性

使用方法B(以及方法A)的好处之一,就是name属性可以处理更丰富的锚点名称,具体来说,就是能在名称之内使用符号

举例来说,如果使用方法B的话,你可以这么做(在此&#233;代表符号"e"):

<p><a href="#resum&#233;">My Resum&#233;</a></p>

...一些文字...

<h2><a name="resum&#233;">Dan's Resum&#233;</a></h2>

...更多文字...

在处理不属于英文字母的字符时,这个功能十分重要.

但是还有几个方法值得一提,下面这个方法完全不需要使用<a>设定锚点,让我们看看方法C.

方法C:丢掉名称

<p><a href="#oranges">About Oranges</a></p>

...一些文字...

<h2 id="oranges">Oranges Are Tasty</h2>

...更多文字...

啊哈,id属性的功能就像name属性,同样能为页面指定锚点,除此之外,方法C还消除了方法A,B使用name属性是需要的额外<a>标签,我们减少了源代码,这向来是好事.

由于id属性可以加到任何标签里,因此我们能轻易地在页面内任意为需要的元素加上锚点.在这个例子中,我们选择为标题加上锚点,但我们也能同样轻易的为<div>,<form>,<p>,<ul>...还有其他所有标签加上锚点.

一石二鸟

事实上,在大多数情况下,我们都能为先前存在id属性添加样式或者scripting,这是方法C的另一个好处.由于这个缘故,我们不需要为仅仅设定锚点而加上额外的代码.

举例来说,让我们假设你在很长的页面底部有一个用来留下评论的表单,而你想在页首加上链接,这个表单已经为了指定独特样式而设了id="comments".这是我们能直接把id当作锚点进行连接,而不必再加上有name属性的<a>标签.

代码看起大概类似这样:

<p><a href="#comments">Add a Comment!</a></p>



...很多文字...



<form id="comments" action="/path/to/script">

...表单元素...

</form>

同时,如果你的页面很长,那么你在底部加上链接到顶部锚点的链接,以便用户"回到顶部".

值得一提的是:虽然看起来十分合适,但最好避免在指定锚点名称时使用"top",有些浏览器保留这个名称做为特殊用途,那么使用这个名称可能会造成不一致的结果,最好选择一个类似,但又不会造成问题的名称,或许用#gemesis?还是用#utmost?你自己拿主意了.

古老浏览器与id属性

只使用id属性当作锚点时,有个重要的缺点值得一提,那就是某些古老的浏览器并不支持这个方法.哦喔,在标识你自己的锚点时这的确是个必须考虑的问题,同时这也是向前兼容的不幸示例.让我们看看最后一个实例,方法D.

方法D:合而为一

<p><a href="#oranges">About Oranges</a></p>

...一些文字...

<h2><a id="oranges" name="oranges">Oranges Are Tasty</a></h2>

...更多文字...

如果在标记锚点时,你希望达到向前兼容和向后兼容,那么你大概会喜欢这种方法.不管是古老的或是未来的浏览器都能正确的辨识具名锚点标签,但是由于W3C在XHTML1.0建议书中不推荐使用name属性(http://www.w3.org/TR/xhtml1/#C_8),因此你也用id属性支持未来的浏览器.

与方法B相同,我们必须留意对<a>标签造成影响的全局样式.

共享名称

如果你选择使用方法D的话,为id与name属性选用相同名称完全可以被接受(可能也十分便利),但是只在它们位于相同标签时才能这样.此外,也只有几个特定的标签允许这么做,精确来说,包含了<a>,<applet>,<frame>,<img>,<map>.因此,我们把id="oranges"从<h2>移到锚点标签之内

总之,在锚点的时候,定义name和id的名字相同就行了。

harries

harries

粉丝 49
博文 102
码字总数 89144
作品 4
朝阳
其他
私信 提问
加载中
请先登录后再评论。
IE与火狐中常见的一些兼容问题

document.form.item 问题 (1)现有问题: 现有代码中存在许多 document.formName.item("itemName") 这样的语句,不能在Firefox(火狐)下运行 (2)解决方法: 复制内容到剪贴板 代码: 改用 docu...

zhengguogaun
2013/06/19
54
0
xhEditor v1.1.8 发布,开源XHTML在线编辑器

xhEditor是一个基于jQuery开发的简单迷你并且高效的可视化XHTML编辑器,基于网络访问并且兼容IE6、IE7、IE8、IE9、Firefox 3.0+、Opera 9.6+、Chrome 1.0+、Safari 3.22+。 该版本主要提供以...

V
2011/07/10
207
0
平滑滚动的实现(上)

前言 研究了2天的平滑滚动,后面又结合锚点的实现,感觉收获很多,因此写下记录来整理一下。 最常见的需求是一个较长的页面的右下角可能有一个按钮,点击它就能回到顶部。这一般都是用锚点实...

yukinotech
2019/08/27
0
0
这30类CSS选择器 你必须记在脑袋里

大概大家都知道id,class以及descendant选择器,并且整体都在使用它们,那么你正在错误拥有更大级别的灵活性的选择方式。这篇文章里面提到的大部分选择器都是在CSS3标准下的,所以它们只能在相...

jxpxwh
2014/11/17
2
0
必须记住的 30 类 CSS 选择器

大概大家读知道,以及选择器,并且整体都在使用它们,那么你正在错误拥有更大级别的灵活性的选择方式。这篇文章里面提到的大部分选择器都是在CSS3标准下的,所以它们只能在相应最新版本的浏览...

VinsonAir
2015/03/12
1
0

没有更多内容

加载失败,请刷新页面

加载更多

限时免费在线学习考取百度智能云ABC(初级)在线认证证书

本文作者:y****n 百度云智学院致力于为百度ABC战略(人工智能、大数据、云计算)提供人才生态体系建设,包括基于百度ABC、IoT的课程体系,整合百度优势技术能力的深度学习技术、Apollo无人车...

百度开发者中心
昨天
5
0
Maven中dependencyManagement和依赖关系之间的区别

问题: What is the difference between dependencyManagement and dependencies ? dependencyManagement和dependencies什么区别? I have seen the docs at Apache Maven web site. 我已经在......

富含淀粉
今天
7
0
Confluence 如何查看页面 ID

如果你希望查看页面的 ID 你有 2 个方法。 例如,你希望查看 https://www.cwiki.us/display/CONFLUENCEWIKI/Get+started 页面的 Page ID 的话。 如果你的标题栏没有特殊字符,那么将会使用英...

honeymoose
今天
11
0
Linux系统 Centos7 环境基于Docker部署Rocketmq服务

消息队列 基本概述 MQ,Message Queue,基于TCP协议构建的简单协议,区别于具体的通信协议。 基于通信协议定义和抽象的更高层次的通信模型,一般都是生产者和消费者模型,又或者说服务端和客户端...

mazhilin
今天
12
0
我可以在.gitconfig中为自己指定多个用户吗? - Can I specify multiple users for myself in .gitconfig?

问题: In my ~/.gitconfig , I list my personal email address under [user] , since that's what I want to use for Github repos. 在~/.gitconfig ,我在[user]我的个人电子邮件地址,因......

法国红酒甜
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部