这里不应使用 <aside>
,因为它和主内容并没有必要的联系(你想在任何地方都能看到它)。甚至不能用 <section>
,因为它也不是页面上主内容的一部分。所以在这种情况下就应使用 <div>
,为满足无障碍使用特征,还应为购物车的标题设置一个可读标签。
diff --git a/files/zh-cn/learn/html/howto/add_a_hit_map_on_top_of_an_image/index.md b/files/zh-cn/learn/html/howto/add_a_hit_map_on_top_of_an_image/index.md index 22c13e36f56377..7894d1393865b8 100644 --- a/files/zh-cn/learn/html/howto/add_a_hit_map_on_top_of_an_image/index.md +++ b/files/zh-cn/learn/html/howto/add_a_hit_map_on_top_of_an_image/index.md @@ -3,114 +3,115 @@ title: Add a hit map on top of an image slug: Learn/HTML/Howto/Add_a_hit_map_on_top_of_an_image translation_of: Learn/HTML/Howto/Add_a_hit_map_on_top_of_an_image --- -
现在我们将学习如何设置图像映射,先讨论他的缺点。
-前提: | -你应该已经知道如何create a basic HTML document 以及add accessible images to a webpage. | -
---|---|
目标: | -学习如何将一张图片的不同区域链接到不同页面。 | -
前提: | ++ 你应该已经知道如何create a basic HTML document + 以及add accessible images to a webpage. + | +
目标: | +学习如何将一张图片的不同区域链接到不同页面。 | +
警告: 本文仅讨论客户端图像映射。不要使用服务器端图像映射,这需要用户拥有鼠标。
-当你在{{htmlelement('a')}}标签中嵌套图像, 整个图像是链接到一个网页的。但在图像映射中,包含多个活动区域(称为“热点”),可以链接到不同的资源地址。
+当你在{{htmlelement('a')}}标签中嵌套图像, 整个图像是链接到一个网页的。但在图像映射中,包含多个活动区域(称为“热点”),可以链接到不同的资源地址。 -图像映射原本非常流行于导航策略,但是前提需要考虑它的性能和可访问性。
+图像映射原本非常流行于导航策略,但是前提需要考虑它的性能和可访问性。 -Text links (perhaps styled with CSS) 比图像映射更具优势:文本链接更轻量级、好维护、更易于 SEO,而且支持更多形式需求的访问(如,屏幕阅读器、纯文本浏览器、翻译服务等)。
+[Text links](/en-US/Learn/HTML/Howto/Create_a_hyperlink) (perhaps styled with CSS) 比图像映射更具优势:文本链接更轻量级、好维护、更易于 SEO,而且支持更多形式需求的访问(如,屏幕阅读器、纯文本浏览器、翻译服务等)。 -不是所有图片都合适。
+不是所有图片都合适。 -alt
属性是必须的, 但很多人注意不到。插入图片的方式 和通常一样 (用 {{htmlelement("img")}} 标签 和 {{htmlattrxref("alt",'img')}} 文本). 如果图片只是用作导航容器, 你可以设置图片的 alt="", 改在后面
{{htmlelement('area')}} 的{{htmlattrxref("alt",'area')}} 中提供合适的文本。
你将需要一个特殊的 {{htmlattrxref("usemap","img")}} 属性。 为图像映射提供一个唯一标识,这个标识不能包含空格。将这个标识 (preceded by a hash) 作为 usemap
属性的值:
<img +```html + + usemap="#example-map-1" /> +``` -步骤 2: 激活你的热点
+### 步骤 2: 激活你的热点 -在这一步中, 将所有代码放置 {{htmlelement('map')}} 标签中。
+在这一步中, 将所有代码放置 {{htmlelement('map')}} 标签中。` +``` -<map>
只需要一个属性, 设置{{htmlattrxref("name","map")}} 和上面usemap属性一样的map值:
+`在
在<map>
元素中,我们需要嵌套 {{htmlelement('area')}} 元素。一个<area>
元素对应一个热点.。为保持键盘导航的直观, 请确保<area>
的源顺序和视觉上的热点顺序一致。` 元素中,我们需要嵌套 {{htmlelement('area')}} 元素。一个 `` 元素对应一个热点.。为保持键盘导航的直观, 请确保`` 的源顺序和视觉上的热点顺序一致。 - +``` -+`` 元素是空元素, 但是需要包含 4 个属性: -
<area>
元素是空元素, 但是需要包含 4 个属性:-
+ 坐标用 CSS 像素 px 表示。 -- {{htmlattrxref('shape','area')}} {{htmlattrxref('coords','area')}}
-- -
-+- {{htmlattrxref('shape','area')}} {{htmlattrxref('coords','area')}} -
shape
有 4 个值:circle
,rect
,poly
, anddefault
. (default
<area>
表示除去您定义的其他热点的剩余空间.) 根据你选择的形状需要在coords
中提供对应的坐标信息。-
+ - : `shape` 有 4 个值:`circle`, `rect`, `poly`, and `default`. ( `default` `` 表示除去您定义的其他热点的剩余空间.) 根据你选择的形状需要在 `coords` 中提供对应的坐标信息。 -- 对于 circle, 提供中心的 x、y 坐标,还需要提供半径。
-- 对于 rectangle, 提供左上角和右下角的 x、y 坐标。
-- 对于 polygon, 提供每个角的 x、y 坐标(至少 6 个值)。
-坐标用 CSS 像素 px 表示。
+ - 对于 circle, 提供中心的 x、y 坐标,还需要提供半径。 + - 对于 rectangle, 提供左上角和右下角的 x、y 坐标。 + - 对于 polygon, 提供每个角的 x、y 坐标(至少 6 个值)。 -In case of overlap, source order carries the day.
-- {{htmlattrxref('href','area')}}
-- 您需要链接的资源地址。 如果您不希望当前区域链接到任何地方 (比方说,如果您正在创建一个空心圆),您可以将这个属性保留为空。
-- {{htmlattrxref('alt','area')}}
-- 一个必选属性,告诉用户链接的指向或功能说明。
-alt
文本仅在图像不可用时显示。请参阅我们的guidelines for writing accessible link text。如果href
属性为空并且整个图像已经具备了alt
属性,则可以设置alt=""
。 -<map name="example-map-1"> - <area shape="circle" coords="200,250,25" - href="page-2.html" alt="circle example" /> + In case of overlap, source order carries the day. +- {{htmlattrxref('href','area')}} + - : 您需要链接的资源地址。 如果您不希望当前区域链接到任何地方 (比方说,如果您正在创建一个空心圆),您可以将这个属性保留为空。 +- {{htmlattrxref('alt','area')}} + - : 一个必选属性,告诉用户链接的指向或功能说明。`alt` 文本仅在图像不可用时显示。请参阅我们的[guidelines for writing accessible link text](/en-US/Learn/HTML/Howto/Create_a_hyperlink#Writing_accessible_link_text)。如果 `href` 属性为空并且整个图像已经具备了 `alt` 属性,则可以设置 `alt=""`。 - <area shape="rect" coords="10, 5, 20, 15" - href="page-3.html" alt="rectangle example" /> +```html +-+ -</map> 步骤 3: 确保它的可用范围
+ -你还并没有完成除非你很严格的在多个浏览器和终端测试图像映射功能。尝试仅用键盘操作。尝试关掉图片。
+如果你的图像映射宽度大于 240px,你将需要进一步调整来适应网站的响应式。仅调整小屏幕下的图片是不够的,因为不变的坐标无法适应这样的图像。
+### 步骤 3: 确保它的可用范围 -如果必须使用图像映射, 您可以看看Matt Stow's jQuery plugin.。另外,Dudley Storey 示范了一种方法 use SVG for an image map effect,以及后来的ombined SVG-raster hack for bitmap images.
+你还并没有完成除非你很严格的在多个浏览器和终端测试图像映射功能。尝试仅用键盘操作。尝试关掉图片。 -Learn more
+如果你的图像映射宽度大于 240px,你将需要进一步调整来适应网站的响应式。仅调整小屏幕下的图片是不够的,因为不变的坐标无法适应这样的图像。 -
以下技巧都是基于通用的知识和经验。
+以下技巧都是基于通用的知识和经验。 -一个好的页面不仅要给访客提供一个更有交互性的站点,同时也需要降低你的服务器压力和网络请求。后者对于那些高访问量的站点,或在有爆炸性新闻出现等特殊情况下会出现流量突增的站点来说尤为关键。
+一个好的页面不仅要给访客提供一个更有交互性的站点,同时也需要降低你的服务器压力和网络请求。后者对于那些高访问量的站点,或在有爆炸性新闻出现等特殊情况下会出现流量突增的站点来说尤为关键。 -页面加载性能的优化不仅仅是针对那些带宽有限的拨号上网或移动设备用户需要看的内容,对于提供给宽带用户访问的内容同样重要并且可以导致巨大的提升,哪怕对于那些拥有最快网速的访客。
+页面加载性能的优化不仅仅是针对那些带宽有限的拨号上网或移动设备用户需要看的内容,对于提供给宽带用户访问的内容同样重要并且可以导致巨大的提升,哪怕对于那些拥有最快网速的访客。 -直至今日,页面的大小仍是页面加载性能的最重要因素。
+直至今日,页面的大小仍是页面加载性能的最重要因素。 -通过压缩——排除不必要空格,注释,和将脚本、CSS 放入外部文件等减小页面的大小,可以在页面结构改变很小的情况下提高下载性能。
+通过压缩——排除不必要空格,注释,和将脚本、CSS 放入外部文件等减小页面的大小,可以在页面结构改变很小的情况下提高下载性能。 -诸如 HTML Tidy 这类的工具可以从有效的 HTML 源文件中自动截去行首空格和额外的空行,其它工具则可以通过重新格式化源代码来压缩 JavaScript 或者通过混淆源码将长标识符替换为短标识符来减小文件大小。
+诸如 [HTML Tidy](http://tidy.sourceforge.net/) 这类的工具可以从有效的 HTML 源文件中自动截去行首空格和额外的空行,其它工具则可以通过重新格式化源代码来压缩 JavaScript 或者通过混淆源码将长标识符替换为短标识符来减小文件大小。 -减少一个页面引用的文件数量可以降低在下载一个页面的过程中需要的HTTP请求数量,从而减少这些请求的收发时间。
+减少一个页面引用的文件数量可以降低在下载一个页面的过程中需要的[HTTP](/en-US/docs/HTTP)请求数量,从而减少这些请求的收发时间。 -根据其缓存设置,浏览器可能会为每个所引用的文件发送一个带 If-Modified-Since 的请求给网络服务器,以查询这些文件自上次加载后是否有被修改。查询引用文件上次修改时间会花费太多时间,导致网页首屏延迟,这是因为在渲染页面之前浏览器必须确认每个文件的修改时间。
+根据其缓存设置,浏览器可能会为每个所引用的文件发送一个带 [If-Modified-Since](/zh-CN/docs/Web/HTTP/Headers/If-Modified-Since) 的请求给网络服务器,以查询这些文件自上次加载后是否有被修改。查询引用文件上次修改时间会花费太多时间,导致网页首屏延迟,这是因为在渲染页面之前浏览器必须确认每个文件的修改时间。 -If you use background images a lot in your CSS, you can reduce the number of HTTP lookups needed by combining the images into one, known as an image sprite. Then you just apply the same image each time you need it for a background and adjust the x/y coordinates appropriately. This technique works best with elements that will have limited dimensions, and will not work for every use of a background image. However, the fewer HTTP requests and single image caching can help reduce page-load time.
+If you use background images a lot in your CSS, you can reduce the number of HTTP lookups needed by combining the images into one, known as an image sprite. Then you just apply the same image each time you need it for a background and adjust the x/y coordinates appropriately. This technique works best with elements that will have limited dimensions, and will not work for every use of a background image. However, the fewer HTTP requests and single image caching can help reduce page-load time. -For the purposes of this article, a CDN is a means to reduce the physical distance between your server and your visitor. As the distance between your server origin and visitor increases, the load times will increase. Suppose your website server is located in the United States and it has a visitor from India; the page load time will be much higher for the Indian visitor compared to a visitor from the US.
+For the purposes of this article, a CDN is a means to reduce the physical distance between your server and your visitor. As the distance between your server origin and visitor increases, the load times will increase. Suppose your website server is located in the United States and it has a visitor from India; the page load time will be much higher for the Indian visitor compared to a visitor from the US. -A CDN is a geographically distributed network of servers that work together to shorten the distance between the user and your website. CDNs store cached versions of your website and serve them to visitors via the network node closest to the user, thereby reducing latency.
+A CDN is a geographically distributed network of servers that work together to shorten the distance between the user and your website. CDNs store cached versions of your website and serve them to visitors via the network node closest to the user, thereby reducing [latency](http://www.webperformancetoday.com/2012/04/02/latency-101-what-is-latency-and-why-is-it-such-a-big-deal/). -Further reading:
+Further reading: - +- [Understanding CDNs](https://www.incapsula.com/cdn-guide/what-is-cdn-how-it-works.html) -每个独立的域名都会消耗 DNS 查找的时间,页面加载时间会随着独立域名数量、CSS 链接数量、JavaScript 还有图片资源的数量增加而增加。
+每个独立的域名都会消耗 DNS 查找的时间,页面加载时间会随着独立域名数量、CSS 链接数量、JavaScript 还有图片资源的数量增加而增加。 -这条可能算不上实用,然而,在你的页面中尽量少的使用来自不同域名的资源链接。
+这条可能算不上实用,然而,在你的页面中尽量少的使用来自不同域名的资源链接。 -确保任何内容可以被缓存,并且拥有一个合理的有效期。
+确保任何内容可以被缓存,并且拥有一个合理的有效期。 -特别要注意 Last-Modified
头,它会让页面高效的缓存。自上次修改之后,这部分 header 指示将信息传递给用户代理(要加载这些信息的文件)。大部分网页服务器会自动追加 Last-Modified
header 部分到静态页面(如 .html
,.css
),基于上次修改的日期储存在文件系统中。至于动态页面(如 .php
,.aspx
),便无法做到,这部分请求的头也就不会被发送出去。
所以,特别是动态产生的页面,花点时间研究一下这个课题会是有益的。或许有些什么关联,无论怎样,这么做在那些不能被缓存的网页中都会节省很多的页面请求。
+所以,特别是动态产生的页面,花点时间研究一下这个课题会是有益的。或许有些什么关联,无论怎样,这么做在那些不能被缓存的网页中都会节省很多的页面请求。 -更多信息:
+更多信息: -在页面最初显示时,会首先下载页面内容以及所需的 CSS 和 JavaScript,这样在页面加载时用户可以最快获得外观的反馈。由于内容通常都是文本,有利于在传输过程中压缩,因此给用户以更快的响应。
+在页面最初显示时,会首先下载页面内容以及所需的 CSS 和 JavaScript,这样在页面加载时用户可以最快获得外观的反馈。由于内容通常都是文本,有利于在传输过程中压缩,因此给用户以更快的响应。 -页面中任何具有动态特性的资源需要在页面被完全加载后才可以使用,所以最好在初始化时关闭动态特性(disable dynamic features),等页面加载完后再打开它。这样 JavaScript 就会在网页内容之后才加载,有助于提升页面加载的整体表现。
+页面中任何具有动态特性的资源需要在页面被完全加载后才可以使用,所以最好在初始化时关闭动态特性(disable dynamic features),等页面加载完后再打开它。这样 JavaScript 就会在网页内容之后才加载,有助于提升页面加载的整体表现。 -内联脚本在页面加载过程中消耗很多资源,因为解析器认为内联脚本会改变页面结构。通常,尽量少的使用内联脚本和减少用document.write()
来输出内容,在一定情况下可以加速整体页面的载入。现在浏览器中一般使用现代的 W3C DOM 方法操作页面内容,优于使用document.write()
的传统方法。
使用现代 CSS 减少标记(markup)的用量,可以减少对(spacer)图片的需求。在布局方面,图片通常可以用风格化的文本(text)来替代,这样会“节省”许多资源。
+使用现代 CSS 减少标记(markup)的用量,可以减少对(spacer)图片的需求。在布局方面,图片通常可以用风格化的文本(text)来替代,这样会“节省”许多资源。 -使用合法标记还有其它优点。首先,浏览器在解释 HTML 时无需做错误校正(除了一些哲理性的问题,例如,是允许用户输入格式不一致,而后再用程序“校准”或统一化呢?还是加强约束规则,限制用户输入的格式?)。
+使用合法标记还有其它优点。首先,浏览器在解释 HTML 时无需做错误校正(除了一些哲理性的问题,例如,是允许用户输入格式不一致,而后再用程序“校准”或统一化呢?还是加强约束规则,限制用户输入的格式?)。 -再者,合法标记可以让那些给你的网站做预处理的工具功能最大化。例如,HTML Tidy 可以移除空白(whitespace)和可选的末尾标记(ending tags);然而,在有严重的错误标记的网页中这些工具便无法工作。
+再者,合法标记可以让那些给你的网站做预处理的工具功能最大化。例如,[HTML Tidy](http://tidy.sourceforge.net/) 可以移除空白(whitespace)和可选的末尾标记(ending tags);然而,在有严重的错误标记的网页中这些工具便无法工作。 -使用 table 布局是一种不应该再采用的传统方法,而应运用 floats, positioning, flexbox, 或 grids 来布局。
+使用 table 布局是一种不应该再采用的传统方法,而应运用 [floats](/zh-CN/docs/Learn/CSS/CSS_layout/Floats), [positioning](/zh-CN/docs/Learn/CSS/CSS_layout/Positioning), [flexbox](/zh-CN/docs/Learn/CSS/CSS_layout/Flexbox), 或 [grids](/zh-CN/docs/Learn/CSS/CSS_layout/Grids) 来布局。 -当然,table 仍是不失为一种有效的展示表格数据的方式。为了帮助浏览器更快速的渲染你的页面,你应该避免嵌套 table。
+当然,table 仍是不失为一种有效的展示表格数据的方式。为了帮助浏览器更快速的渲染你的页面,你应该避免嵌套 table。 -相较于这种深度的嵌套:
+相较于这种深度的嵌套: -<table> - <table> - <table> +```html +
用下图这样的非嵌套结构更好一些:
+用下图这样的非嵌套结构更好一些: -<table>...</table> -<table>...</table> -<table>...</table>+```html +
可参见 CSS Flexible Box Layout 和 CSS Grid Layout 规范。
+可参见 [CSS Flexible Box Layout](https://www.w3.org/TR/css-flexbox-1/) 和 [CSS Grid Layout](https://www.w3.org/TR/css-grid-1/) 规范。 -SVG produced by most drawing applications often contains unnecessary metadata which can be removed. Configure your servers, apply gzip compression for SVG assets.
+SVG produced by most drawing applications often contains unnecessary metadata which can be removed. Configure your servers, apply gzip compression for SVG assets. -Large images cause your page to take more time to load. Consider compressing your images before adding them to your page, using compression features built into image-manipulation tools such as Photoshop, or using a specialized tool such as Compress Jpeg or Tiny PNG,.
+Large images cause your page to take more time to load. Consider compressing your images before adding them to your page, using compression features built into image-manipulation tools such as Photoshop, or using a specialized tool such as [Compress Jpeg](https://compressjpeg.com/) or [Tiny PNG](https://tinypng.com/),. -如果浏览器可以即时决定你的照片(images)和表格(tables)宽高,它在展示网页时就不必进行内容重新排版。这不仅可以加速网页的显示,还能在网页完成加载的过程中防止恼人的布局改变。因此,图片的 height
和 width
应尽可能确定下来。
表格可以使用 CSS 选择器:综合性能:
+表格可以使用 CSS 选择器:综合性能: -table-layout: fixed;+```css +table-layout: fixed; +``` -
用 <col>
和 <colgroup>
元素来指定列宽。
为使页面设计得到极大提升,应确保在工程中指定一个合理的 user-agent。不要奢求你的内容在所有浏览器中都完美的展现,特别是在那些低版本的浏览器中。
+为使页面设计得到极大提升,应确保在工程中指定一个合理的 user-agent。不要奢求你的内容在所有浏览器中都完美的展现,特别是在那些低版本的浏览器中。 -理想情况下,你的页面运行的最小环境要基于现代浏览器,这个浏览器起码要支持一些相关的标准(如 html5 标准)。可以是最近版本的火狐,IE,谷歌 Chrome,Opera 还有 Safari。
+理想情况下,你的页面运行的最小环境要基于现代浏览器,这个浏览器起码要支持一些相关的标准(如 html5 标准)。可以是最近版本的火狐,IE,谷歌 Chrome,Opera 还有 Safari。 -需要注意一下,这篇文章当中的许多 tips 都是些技术性常识,可以不必担心浏览器的支持需求而应用到任何 user-agent 和网页中去。
+需要注意一下,这篇文章当中的许多 tips 都是些技术性常识,可以不必担心浏览器的支持需求而应用到任何 user-agent 和网页中去。 -确保 JavaScript 脚本兼容 async 和 defer,任何时候都要尽可能使用 async ,特别是当你有较多的 script 标签时。
+确保 JavaScript 脚本兼容 [async](/en-US/docs/HTML/Element/script#Attributes) 和 [defer](/en-US/docs/HTML/Element/script#Attributes),任何时候都要尽可能使用 [async](/en-US/docs/HTML/Element/script#Attributes) ,特别是当你有较多的 script 标签时。 -这样在加载 JavaScript 的过程中页面就不会重新绘制,否则,浏览器在不具有这些特性的 script 标签后就不会重绘任何东西。
+这样在加载 JavaScript 的过程中页面就不会重新绘制,否则,浏览器在不具有这些特性的 script 标签后就不会重绘任何东西。 -注意:这些特性在页面第一次加载时会有所帮助,你可以这样用但不能指靠它在所有的浏览器中起作用。如果你遵循指南(guidelines)写出了非常优秀的 JavaScript 代码,也不必要再去修改它了。
+注意:这些特性在页面第一次加载时会有所帮助,你可以这样用但不能指靠它在所有的浏览器中起作用。如果你遵循指南(guidelines)写出了非常优秀的 JavaScript 代码,也不必要再去修改它了。 -{{htmlelement('html')}}
- {{htmlelement('head')}}
- {{htmlelement('link')}}
+- `{{htmlelement('html')}}`
+ - `{{htmlelement('head')}}`
+ - `{{htmlelement('link')}}`
CSS 文件用来修饰页面外观。在调试维护中把不相关的 CSS 拆分在不同文件中,且尽量减少文件的数量可以提高性能。
- {{htmlelement('script')}}
- JavaScript 文件用来实现页面加载时需要的函数,而避免在页面加载后才能运行的 JavaScript。在调试维护中把不相关的 JavaScript 拆分在不同文件中,且尽量减少文件的数量可以提高性能。
- {{htmlelement('body')}}
- 用户能在完整页面下载完之前就可以看到的页面小分块({{htmlelement('header')}}
/{{htmlelement('main')}}/
{{htmlelement('table')}}
)。
- {{htmlelement('script')}}
+ - `{{htmlelement('script')}}`
+ JavaScript 文件用来实现页面加载时**需要**的函数,而避免在页面加载后才能运行的 JavaScript。在调试维护中把不相关的 JavaScript 拆分在不同文件中,且尽量减少文件的数量可以提高性能。
+ - `{{htmlelement('body')}}`
+ 用户能在完整页面下载完之前就可以看到的页面小分块(`{{htmlelement('header')}}`/`{{htmlelement('main')}}`/`{{htmlelement('table')}}`)。
+
+ - `{{htmlelement('script')}}`
DHTML 脚本通常在页面完全加载或者所有必要的对象(objects)已初始化完毕之后才能运行。没有必要在页面内容之前加载这些脚本,这只会拖慢页面加载和初始化的体验。在调试维护中把不相关的 script 拆分在不同文件中,且尽量减少文件的数量可以提高性能。如有图像用到了反转效果,你应该在页面内容下载完后预加载这些图像。
- 下面的链接指向日常中需要用 HTML 解决的问题的解决方案。
+下面的链接指向日常中需要用 HTML 解决的问题的解决方案。 -HTML 应用最基础的是文档结构。如果你是 HTML 新手那么你应该和我们一起从这里开始学习。
+HTML 应用最基础的是文档结构。如果你是 HTML 新手那么你应该和我们一起从这里开始学习。 - +- [如何创建 HTML 文档](/zh-CN/docs/learn/HTML/Introduction_to_HTML/Getting_started#实践操作_创建你的第一个HTML文档) +- [如何将网页分成有逻辑的段落](/en-US/docs/Learn/HTML/Howto/Divide_a_webpage_into_logical_sections) +- [如何设置一个适当的标题和段落结构](/en-US/Learn/HTML/Introduction_to_HTML/HTML_text_fundamentals#The_basics_headings_and_paragraphs) -HTML 专门为文档提供语义信息,因此,HTML 能够解答关于如何在文档中最好地传递消息的许多问题。
+HTML 专门为文档提供语义信息,因此,HTML 能够解答关于如何在文档中最好地传递消息的许多问题。 -使用 HTML 的主要原因之一,就是可以使用{{Glossary("hyperlink", "hyperlinks")}}来轻松导航,实现方式有以下几种:
+使用 HTML 的主要原因之一,就是可以使用{{Glossary("hyperlink", "hyperlinks")}}来轻松导航,实现方式有以下几种: -HTML 仅仅建立了文档结构。为解决演示文稿问题,可使用{{glossary("CSS")}}或脚本令页面交互。
+HTML 仅仅建立了文档结构。为解决演示文稿问题,可使用{{glossary("CSS")}}或脚本令页面交互。 - +- [如何在网页中使用 CSS](/en-US/Learn/CSS/Introduction_to_CSS/How_CSS_works#How_to_apply_your_CSS_to_your_HTML) +- [如何在网页中使用 JavaScript](/en-US/docs/Learn/HTML/Howto/Use_JavaScript_within_a_webpage) -除了基本问题,HTML 还有更丰富的功能,其提供了高级特性用于解决复杂问题。这些文章可以帮助你解决一些相对不常见的问题:
+除了基本问题,HTML 还有更丰富的功能,其提供了高级特性用于解决复杂问题。这些文章可以帮助你解决一些相对不常见的问题: -表单是一种复杂的 HTML 结构,用于从网页向网络服务器发送数据。我们鼓励你仔细阅读完整指南.你可由此入门:
+表单是一种复杂的 HTML 结构,用于从网页向网络服务器发送数据。我们鼓励你仔细阅读[完整指南](/en-US/docs/Web/Guide/HTML/Forms).你可由此入门: -一些表格化信息/数据需用行和列整合到表格中去. 而表格是最复杂的 HTML 结构之一,熟练掌握它并不容易:
+一些表格化信息/数据需用行和列整合到表格中去. 而表格是最复杂的 HTML 结构之一,熟练掌握它并不容易: - +- [如何创建一张数据电子表格](/en-US/docs/Learn/HTML/Howto/Create_a_data_spreadsheet) +- [如何使 HTML 表格可获取](/en-US/docs/Learn/HTML/Howto/Make_HTML_tables_accessible) +- [如何优化 HTML 表格的展现](/en-US/docs/Learn/HTML/Howto/Optimize_HTML_table_rendering) -HTML 支持多语言。其提供了用于解决常见的国际化问题的工具。
+HTML 支持多语言。其提供了用于解决常见的国际化问题的工具。 -{{LearnSidebar}}
+{{LearnSidebar}} -HTML5是具有扩展性的设计,它初衷是数据应与特定的元素相关联,但不需要任何定义。data-* 属性允许我们在标准内于 HTML 元素中存储额外的信息,而不需要使用类似于 classList,标准外属性,DOM 额外属性或是 setUserData 之类的技巧。
+[HTML5](/en-US/docs/Web/Guide/HTML/HTML5)是具有扩展性的设计,它初衷是数据应与特定的元素相关联,但不需要任何定义。[data-\* 属性](/en-US/docs/Web/HTML/Global_attributes#data-*)允许我们在标准内于 HTML 元素中存储额外的信息,而不需要使用类似于 [classList](/en-US/docs/Web/API/Element.classList),标准外属性,DOM 额外属性或是 [setUserData](/en-US/docs/Web/API/Node.setUserData) 之类的技巧。 -语法非常简单。所有在元素上以data-
开头的属性为数据属性。比如说你有一篇文章,而你又想要存储一些不需要显示在浏览器上的额外信息。请使用 data 属性:
<article +```html ++ +``` -... -</article>
在外部使用JavaScript去访问这些属性的值同样非常简单。你可以使用{{domxref("Element.getAttribute", "getAttribute()")}}配合它们完整的 HTML 名称去读取它们,但标准定义了一个更简单的方法:{{domxref("DOMStringMap")}}你可以使用{{domxref("HTMLElement.dataset", "dataset")}}读取到数据。
+在外部使用[JavaScript](/en-US/docs/Web/JavaScript)去访问这些属性的值同样非常简单。你可以使用{{domxref("Element.getAttribute", "getAttribute()")}}配合它们完整的 HTML 名称去读取它们,但标准定义了一个更简单的方法:{{domxref("DOMStringMap")}}你可以使用{{domxref("HTMLElement.dataset", "dataset")}}读取到数据。 -为了使用dataset
对象去获取到数据属性,需要获取属性名中data-
之后的部分 (要注意的是破折号连接的名称需要改写为骆驼拼写法 (如"index-number"转换为"indexNumber"))。
var article = document.querySelector('#electriccars'); +```js +var article = document.querySelector('#electriccars'); article.dataset.columns // "3" article.dataset.indexNumber // "12314" -article.dataset.parent // "cars"+article.dataset.parent // "cars" +``` -
每一个属性都是一个可读写的字符串。在上面的例子中,article.dataset.columns = 5
.将会调整属性的值为 5。
注意,data 设定为 HTML 属性,他们同样能被CSS访问。比如你可以通过generated content使用函数{{cssxref("attr")}}来显示 data-parent 的内容:
+注意,data 设定为 HTML 属性,他们同样能被[CSS](/en-US/docs/Web/CSS)访问。比如你可以通过[generated content](/en-US/docs/Web/CSS/content)使用函数{{cssxref("attr")}}来显示 data-parent 的内容: -article::before { +```css +article::before { content: attr(data-parent); -}+} +``` -
你也同样可以在 CSS 中使用属性选择器根据 data 来改变样式:
+你也同样可以在 CSS 中使用[属性选择器](/en-US/docs/Web/CSS/Attribute_selectors)根据 data 来改变样式: -article[data-columns='3'] { +```css +article[data-columns='3'] { width: 400px; } article[data-columns='4'] { width: 600px; -}- -
你可以在这个JSBin 里看到全部演示。
+} +``` -Data 属性同样可以存储不断变化的信息,比如游戏的得分。使用 CSS 选择器与 JavaScript 去访问可以让你得到花俏的效果,这里你并不需要用常规的编写方案来编写代码。有关使用生成内容和 CSS 转换(JSBin 示例)的示例,请参阅此视频。
+你可以在这个[JSBin ](http://jsbin.com/ujiday/2/edit)里看到全部演示。 -数据值是字符串。必须在选择器中引用数值才能使样式生效。
+Data 属性同样可以存储不断变化的信息,比如游戏的得分。使用 CSS 选择器与 JavaScript 去访问可以让你得到花俏的效果,这里你并不需要用常规的编写方案来编写代码。有关使用生成内容和 CSS 转换([JSBin 示例](https://jsbin.com/atawaz/3/edit))的示例,请参阅此[视频](https://www.youtube.com/watch?v=On_WyUB1gOk)。 -不要在 data attribute 里储存需要显示及访问的内容,因为一些其他的技术可能访问不到它们。另外爬虫不能将 data attribute 的值编入索引中。
+## Issues -IE 的支持度及显示效果是最主要讨论的问题。IE11+支持这个标准,但所有更早期的版本都不支持dataset。为了支持 IE10 及以下的版本,你必须使用{{domxref("Element.getAttribute", "getAttribute()")}} 来访问。另外,读取 data-attributes 的行为相比 JS 存储数据会慢。使用 dataset 会比使用 getAttribute() 读取数据来得慢。
+不要在 data attribute 里储存需要显示及访问的内容,因为一些其他的技术可能访问不到它们。另外爬虫不能将 data attribute 的值编入索引中。 -尽管如此,对于那些与元素相关的数据,这依然是一个很好的解决方案。
+IE 的支持度及显示效果是最主要讨论的问题。IE11+支持这个标准,但所有更早期的版本都不支持[dataset](http://caniuse.com/#feat=dataset)。为了支持 IE10 及以下的版本,你必须使用{{domxref("Element.getAttribute", "getAttribute()")}} 来访问。另外,[读取 data-attributes 的行为](http://jsperf.com/data-dataset)相比 JS 存储数据会慢。使用 dataset 会比使用 getAttribute() 读取数据来得慢。 -在 FireFox 49.0.2(其他版本也有可能) 中,javascript 将无法读出包含 1022 个及以上字符的 data 属性 (EcmaScript 4).
+尽管如此,对于那些与元素相关的数据,这依然是一个很好的解决方案。 -HTML 中有许多其他元素可以用于格式化文本,我们没有在HTML 文字处理基础中提到它们。本文中所描述的元素虽然少有人知,但仍然值得去学习(尽管仍然不是完整的列表)。在这里你将了解标记引文、描述列表、计算机代码和其他相关文本、下标和上标、联系信息等。
+HTML 中有许多其他元素可以用于格式化文本,我们没有在[HTML 文字处理基础](/zh-CN/docs/Learn/HTML/Introduction_to_HTML/HTML_text_fundamentals)中提到它们。本文中所描述的元素虽然少有人知,但仍然值得去学习(尽管仍然不是完整的列表)。在这里你将了解标记引文、描述列表、计算机代码和其他相关文本、下标和上标、联系信息等。预备知识: | -熟悉 HTML 基础(包含在 开始学习 HTML 中)、HTML 文本格式(包含在 HTML 文字处理初步 中)。 | -
---|---|
目标: | -学习一些不常见的 HTML 元素标记来使用高级语义功能。 | -
预备知识: | ++ 熟悉 HTML 基础(包含在 + 开始学习 HTML + 中)、HTML 文本格式(包含在 + HTML 文字处理初步 + 中)。 + | +
目标: | +学习一些不常见的 HTML 元素标记来使用高级语义功能。 | +
在 HTML 基础部分,我们讨论了如何在 HTML 中标记基本的列表,但是我们没有提到你偶尔会遇到的第三种类型的列表—描述列表 (description list) 。这种列表的目的是标记一组项目及其相关描述,例如术语和定义,或者是问题和答案等。让我们看一组术语和定义的示例:
+在 HTML 基础部分,我们讨论了如何在 HTML 中[标记基本的列表](/zh-CN/docs/Learn/HTML/Introduction_to_HTML/HTML_text_fundamentals#列表_Lists),但是我们没有提到你偶尔会遇到的第三种类型的列表—**描述列表** (description list) **。**这种列表的目的是标记一组项目及其相关描述,例如术语和定义,或者是问题和答案等。让我们看一组术语和定义的示例: -内心独白 -戏剧中,某个角色对自己的内心活动或感受进行念白表演,这些台词只面向观众,而其他角色不会听到。 -语言独白 -戏剧中,某个角色把自己的想法直接进行念白表演,观众和其他角色都可以听到。 -旁白 -戏剧中,为渲染幽默或戏剧性效果而进行的场景之外的补充注释念白,只面向观众,内容一般都是角色的感受、想法、以及一些背景信息等。+ 内心独白 + 戏剧中,某个角色对自己的内心活动或感受进行念白表演,这些台词只面向观众,而其他角色不会听到。 + 语言独白 + 戏剧中,某个角色把自己的想法直接进行念白表演,观众和其他角色都可以听到。 + 旁白 + 戏剧中,为渲染幽默或戏剧性效果而进行的场景之外的补充注释念白,只面向观众,内容一般都是角色的感受、想法、以及一些背景信息等。 -
描述列表使用与其他列表类型不同的闭合标签— {{htmlelement("dl")}}; 此外,每一项都用 {{htmlelement("dt")}} (description term) 元素闭合。每个描述都用 {{htmlelement("dd")}} (description definition) 元素闭合。让我们来完成下面的标记例子:
+描述列表使用与其他列表类型不同的闭合标签— {{htmlelement("dl")}}; 此外,每一项都用 {{htmlelement("dt")}} (description term) 元素闭合。每个描述都用 {{htmlelement("dd")}} (description definition) 元素闭合。让我们来完成下面的标记例子: -<dl> - <dt>内心独白</dt> - <dd>戏剧中,某个角色对自己的内心活动或感受进行念白表演,这些台词只面向观众,而其他角色不会听到。</dd> - <dt>语言独白</dt> - <dd>戏剧中,某个角色把自己的想法直接进行念白表演,观众和其他角色都可以听到。</dd> - <dt>旁白</dt> - <dd>戏剧中,为渲染幽默或戏剧性效果而进行的场景之外的补充注释念白,只面向观众,内容一般都是角色的感受、想法、以及一些背景信息等。</dd> -</dl>+```html +
浏览器的默认样式会在描述列表的描述部分(description definition)和描述术语(description terms)之间产生缩进。MDN 非常严密地遵循这一惯例,同时也鼓励关于术语的其他更多的定义(but also embolden the terms for extra definition)。
+浏览器的默认样式会在**描述列表的描述部分**(description definition)和**描述术语**(description terms)之间产生缩进。MDN 非常严密地遵循这一惯例,同时也鼓励关于术语的其他更多的定义(but also embolden the terms for extra definition)。 -下面是前述代码的显示结果:
+下面是前述代码的显示结果: -请注意:一个术语 <dt>
可以同时有多个描述 <dd>
,比如说:
现在是时候尝试一下描述列表了; 在输入区域的原始文本里添加相应的元素,使得它在输出区域是以描述列表的形式出现。如果你喜欢,你也可以使用你自己的描述术语和描述。
+现在是时候尝试一下描述列表了; 在输入区域的原始文本里添加相应的元素,使得它在输出区域是以描述列表的形式出现。如果你喜欢,你也可以使用你自己的描述术语和描述。 -如果你做错了,你可以随时点击【重置】按钮。如果实在进行不下去,可以点击【显示答案】。
+如果你做错了,你可以随时点击【重置】按钮。如果实在进行不下去,可以点击【显示答案】。 -