HTML 5+CSS 3+jQuery Mobile移动网站与APP开发实战
上QQ阅读APP看书,第一时间看更新

1.2 基底网址标记base标签

在1.1节向读者简要介绍过base标签,由于base标签在大型网站中比较常用,因此在这一节我们单独介绍base标签的用法。

一般情况下,浏览器会将当前页面的URL地址作为基地址,如果想改变所有链接默认的基地址,就可以使用base标签来实现。通过在base标签中设定新的基地址,浏览器将不再使用当前页面的URL地址作为基地址,所有的相对链接地址将使用新设定的基地址来进行解析。例如,HTML网页中常用的a标签、img标签、link标签、form标签等,其中的相对URL地址均会按照base标签中设定的新基地址进行解析。

下面向读者介绍使用body标签进行图片定位的操作方法(参见源代码chapter01/ch01-htmlcomp-base-img.html文件)。

【示例1-5】 base标签

   01  <!DOCTYPE html>
   02  <html lang="zh-cn">
   03  <head>
   04      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   05      <base href="./images/" />
   06      <base href="./images/png/" />
   07      <title>HTML之base标签</title>
   08  </head>
   09  <body>
   10      <!-- 添加文档主体内容 -->
   11      <h3>HTML之base标签</h3>
   12      <img src="img_eiffel200.png" alt="img_eiffel200.png" />
   13      <img src="png_eiffel200.png" alt="png_eiffel200.png" />
   14      <!-- 添加文档主体内容 -->
   15  </body>
   16  </html>

在这段HTML代码中,第05行与第06行就是对base标签的使用,在这两行的body标签内,通过href属性定义了两个基地址路径,这两个路径指向了我们预先保存的两组图片。在第12~13行中,使用img标签在页面中显示了两张图片,我们预想的是第12行显示第05行定义的路径中的图片,而第13行显示第06行定义的路径中的图片。页面运行后的效果如图1.8所示。

从显示的效果可以看到,第12行定义的图片被正确显示出来了,而第13行定义的图片却无法正确显示(仅仅显示出图片文件名称),这是什么原因造成的呢?

我们尝试将源代码文件中的第05行与第06行调换先后顺序,页面运行后的效果发生了变化,如图1.9所示。

图1.8 HTML网页之base标签(1)

图1.9 HTML网页之base标签(2)

从图1.9中显示的效果可以看到,第12行定义的图片没有显示出来(同样仅仅显示出图片文件名称),而第13行定义的图片却正确显示出来了。由此可见,如果使用多个base标签定义基地址路径,那么只有最先定义的能生效,之后定义的会被浏览器全部无视,这点读者使用时要注意。

下面我们模拟一个包含3个HTML页面的简单网站,主要演示使用body标签进行基地址转换的操作方法。这是第一个页面的代码(参见源代码chapter01/ch01-htmlcomp-base-url.html文件),主要起到网站主页的作用。

【示例1-6】 base标签基地址操作(1)

   01  <!DOCTYPE html>
   02  <html lang="zh-cn">
   03  <head>
   04      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   05      <base href="./url/" target="_blank" />
   06      <title>HTML之base标签</title>
   07  </head>
   08  <body>
   09      <!-- 添加文档主体内容 -->
   10      <h3>HTML之base标签</h3>
   11      <p>当前地址:ch01-htmlcomp-base-url.html</p>
   12      <p>
   13        链接到:
   14    <a href="ch01-htmlcomp-base-url-a.html">url/ch01-htmlcomp-base-url-
a.html</a>
   15        </p>
   16        <!-- 添加文档主体内容 -->
   17    </body>
   18    </html>

在这段HTML代码中,第05行使用base标签定义了一个基地址("./url/"),该地址是ch01-htmlcomp-base-url.html文件所在目录下的一个子目录(名称为"url"),因此第14行中定义的超链接地址将会以第05行定义的基地址进行解析。同时,target属性定义为"_blank",这样该页面内所有超链接指向的页面文件均会在新窗口中打开。

