Menu

HTML a 标签:用 a href 创建超链接

<a> 元素如何创建链接:href 属性,绝对 URL 和相对 URL,用 #id 跳转到页面中的某个部分,下载链接,卡片链接,以及会让链接失效的常见错误。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

如何在 HTML 中创建链接

链接就是带有 href 属性的锚元素 <a>。href 是链接的去处;标签之间的内容是读者点击的部分。

浏览器会把链接显示为蓝色带下划线,并把鼠标指针变成手形。最后一行说明了 href 为什么重要:没有它,<a> 就只是普通文字。它无法获得焦点,无法点击,也不会显示为链接样式。

绝对 URL 与相对 URL

href 的值决定链接去往哪里。主要的写法:

href去往
https://example.com/page绝对 URL:就是这个地址
/about当前网站根目录下的 about
about.html与当前页面同一文件夹中的 about.html
../index.html上一级文件夹中的 index.html
#pricing本页中 id="pricing" 的元素
/help#faq本站另一个页面中的 faq 部分
mailto:hi@example.com在读者的邮件应用中新建一封邮件
tel:+15551234567在能打电话的设备上拨打电话

链接到其他网站时用绝对 URL,在自己网站内部用以根目录开头的路径(/about):即使包含链接的页面被移到其他文件夹,它们依然有效。

<a href="https://www.wikipedia.org/">Wikipedia</a>  <!-- another site -->
<a href="/pricing">Pricing</a>                     <!-- same site, from the root -->
<a href="www.wikipedia.org">Broken</a>              <!-- relative path, not a site! -->

最后一行是最常见的链接 bug。没有 https:// 时,浏览器会把 www.wikipedia.org 当作当前文件夹中的一个文件名。

电子邮件和电话链接有单独的页面:HTML 邮件链接。

链接到页面的某个部分

任何带有 id 的元素都可以作为目标。用 # 加上 id 链接到它,浏览器就会滚动到那里。点击预览中的链接试试:

一些细节:

  • id 必须完全一致,包括大小写。href="#FAQ" 找不到 id="faq"。
  • href="#top" 和 href="#" 会滚动到页面顶部,即使没有元素的 id 是 top。
  • :target 选择器可以为 URL 当前指向的部分设置样式。在真实页面上它会高亮显示;预览滚动时不会改变地址,所以这里看不到高亮。
  • 要链接到另一个页面的某个部分,把井号加在那个页面的 URL 后面:<a href="/docs/html/table#caption">。

固定页头下的锚点链接

粘性或固定的页头会遮住你跳转到的那部分内容的顶部。在目标上设置 scroll-margin-top 可以为页头留出空间,scroll-behavior: smooth 则让跳转带有动画:

删掉 scroll-margin-top 那一行,再点击 Two:标题会被藏在深色页头后面。

下载链接

download 属性让浏览器保存文件,而不是打开它。如果给它一个值,这个值就是建议的文件名:

<a href="/files/report-2026.pdf" download>Download the report</a>
<a href="/files/r-8f2a.pdf" download="report.pdf">Download (saved as report.pdf)</a>

download 只对与页面同源(协议、主机和端口都相同)的文件以及 data: 和 blob: URL 有效。对于其他源的文件,哪怕是子域名,浏览器都会忽略它,像普通链接一样跳转到文件。服务器可以用 Content-Disposition: attachment 响应头强制下载任何文件。

有意义的链接文字

使用屏幕阅读器的用户常常逐个链接地浏览页面,只听到链接文字。“点击这里”和“阅读更多”对他们来说毫无信息。

<!-- Vague: -->
To see our prices, <a href="/pricing">click here</a>.

<!-- Clear: -->
See the <a href="/pricing">pricing plans</a>.

title 属性会在鼠标悬停时显示提示,但在触摸屏上不会显示,大多数键盘用户也看不到,所以不要把任何重要的内容放在里面。

让整张卡片成为链接

<a> 可以包裹块级内容:标题、图片和段落可以合成一个链接。可点击的卡片就是这样做的。

display: block 让整个盒子都可以点击,而不只是文字。卡片内容要保持简短,因为屏幕阅读器会把全部内容读作链接的名称。另外,永远不要在里面再放链接或按钮:交互元素不能嵌套在 <a> 中。

a 标签的其他属性

属性作用
href目标地址。没有它,<a> 就不是链接
target在哪里打开;target="_blank" 会在新标签页中打开,参见在新标签页中打开链接
rel与目标的关系:noopener、nofollow、sponsored、ugc
download保存文件而不是打开它
hreflang被链接页面的语言,作为提示
referrerpolicy作为来源(referrer)发送多少当前 URL 的信息

常见错误

  • 外部 URL 没有写协议。 href="www.site.com" 是相对路径。请写上 https://。
  • 用 <a href="#"> 执行 JavaScript 操作。 它会滚动到页面顶部,并在 URL 后加上 #。如果点击后并不跳转到任何地方,请使用 <button>。
  • 链接里嵌套链接,或者链接里放按钮。两者都是无效的 HTML:第二个 <a> 会让解析器提前关闭第一个,而点击链接里的按钮时也没有明确的目标。
  • 文件名中有空格。 href="my file.html" 通常能用,因为浏览器会对空格进行编码,但用 my-file.html 就完全不必考虑这个问题。
  • 用“点击这里”作为链接文字。 请改为描述目标页面。
  • id 的大小写不一致。 #Pricing 和 id="pricing" 是不同的。

常见问题

如何在 HTML 中创建链接?

使用锚元素:<a href="https://example.com">Example</a>。href 是目标地址,标签之间的文字是读者点击的内容。

href 是什么意思?

超文本引用(hypertext reference)。它存放链接指向的 URL:完整的地址,同一网站上的路径(如 /about),页面中的某个部分(如 #pricing),或者 mailto: 这样的协议。

如何链接到页面的某个特定部分?

给目标元素设置 id,然后用井号链接到它:<h2 id="faq">FAQ</h2> 和 <a href="#faq">FAQ</a>。从其他页面链接时,把井号加在 URL 后面:<a href="/help#faq">。

为什么我写了 www 的链接会跳到错误的页面?

没有 https:// 时,浏览器会把 www.example.com 当作你自己网站上的相对路径,于是链接会跳到类似 yoursite.com/www.example.com 的地址。外部链接一定要写上协议:href="https://www.example.com"。

a 标签里可以放 div 吗?

可以。在 HTML5 中,<a> 可以包裹块级内容,比如 <div>、标题和段落,整张卡片可点击的链接就是这样做的。但它不能包含另一个链接、按钮或任何其他交互元素。

Coddy 编程语言插图

和 Coddy 一起学编程

开始