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


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

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

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

    方法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的名字相同就行了。

  • 相关阅读:
    Docker容器启动时初始化Mysql数据库
    使用Buildpacks高效构建Docker镜像
    Mybatis 强大的结果集映射器resultMap
    Java 集合排序策略接口 Comparator
    Spring MVC 函数式编程进阶
    换一种方式编写 Spring MVC 接口
    【asp.net core 系列】6 实战之 一个项目的完整结构
    【asp.net core 系列】5 布局页和静态资源
    【asp.net core 系列】4. 更高更强的路由
    【Java Spring Cloud 实战之路】- 使用Nacos和网关中心的创建
  • 原文地址:https://www.cnblogs.com/shlcn/p/2111480.html
Copyright © 2020-2023  润新知