下面是第二个页面的代码(参见本书源代码chapter01/url/ch01-htmlcomp-base-url-a.html文件),这个页面就是【示例1-6】中第14行定义的超链接所引用的页面文件,该文件保存在子目录"url"中。

【示例1-7】 base标签基地址操作(2)

   01    <!DOCTYPE html>
   02    <html lang="zh-cn">
   03    <head>
   04        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   05        <title>HTML之base标签</title>
   06    </head>
   07    <body>
   08        <!-- 添加文档主体内容 -->
   09        <h3>HTML之base标签</h3>
   10        <p>当前地址:url/ch01-htmlcomp-base-url-a.html</p>
   11        <p>
   12        链接到:
   13    <a href="ch01-htmlcomp-base-url-b.html">url/ch01-htmlcomp-base-url-
b.html</a>
   14        </p>
   15        <!-- 添加文档主体内容 -->
   16    </body>
   17    </html>

在这段HTML代码中,没有使用base标签进行任何设定,这样第13行中超链接引用的页面文件将会在本窗口中打开。

下面是第三个页面的代码(参见源代码chapter01/url/ch01-htmlcomp-base-url-b.html文件),该文件就是【示例1-7】中第13行定义的超链接所引用的页面文件。

【示例1-8】 base标签基地址操作(3)

   01    <!DOCTYPE html>
   02    <html lang="zh-cn">
   03    <head>
   04        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   05        <base href="../" target="_blank" />
   06        <title>HTML之base标签</title>
   07    </head>
   08    <body>
   09        <!-- 添加文档主体内容 -->
   10        <h3>HTML之base标签</h3>
   11        <p>当前地址:url/ch01-htmlcomp-base-url-b.html</p>
   12        <p>
   13        返回到:<a href="ch01-htmlcomp-base-url.html">ch01-htmlcomp-base-
url.html</a>
   14        </p>
   15        <!-- 添加文档主体内容 -->
   16    </body>
   17    </html>

在这段HTML代码中,第05行使用base标签定义了一个基地址("../"),该地址是ch01-htmlcomp-base-url-b.html文件所在目录的上一级目录(ch01-htmlcomp-base-url.html文件所在的目录),因此第13行中定义的超链接地址将会以第05行定义的基地址进行解析,这样就可以跳转回主页面。同时,target属性定义为"_blank",这样该页面内所有超链接指向的页面文件均会在新窗口中打开。

最后,测试这个模拟的小网站。首先运行ch01-htmlcomp-base-url.html主页面文件,页面打开后的效果如图1.10所示。在图1.10中显示了当前页面的地址信息以及链接到新页面的超链接地址信息。

单击页面中的超链接,尝试打开ch01-htmlcomp-base-url-a.html文件,运行后的效果如图1.11所示。在图1.11中可以看到页面ch01-htmlcomp-base-url-a.html在新的窗口中打开了,并且提示当前页面路径在子目录"url"中。单击页面中的超链接尝试打开ch01-htmlcomp-base-url-b.html文件,运行后的效果如图1.12所示。

在图1.12中,我们看到页面ch01-htmlcomp-base-url-b.html在原窗口中打开了,并且提示当前页面路径仍在子目录"url"中。单击页面中的超链接尝试返回ch01-htmlcomp-base-url.html文件,运行后的效果如图1.13所示。

在图1.13中,我们看到主页面ch01-htmlcomp-base-url.html在新窗口中重新打开了,不同之处是经过一系列操作之后,浏览器中一共打开了3个页面;同时,由于合理地使用了base标签进行相对路径解析,使得这3个HTML页面在根目录和子目录("url")之间实现了相互跳转。

图1.10 HTML网页之base标签基地址操作(1)

图1.11 HTML网页之base标签基地址操作(2)

图1.12 HTML网页之base标签基地址操作(3)

图1.13 HTML网页之base标签基地址操作(4)