Chinese translation of responsive-web-design (#40607)
This commit is contained in:
@ -8,21 +8,21 @@ forumTopicId: 16628
|
||||
|
||||
# --description--
|
||||
|
||||
在其他挑战里你应该已经见到过`img`标签的`alt`属性了。`alt`属性中的文本作为备用文字描述了图片的内容,这可以帮助用户在图片加载失败或者不可见的情况下理解图片内容,也有助于搜索引擎理解图片内容,并将其加入到搜索结果中。例如:
|
||||
在其他挑战里你应该已经见到过 `img` 标签的 `alt` 属性了。`alt` 属性中的文本作为备用文字来描述图片的内容,这可以帮助用户在图片加载失败或者图片不可见的情况下理解图片内容,也有助于搜索引擎理解图片内容,并将其加入到搜索结果中。例如:
|
||||
|
||||
`<img src="importantLogo.jpeg" alt="Company logo">`
|
||||
|
||||
视觉障碍用户无法通过视觉获取信息,而是通过屏幕阅读器将网页内容转换为音频以获取信息。屏幕阅读器可以识别`alt`属性,朗读其中的内容,来告知用户图片包含的关键信息。
|
||||
视觉障碍用户无法通过视觉获取信息,而是通过屏幕阅读器将网页内容转换为音频以获取信息。屏幕阅读器可以识别 `alt` 属性,朗读其中的内容,来告知用户图片包含的关键信息。
|
||||
|
||||
良好的`alt`文本可以简明扼要地描述图片信息,所以你应该为图片添加`alt`属性。另外,HTML5 标准也在考虑强制要求对图片添加`alt`属性。
|
||||
`alt` 文本可以为屏幕阅读器提供图片的描述信息,所以你应始终为图片添加 `alt` 属性。另外,根据最新的 HTML5 标准,为图片添加 `alt` 属性是必需的。
|
||||
|
||||
# --instructions--
|
||||
|
||||
碰巧,Camper Cat 是忍者中写代码最厉害的,他正在建立一个可以分享忍者知识的网站。在这个网站中,他使用一张简介图片来展示技能。给`img`标签添加一个`alt`属性,说明 Camper Cat 在学习空手道(图片的`src`属性没有指向任何链接,因此你可以看到`alt`属性中的文本)。
|
||||
碰巧,Camper Cat 是忍者中写代码最厉害的,他正在建立一个可以分享忍者知识的网站。在这个网站中,他添加了一张展示技能的资料图片,并希望这张图片可以让访问网站的所有用户看到。请给 `img` 标签添加一个 `alt` 属性,说明 Camper Cat 在学习空手道(图片的 `src` 属性指向的是一个不存在的文件,因此你可以看到 `alt` 属性中的文本出现在页面上)。
|
||||
|
||||
# --hints--
|
||||
|
||||
你的`img`标签应该包含一个非空的`alt`属性。
|
||||
`img` 标签应该包含一个非空的 `alt` 属性。
|
||||
|
||||
```js
|
||||
assert($('img').attr('alt'));
|
||||
|
@ -8,11 +8,11 @@ forumTopicId: 301008
|
||||
|
||||
# --description--
|
||||
|
||||
表单中经常出现`input`标签,它可以用来创建多种表单控件。它的`type`属性指定了所要创建的`input`标签类型。
|
||||
表单中经常出现 `input` 标签,它可以用来创建多种表单控件。它的 `type` 属性指定了所要创建的 `input` 标签类型。
|
||||
|
||||
在以前的挑战中,你可能已经见过`text`与`submit`类型的`input`标签,HTML5 引入了`date`类型来创建时间选择器。依赖于浏览器的支持,当点击`input`标签时,时间选择器会显示出来,这可以让用户填写表单更加容易。
|
||||
在以前的挑战中,我们已经见过 `text` 与 `submit` 类型的 `input` 标签。HTML5 规范添加了 `date` 类型来创建日期选择器。如果浏览器支持,在点击 `input` 标签时,日期选择器会显示出来,这让用户填写表单变得更加容易。
|
||||
|
||||
对于旧版本的浏览器,`type`属性的默认值是`text`。这种情况下,可以利用`label`标签或者占位文本来提示用户`input`标签的输入类型为日期。
|
||||
对于旧版本的浏览器,由于不支持 `date`,此时 `type` 属性会被浏览器设置为 `text`。这种情况下,我们可以利用 `label` 标签或者占位符文本来提示用户需要输入的日期格式。
|
||||
|
||||
举个例子:
|
||||
|
||||
@ -23,29 +23,29 @@ forumTopicId: 301008
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 想举办一场比武大会,他想收集参赛者的最佳参赛时间。请为 Camper Cat 的页面添加一个`input`标签,其`type`属性值为 date,`id`属性为 pickdate,`name`属性为 date。
|
||||
Camper Cat 想举办一场比武大会,他想收集参赛者的最佳参赛时间。请为 Camper Cat 的页面添加一个 `input` 标签,其 `type` 属性值为 "date",`id` 为 "pickdate",`name` 属性值为 "date"。
|
||||
|
||||
# --hints--
|
||||
|
||||
你的代码中应该有 1 个`input`标签。
|
||||
应有 1 个 `input` 标签。
|
||||
|
||||
```js
|
||||
assert($('input').length == 2);
|
||||
```
|
||||
|
||||
你的`input`标签的`type`属性值应该为 date。
|
||||
`input` 标签的 `type` 属性值应该为 date。
|
||||
|
||||
```js
|
||||
assert($('input').attr('type') == 'date');
|
||||
```
|
||||
|
||||
你的`input`标签的`id`属性值应该为 pickdate。
|
||||
`input` 标签的 `id` 应为 pickdate。
|
||||
|
||||
```js
|
||||
assert($('input').attr('id') == 'pickdate');
|
||||
```
|
||||
|
||||
你的`input`标签的`name`属性值应该为 date。
|
||||
`input` 标签的 `name` 属性值应该为 date。
|
||||
|
||||
```js
|
||||
assert($('input').attr('name') == 'date');
|
||||
|
@ -8,20 +8,19 @@ forumTopicId: 301011
|
||||
|
||||
# --description--
|
||||
|
||||
色盲的形式有很多种,它的表现可以从对特定波长光波的感知度较低,到几乎无法看到颜色。最常见的形式是对绿色的低感知度。
|
||||
色盲的形式有很多种,它的表现可以从对特定波长光波的感知度较低,到完全无法看到颜色。最常见的形式是对绿色的低感知度。
|
||||
|
||||
例如:如果内容的前景色与背景色是两种相近的绿色,那么色盲用户可能会无法识别它们。可以认为色轮上相邻的颜色是相近的,在表示重要信息的时候应避免使用这些颜色的组合。
|
||||
例如,如果内容的前景色与背景色是两种相近的绿色,那么色盲用户可能会无法区分它们。色轮上距离较近的颜色,特别是相邻的颜色,看起来都会很难区分。在表示重要信息的时候应避免使用这类相近颜色的组合。
|
||||
|
||||
**注意:**
|
||||
一些在线颜色拾取器有色盲模拟功能,可以模拟颜色在不同形式色盲的视觉中的呈现结果,它们和在线对比度检查器一样,都是很好的工具。
|
||||
**注意:**一些在线颜色选择器有色盲模拟功能,可以模拟颜色在不同形式的色盲中所呈现的效果。它们和在线对比度检查器一样,都是很好的工具。
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 正在测试一个重要按钮的不同样式。在色轮上,黄色(`#FFFF33`)的`background-color`和绿色(`#33FF33`)的文本`color`是相邻的色调,一些色盲用户几乎无法区分它们,而且这两个颜色的亮度相近,对比度太小。为了解决这两个问题,请将文本的`color`修改为深蓝色(`#003366`)。
|
||||
Camper Cat 正在测试一个重要按钮的不同样式。在色轮上,用于背景色的黄色(`#FFFF33`)和文字颜色绿色(`#33FF33`)是相邻的色调,一些色盲用户几乎无法区分它们,而且这两个颜色的亮度相近,对比度太小。为了解决这两个问题,请将文本的 `color` 修改为深蓝色(`#003366`)。
|
||||
|
||||
# --hints--
|
||||
|
||||
`button`的文本`color`应该是深蓝色。
|
||||
`button` 内容文本的 `color` 属性值应为深蓝色。
|
||||
|
||||
```js
|
||||
assert($('button').css('color') == 'rgb(0, 51, 102)');
|
||||
|
@ -8,27 +8,27 @@ forumTopicId: 301012
|
||||
|
||||
# --description--
|
||||
|
||||
颜色是可视化设计的重要组成部分,但是使用颜色也引入了两个可访问性问题。首先,不能仅仅使用颜色作为传达重要信息的唯一方式,因为屏幕阅读器无法获取这些信息。其次,前景色与背景色需要有足够的对比度,这样色盲用户才可以识别它们。
|
||||
颜色是可视化设计的重要组成部分,但是使用颜色也引入了两个可访问性问题。首先,不能仅仅使用颜色作为传达重要信息的唯一方式,因为屏幕阅读器无法获取这些信息。其次,前景色与背景色需要有足够的对比度,这样色盲用户才可以区分它们。
|
||||
|
||||
在之前的挑战中,我们用文本备用方案解决了第一个问题。在上一个挑战中,我们使用对比度检测工具解决了第二问题。WCAG 建议为颜色及灰度组合使用 4.5 : 1 的对比度。
|
||||
在之前的挑战中,我们用文本备用方案解决了第一个问题。在上一个挑战中,我们使用对比度检测工具解决了第二个问题。WCAG 建议为颜色及灰度组合使用 4.5 : 1 的对比度。
|
||||
|
||||
色盲用户无法将一些颜色与另一些颜色区分出来——通常是因为色调,也有时候是因为亮度。你可能想起对比度是用前景色与背景色的相对亮度计算的。
|
||||
色盲用户无法将一些颜色与另一些颜色区分出来,这通常是因为色调,有时候是因为亮度。你可能还记得,对比度是用前景色与背景色的相对亮度计算的。
|
||||
|
||||
实践中,在对比度检测工具的帮助下,我们可以通过将较暗的颜色变暗、将较淡的颜色变淡的方法来使对比度达到 4.5 : 1。在色轮中,较暗的颜色通常是蓝色、紫色、洋红和红色,而较淡的颜色通常是橙色、黄色、绿色和蓝绿色。
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 正在尝试为他的博客文本与背景使用颜色,但是他目前使用的组合是绿色的`background-color`与栗色的`color`,它们的对比度为 2.5 : 1。Camper Cat 使用了 CSS 的`hsl()`(hsl 为 hue, saturation, lightness 的缩写)属性来设置颜色,所以通过修改`hsl()`属性的第三个参数,可以很容易地调整颜色的亮度。请将`background-color`的亮度从 35% 增加到 55%,`color`的亮度从 20% 减少到 15%,这样可以使对比度达到 5.9 : 1。
|
||||
Camper Cat 正在尝试为他的博客文本与背景配置颜色。他目前使用的组合是绿色的 `background-color` 与栗色的 `color`,它们的对比度为 2.5 : 1。Camper Cat 使用了 CSS 的 `hsl()`(hsl 为 hue、saturation、lightness 的缩写)属性来设置颜色。这样,通过修改 `hsl()` 属性的第三个参数,我们可以很轻松地调整颜色的亮度。请将 `background-color` 的亮度从 35% 增加到 55%,将 `color` 的亮度从 20% 减少到 15%,这样可以使对比度达到 5.9 : 1。
|
||||
|
||||
# --hints--
|
||||
|
||||
你应该将`color`属性的亮度值设置为 15%。
|
||||
应将 `color` 属性的亮度值设置为 15%。
|
||||
|
||||
```js
|
||||
assert(code.match(/color:\s*?hsl\(0,\s*?55%,\s*?15%\)/gi));
|
||||
```
|
||||
|
||||
你应该将`background-color`属性的亮度值设置为 55%。
|
||||
应将 `background-color` 属性的亮度值设置为 55%。
|
||||
|
||||
```js
|
||||
assert(code.match(/background-color:\s*?hsl\(120,\s*?25%,\s*?55%\)/gi));
|
||||
|
@ -1,6 +1,6 @@
|
||||
---
|
||||
id: 587d778f367417b2b2512aae
|
||||
title: 使用描述性链接文本赋予链接含义
|
||||
title: 为链接添加描述性的文本
|
||||
challengeType: 0
|
||||
videoUrl: 'https://scrimba.com/c/c437DcV'
|
||||
forumTopicId: 301013
|
||||
@ -8,17 +8,17 @@ forumTopicId: 301013
|
||||
|
||||
# --description--
|
||||
|
||||
屏幕阅读器用户可以选择其设备读取的内容的类型,这包括跳转到(或跳过)标志标签,跳转到主要内容,或者从标题中获取页面摘要,还可以选择只听取页面中的有效链接。
|
||||
屏幕阅读器用户可以选择其设备读取的内容的类型,包括表示“跳转到”(或“跳过”)的元素,跳转到主要内容,或者从标题中获取页面摘要。用户还可以选择只听取页面中的超链接内容。
|
||||
|
||||
屏幕阅读器通过阅读链接文本或者锚点标签(`a`)之间的内容来完成这个操作。使用 "click here" 或者 "read more" 作为链接文本并没有多少帮助。相反地,应该在`a`标签中使用简洁的描述性语言来为用户提供更多的信息。
|
||||
屏幕阅读器通过阅读链接文本(即 `a` 标签的内容文本)来完成这个操作。如果我们只在链接中写上 "click here"(点击这里)或者 "read more"(阅读更多),显然帮助有限。相反地,我们应该在 `a` 标签中使用简洁的描述性语言来为用户提供更多信息。
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 在链接中使用的文本在脱离上下文的情况下,描述性不是很好。请修改锚点标签(`a`),将其包含的文本从 "click here" 改为 "information about batteries"。
|
||||
Camper Cat 在链接中使用的文本在脱离上下文的情况下,描述性不是很好。请修改 `a` 标签,将其包含的文本从 "click here" 改为 "information about batteries"。
|
||||
|
||||
# --hints--
|
||||
|
||||
请修改`a`标签,将其包含的文本从 "click here" 改为 "information about batteries"。
|
||||
你应修改 `a` 标签,将其包含的文本从 "click here" 改为 "information about batteries"。
|
||||
|
||||
```js
|
||||
assert(
|
||||
@ -28,13 +28,13 @@ assert(
|
||||
);
|
||||
```
|
||||
|
||||
`a`元素应该有一个`href`属性,且值为空字符串
|
||||
`a` 元素应该有一个 `href` 属性,且其属性值为空字符串 `""`。
|
||||
|
||||
```js
|
||||
assert($('a').attr('href') === '');
|
||||
```
|
||||
|
||||
`a` 元素应该有一个结束标记
|
||||
`a` 元素应该有一个结束标签。
|
||||
|
||||
```js
|
||||
assert(
|
||||
|
@ -8,9 +8,9 @@ forumTopicId: 301014
|
||||
|
||||
# --description--
|
||||
|
||||
HTML5 的`audio`标签用于呈现音频内容,它也具有语义化特性。可以在`audio`上下文中为音频内容添加文字说明或者字幕链接,使听觉障碍用户也能获取音频中的信息。
|
||||
HTML5 的 `audio` 标签用于呈现音频内容或音频流,它也具有语义化特性。可以在 `audio` 上下文中为音频内容添加描述文字或字幕链接,使听觉障碍用户也能获取音频中的信息。
|
||||
|
||||
`audio`支持`controls`属性,可以使浏览器为音频提供具有开始、暂停等功能的播放控件。`controls`属性是一个布尔属性,只要这个属性出现在`audio`标签中,浏览器就会开启播放控件。
|
||||
`audio` 支持 `controls` 属性,可以使浏览器为音频提供具有开始、暂停等功能的播放控件,而且还支持键盘操作。`controls` 属性是一个布尔属性,即不需要提供属性值。只要这个属性出现在 `audio` 标签中,浏览器就会开启播放控件。
|
||||
|
||||
举个例子:
|
||||
|
||||
@ -21,25 +21,23 @@ HTML5 的`audio`标签用于呈现音频内容,它也具有语义化特性。
|
||||
</audio>
|
||||
```
|
||||
|
||||
**注意:**
|
||||
多媒体内容通常同时包含音频与视频部分,它需要同步音频与字幕,以使视觉或听觉障碍用户可以获取它的内容。一般情况下,网页开发者不需要创建音频与字幕,但是需要将它们添加到多媒体中。
|
||||
**注意:**多媒体内容通常同时包含音频与视频部分,它需要同步的字幕与逐字稿,以使视觉或听觉障碍用户可以获取它的内容。一般情况下,网页开发者不负责创建字幕或逐字稿,但是需要将它们添加到多媒体中。
|
||||
|
||||
# --instructions--
|
||||
|
||||
是时候让 Camper Cat 休息一下,并与朋友 camper Zersiax (@zersiax) 会面。Zersiax 是一位屏幕阅读器用户,同时也是无障碍设计的高手。为了体验 Zersiax 的屏幕阅读器的朗读效果,请在`p`标签之后添加一个具有`controls`属性的`audio`标签。然后在`audio`标签内添加一个`source`标签,并且设置`src`属性为"`https://s3.amazonaws.com/freecodecamp/screen-reader.mp3`",并且设置`type`属性为"audio/mpeg".
|
||||
是时候让 Camper Cat 休息一下,并与朋友 Zersiax (@zersiax) 会面。Zersiax 是一位屏幕阅读器用户,同时也是无障碍设计的高手。为了体验屏幕阅读器的朗读效果,请在 `p` 标签之后添加一个具有 `controls` 属性的 `audio` 标签。然后在 `audio` 标签内添加一个 `source` 标签并设置 `src` 属性值为 "`https://s3.amazonaws.com/freecodecamp/screen-reader.mp3`"。同时,请将 `source` 的 `type` 属性值设置为 "audio/mpeg"。
|
||||
|
||||
**注意:**
|
||||
音频片段的播放速度可能会快到另我们难以理解,但是对于屏幕阅读器用户来说这是正常速度。
|
||||
**注意:**音频片段的播放速度可能会快到另我们难以理解,但是对于屏幕阅读器用户来说这是正常速度。
|
||||
|
||||
# --hints--
|
||||
|
||||
你的代码应该包含一个`audio`标签。
|
||||
应该包含一个 `audio` 标签。
|
||||
|
||||
```js
|
||||
assert($('audio').length === 1);
|
||||
```
|
||||
|
||||
确保你的`audio`标签是闭合的。
|
||||
确保 `audio` 元素有结束标签。
|
||||
|
||||
```js
|
||||
assert(
|
||||
@ -48,25 +46,25 @@ assert(
|
||||
);
|
||||
```
|
||||
|
||||
`audio`标签应具有`controls`属性。
|
||||
`audio` 标签应存在 `controls` 属性。
|
||||
|
||||
```js
|
||||
assert($('audio').attr('controls'));
|
||||
```
|
||||
|
||||
你的代码应具有`source`标签。
|
||||
代码中应存在 `source` 标签。
|
||||
|
||||
```js
|
||||
assert($('source').length === 1);
|
||||
```
|
||||
|
||||
`source`标签应该在`audio`标签中。
|
||||
`source` 标签应位于 `audio` 标签中。
|
||||
|
||||
```js
|
||||
assert($('audio').children('source').length === 1);
|
||||
```
|
||||
|
||||
`source`标签中`src`属性的值应该与教程中的链接一致。
|
||||
`source` 标签中 `src` 的属性值应该与教程中的链接一致。
|
||||
|
||||
```js
|
||||
assert(
|
||||
@ -75,7 +73,7 @@ assert(
|
||||
);
|
||||
```
|
||||
|
||||
`source`标签中应具有`type`属性,其值为 audio/mpeg。
|
||||
`source` 标签中应具有 `type` 属性,其属性值应为 audio/mpeg。
|
||||
|
||||
```js
|
||||
assert($('source').attr('type') === 'audio/mpeg');
|
||||
|
@ -8,11 +8,11 @@ forumTopicId: 301015
|
||||
|
||||
# --description--
|
||||
|
||||
HTML5 引入了`figure`标签以及与之相关的`figcaption`标签。它们一起用于展示可视化信息(如:图片、图表)及其标题。这样通过语义化对内容进行分组并配以用于解释`figure`的文字,可以极大地提升内容的可访问性。
|
||||
HTML5 引入了 `figure` 标签以及与之相关的 `figcaption` 标签。它们一起用于展示可视化信息(如:图片、图表)及其标题。通过语义化对内容进行分组并配以用于解释 `figure` 的文字,可以极大地提升内容的可访问性。
|
||||
|
||||
对于图表之类的可视化数据,标题可以为屏幕阅读器用户提供简要的说明。但是这里有一个难点,如何处理那些超出屏幕可视范围(使用 CSS)的表格版本的图表数据,以使屏幕阅读器用户也可以获取信息。
|
||||
对于图表之类的可视化数据,标题可以为屏幕阅读器用户提供简要的说明。但是这里有一个难点,如何为屏幕阅读器用户展示那些超出屏幕可视范围(使用 CSS)的表格所表现的图表数据。
|
||||
|
||||
举个例子——注意`figcaption`包含在`figure`标签中,并且可以与其他标签组合使用:
|
||||
举个例子,注意 `figcaption` 包含在 `figure` 标签中,并且可以与其他标签组合使用:
|
||||
|
||||
```html
|
||||
<figure>
|
||||
@ -26,41 +26,41 @@ HTML5 引入了`figure`标签以及与之相关的`figcaption`标签。它们一
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 正在努力创建一张条形图,用来显示每周用于隐形、战斗、武器训练的时间。请帮助完善他的页面,将他的用于呈现图表的`div`标签修改为`figure`标签,用于呈现图表标题的`p`标签改为`figcaption`标签。
|
||||
Camper Cat 正在努力创建一张条形图,用来显示每周用于隐形、战斗、武器训练的时间。请帮助完善他的页面,将他用于呈现图表的 `div` 标签修改为 `figure` 标签;将用于呈现图表标题的 `p` 标签改为 `figcaption` 标签。
|
||||
|
||||
# --hints--
|
||||
|
||||
你的代码应该有 1 个`figure`标签。
|
||||
应存在 1 个 `figure` 标签。
|
||||
|
||||
```js
|
||||
assert($('figure').length == 1);
|
||||
```
|
||||
|
||||
你的代码应该有 1 个`figcaption`标签。
|
||||
应存在 1 个 `figcaption` 标签。
|
||||
|
||||
```js
|
||||
assert($('figcaption').length == 1);
|
||||
```
|
||||
|
||||
你的代码不应有`div`标签。
|
||||
不应存在 `div` 标签。
|
||||
|
||||
```js
|
||||
assert($('div').length == 0);
|
||||
```
|
||||
|
||||
你的代码不应有`p`标签。
|
||||
不应存在 `p` 标签。
|
||||
|
||||
```js
|
||||
assert($('p').length == 0);
|
||||
```
|
||||
|
||||
`figcaption`应该为`figure`的子标签。
|
||||
`figcaption` 应为 `figure` 的子标签。
|
||||
|
||||
```js
|
||||
assert($('figure').children('figcaption').length == 1);
|
||||
```
|
||||
|
||||
请确保你的`figure`标签是闭合的。
|
||||
确保 `figure` 元素有结束标签。
|
||||
|
||||
```js
|
||||
assert(
|
||||
|
@ -8,13 +8,13 @@ forumTopicId: 301016
|
||||
|
||||
# --description--
|
||||
|
||||
合理地使用语义化的 HTML 标签和属性可以提升页面可访问性。在接下来的挑战中,你将会看到使用表单属性的重要场景。
|
||||
合理地使用语义化 HTML 标签和属性可以提升页面的可访问性。在接下来的挑战中,你将会看到在表单中使用属性的场景。
|
||||
|
||||
`label`标签用于呈现特定表单控件的文本,通常是选项的名称。这些文本代表了选项的含义,使表单具有更好的可读性。`label`标签的`for`属性指定了与`label`绑定的表单控件,并且屏幕阅读器也会读取`for`属性。
|
||||
`label` 标签的文本内容通常会是表单组件的名称或标签。这些文本表明了组件的意义,也提升了表单的可访问性。`label` 标签的 `for` 属性将标签与表单组件绑定;同时,屏幕阅读器也会读取 `for` 属性的属性值。
|
||||
|
||||
在 HTML 基础章节的课程中,我们已经了解了单选按钮标签。在那节课程中,我们为了可以点击单选按钮的名称,将`input`标签放在`label`标签中。在本节课程中,我们介绍了另外一种实现这个功能的方法,那就是使用`for`属性。
|
||||
在 HTML 基础章节中,我们已经学习使用了单选按钮标签。在那次挑战中,为了让标签可以在点击的时候也选中输入框,我们将 `input` 标签嵌套在了 `label` 标签里面。在本节课程中,我们会了解到另外一种实现这个功能的方法,那就是使用 `for` 属性。
|
||||
|
||||
`for`属性的值必须与表单控件的`id`属性的值相同。举个例子:
|
||||
`for` 的属性值必须与表单组件的 `id` 属性值相同。举个例子:
|
||||
|
||||
```html
|
||||
<form>
|
||||
@ -25,17 +25,17 @@ forumTopicId: 301016
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 希望他的博客文章能有很多订阅,他想添加一个电子邮件注册表单。请为表示电子邮件的`label`标签添加`for`属性,并设置属性值与`input`标签的`id`属性值相同。
|
||||
Camper Cat 觉得他的博客文章会有很多人订阅,因此他想添加一个电子邮件注册表单。请为表示电子邮件的 `label` 标签添加 `for` 属性,并将其属性值设置为与 `input` 标签的 `id` 属性值相同。
|
||||
|
||||
# --hints--
|
||||
|
||||
你的`label`标签应该有 1 个非空的`for`属性。
|
||||
`label `标签应该有一个非空的 `for` 属性。
|
||||
|
||||
```js
|
||||
assert($('label').attr('for'));
|
||||
```
|
||||
|
||||
`for`属性的值应该与`input`标签的 id 值 email 相同。
|
||||
`for` 的属性值应与用于输入邮箱的 `input` 标签 id 属性值相同。
|
||||
|
||||
```js
|
||||
assert($('label').attr('for') == 'email');
|
||||
|
@ -8,23 +8,23 @@ forumTopicId: 301017
|
||||
|
||||
# --description--
|
||||
|
||||
低对比度的前景色与背景色会使文本难以阅读。足够的对比度可以提高内容的可读性,但是怎样的对比度才算是 “足够” 的?
|
||||
低对比度的前景色与背景色会使文本难以阅读。足够的对比度可以提高内容的可读性,但是怎样的对比度才算是“足够”的?
|
||||
|
||||
Web 内容无障碍指南(WCAG)建议正常文本的对比度至少为 4.5 : 1。对比度是通过比较两种颜色的相对亮度值来计算的,其范围是从相同颜色的 1 : 1(无对比度)到白色与黑色的最高对比度 21 : 1。网上有很多可以帮助你计算对比度的工具。
|
||||
Web 内容无障碍指南(WCAG)建议正常文本的对比度至少为 4.5 : 1。对比度是通过比较两种颜色的相对亮度值来计算的。对于相同颜色来说,对比度是 1 : 1,即无对比度;白色与黑色拥有最高对比度 21 : 1。其他颜色间的对比度都在这个范围之内。网上有很多可以帮助你计算对比度的工具。
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 为他的博客选择了白色背景,浅灰色文字,对比度为 1.5 : 1,这使博客文章难以阅读。请将文字的`color`从当前的浅灰色(`#D3D3D3`)修改为深灰色(`#636363`),以使对比度提升到 6 : 1。
|
||||
Camper Cat 为他的博客选择了白色背景和浅灰色文字,对比度为 1.5 : 1,这使博客文章难以阅读。请将文字的 `color` 从当前的浅灰色(`#D3D3D3`)修改为深灰色(`#636363`),以使对比度提升到 6 : 1。
|
||||
|
||||
# --hints--
|
||||
|
||||
你应该将`body`的`color`修改为深灰色。
|
||||
应该将 `body` 的 `color` 修改为深灰色。
|
||||
|
||||
```js
|
||||
assert($('body').css('color') == 'rgb(99, 99, 99)');
|
||||
```
|
||||
|
||||
你不应该修改`body`的`background-color`。
|
||||
不应修改 `body` 的 `background-color`。
|
||||
|
||||
```js
|
||||
assert($('body').css('background-color') == 'rgb(255, 255, 255)');
|
||||
|
@ -8,27 +8,27 @@ forumTopicId: 301018
|
||||
|
||||
# --description--
|
||||
|
||||
HTML5 添加了诸如`main`、`header`、`footer`、`nav`、`article`、`section`等大量新标签,开发人员提供更多的选择,也兼顾了无障碍特性。
|
||||
HTML5 引入了诸如 `main`、`header`、`footer`、`nav`、`article`、`section` 等大量新标签。这不仅为开发人员提供了更多的选择,同时也提升了网页的可访问性。
|
||||
|
||||
默认情况下,浏览器呈现这些新标签的方式与`div`相似。然而,合理地使用它们,可以使你的标签更加的语义化。辅助技术(如:屏幕阅读器)可以通过这些标签为用户提供更加准确的、易于理解的页面信息。
|
||||
默认情况下,浏览器呈现这些新标签的方式与 `div` 相似。但如果我们能合理地使用这些标签,就可以让我们的代码更加语义化且易懂。由于这些标签可以表明其内容的含义,因此辅助工具(如:屏幕阅读器)可以通过这些标签为用户提供更加准确且易于理解的页面信息和导航信息。
|
||||
|
||||
`main`标签用于呈现网页的主体内容,且每个页面只能有一个。这意味着它只应包含与页面中心主题相关的信息,而不应包含如导航连接、网页横幅等可以在多个页面中重复出现的内容。
|
||||
`main` 标签用于呈现网页的主体内容,且每个页面应只有一个。这意味着它只应包含与页面中心主题相关的信息,而不应包含如导航连接、网页横幅等需要在多个页面中重复出现的内容。
|
||||
|
||||
`main`标签的语义化特性可以使辅助技术快速定位到页面的主体。 如果页面顶部有一个 “跳转到主要内容” 的链接,那么辅助设备会自动识别`main`标签,实现这个功能。
|
||||
`main` 标签的语义化特性可以让辅助工具快速定位到页面的主体。辅助设备会识别 `main` 标签,就好像页面顶部出现一个“跳转到主要内容”的按钮那样。
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 对他的忍者武器页面有一些新的想法,请帮助他在`header`标签和`footer`标签(在接下来的挑战中会详细介绍)之间添加完整`main`标签来使页面语义化。在这个挑战中,你可以先让`main`为空。
|
||||
Camper Cat 对他的忍者武器页面有一些新的想法,请帮他在 `header` 标签和 `footer` 标签(在接下来的挑战中会详细介绍)之间添加一个 `main` 标签。在这个挑战中,你可以先让 `main` 标签里的内容文本为空。
|
||||
|
||||
# --hints--
|
||||
|
||||
你的代码应该有一个`main`标签。
|
||||
应存在一个 `main` 标签。
|
||||
|
||||
```js
|
||||
assert($('main').length == 1);
|
||||
```
|
||||
|
||||
`main`标签应该在`header`标签与`footer`标签之间。
|
||||
`main` 标签应位于 `header` 标签与 `footer` 标签之间。
|
||||
|
||||
```js
|
||||
assert(code.match(/<\/header>\s*?<main>\s*?<\/main>/gi));
|
||||
|
@ -1,6 +1,6 @@
|
||||
---
|
||||
id: 587d774c367417b2b2512a9d
|
||||
title: 知道 Alt 文本何时应该留空
|
||||
title: 了解 Alt 文本留空的情景
|
||||
challengeType: 0
|
||||
videoUrl: 'https://scrimba.com/c/cM9P4t2'
|
||||
forumTopicId: 301019
|
||||
@ -8,30 +8,29 @@ forumTopicId: 301019
|
||||
|
||||
# --description--
|
||||
|
||||
在上一个挑战中,我们了解到`img`标签必须有一个`alt`属性。在图片已经有了文字说明,或者仅仅为了美化页面的情况下,`alt`属性似乎有些多余。
|
||||
在上一个挑战中,我们了解到 `img` 标签必须有一个 `alt` 属性。不过在图片已经有标题作为文字说明,或者图片仅用作装饰的情况下,`alt` 属性似乎有些多余。
|
||||
|
||||
即便如此,我们仍然需要为`img`标签添加`alt`属性,这时可以把它设为空,例如:
|
||||
即便如此,我们仍然需要为 `img` 标签添加 `alt` 属性,但这时我们应把它的属性值设为空,例如:
|
||||
|
||||
`<img src="visualDecoration.jpeg" alt="">`
|
||||
|
||||
背景图片通常起装饰作用,而且含有 CSS 类,所以屏幕阅读器无法读取。
|
||||
比如,背景图片通常起装饰作用。但这些图片通常都是通过 CSS 规则而非 HTML 引入的,因此屏幕阅读器无法读取。
|
||||
|
||||
**注意:**
|
||||
对于有标题的图片,我们依然需要添加`alt`属性,因为这样有助于搜索引擎记录图片内容。
|
||||
**注意:**对于有标题的图片,我们依然需要添加 `alt` 属性,因为这样有助于搜索引擎记录图片内容。
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 已经大体写好了博客页面。他打算使用忍者刀图片作为两篇文章之间的分割线,并为图片添加一个空的`alt`属性(注意:这里`img`标签的`src`属性提供的链接是无效的,因此页面上可能不会显示图片,不用担心)。
|
||||
Camper Cat 已经大体写好了博客页面。他打算使用忍者刀图片作为两篇文章之间的分割线,并为图片添加一个空的 `alt` 属性(注意:这里 `img` 标签的 `src` 属性提供的链接是无效的,因此页面上不会显示任何忍者刀的图片,不用担心)。
|
||||
|
||||
# --hints--
|
||||
|
||||
你的`img`标签应该包含`alt`属性。
|
||||
`img` 标签应具有 `alt` 属性。
|
||||
|
||||
```js
|
||||
assert(!($('img').attr('alt') == undefined));
|
||||
```
|
||||
|
||||
`alt`属性对应的值应该为空。
|
||||
`alt` 的属性值应为空。
|
||||
|
||||
```js
|
||||
assert($('img').attr('alt') == '');
|
||||
|
@ -10,7 +10,7 @@ forumTopicId: 301020
|
||||
|
||||
到目前为止,所有关于可访问性的挑战都没有使用 CSS。这是为了让你在关注外观样式之前,先把页面的逻辑结构写清,以及明确语义化标签的重要性。
|
||||
|
||||
然而,如果我们需要在页面中添加一些只对屏幕阅读器可见的内容时,CSS 可以提升页面的可访问性。当信息以可视化形式(如:图表)展示,而屏幕阅读器用户需要一种替代方式(如:表格)来获取信息时,就会出现这种情况。CSS 被用来将这些仅供屏幕阅读器使用的信息定位到浏览器可见区域之外。
|
||||
但如果我们想在页面中添加一些只对屏幕阅读器可见的内容,此时我们可以用 CSS 来实现。当信息以可视化形式(比如图表)展示,而屏幕阅读器用户需要另一种方式(比如表格)来获取信息时,我们就可以用 CSS 来解决这个问题:只需要把仅供屏幕阅读器使用的信息通过 CSS 定位到浏览器可见区域之外即可。
|
||||
|
||||
举个例子:
|
||||
|
||||
@ -25,39 +25,38 @@ forumTopicId: 301020
|
||||
}
|
||||
```
|
||||
|
||||
**注意:**
|
||||
下面的 CSS 代码与上面的结果不同:
|
||||
**注意:**以下的 CSS 解决方案与上面的结果不同:
|
||||
|
||||
<ul>
|
||||
<li><code>display: none;</code>或<code>visibility: hidden;</code>会把内容彻底隐藏起来,对于屏幕阅读器也不例外。</li>
|
||||
<li>如果把值设置为 0px,如<code>width: 0px; height: 0px;</code>,意味着让元素脱离文档流,这样做也会让元素被屏幕阅读器忽略。</li>
|
||||
<li><code>display: none;</code> 或 <code>visibility: hidden;</code> 会把内容彻底隐藏起来,屏幕阅读器也无法获取这些内容。</li>
|
||||
<li>如果把值设置为 0px,如 <code>width: 0px; height: 0px;</code>,意味着让元素脱离文档流,这样做同样也会让屏幕阅读器忽略此元素。</li>
|
||||
</ul>
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 为他的训练页面创建了一个十分酷炫的条形图,并将数据放入表格中,供屏幕阅读器用户使用。表格已经有了一个`sr-only`类,但是还没有添加 CSS 规则。请设置`position`的值为 absolute,`left` 的值为 -10000px,`width`与`height`的值为 1px。
|
||||
Camper Cat 为他的训练页面创建了一个十分酷炫的条形图。考虑到可访问性,他还将数据放入到了一个表格中,供屏幕阅读器用户使用。表格的 `class` 为 `sr-only`,但是还没有添加 CSS 规则。请将 `position` 的值设置为 absolute、`left` 的值设置为 -10000px、`width` 与 `height` 的值均设置为 1px。
|
||||
|
||||
# --hints--
|
||||
|
||||
`sr-only`类中的`position`属性的值应为 absolute。
|
||||
`class` 为 `sr-only` 的元素的 `position` 属性值应为 absolute。
|
||||
|
||||
```js
|
||||
assert($('.sr-only').css('position') == 'absolute');
|
||||
```
|
||||
|
||||
`sr-only`类中的`left`属性的值应为 -10000px。
|
||||
`class` 为 `sr-only` 的元素的 `left` 属性值应为 -10000px。
|
||||
|
||||
```js
|
||||
assert($('.sr-only').css('left') == '-10000px');
|
||||
```
|
||||
|
||||
`sr-only`类中的`width`属性的值应为 1px。
|
||||
`class` 为 `sr-only` 的元素的 `width` 属性值应为 1px。
|
||||
|
||||
```js
|
||||
assert(code.match(/width:\s*?1px/gi));
|
||||
```
|
||||
|
||||
`sr-only`类中的`height`属性的值应为 1px。
|
||||
`class` 为 `sr-only` 的元素的 `height` 属性值应为 1px。
|
||||
|
||||
```js
|
||||
assert(code.match(/height:\s*?1px/gi));
|
||||
|
@ -8,9 +8,9 @@ forumTopicId: 1
|
||||
|
||||
# --description--
|
||||
|
||||
HTML 提供`accesskey`属性,用于指定激活标签或者使标签获得焦点的快捷键,这可以使键盘用户的导航更加便捷。
|
||||
HTML 提供 `accesskey` 属性,用于指定激活元素或者使元素获得焦点的快捷键。这可以让键盘用户的导航更加便捷。
|
||||
|
||||
HTML5 允许在任何标签上使用这个属性。该属性 (如链接、按钮、表单控件等)十分有用。
|
||||
HTML5 允许在任何标签上使用这个属性。该属性尤其适用于链接、按钮、表单组件等元素。
|
||||
|
||||
举个例子:
|
||||
|
||||
@ -18,29 +18,29 @@ HTML5 允许在任何标签上使用这个属性。该属性 (如链接、按
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 希望为他的两篇博客的标题的链接设置快捷键,以使用户可以快速导航到文章的全文。请为这两个链接添加`accesskey`属性,并将第一个设置为 "g"(表示 Garfield),第二个设置为 "c"(表示 Chuck Norris)。
|
||||
Camper Cat 希望为他两篇博客的标题链接设置快捷键,以使用户可以快速导航到文章的全文。请为这两个链接添加 `accesskey` 属性,并将第一个的属性值设置为 "g"(表示 Garfield),将第二个的属性值设置为 "c"(表示 Chuck Norris)。
|
||||
|
||||
# --hints--
|
||||
|
||||
你应该为`id`是 "first" 的`a`标签添加`accesskey`属性。
|
||||
`id` 为 "first" 的 `a` 标签应具有 `accesskey` 属性。
|
||||
|
||||
```js
|
||||
assert($('#first').attr('accesskey'));
|
||||
```
|
||||
|
||||
你应该为`id`是 "second" 的`a`标签添加`accesskey`属性。
|
||||
`id` 为 "second" 的 `a` 标签应具有 `accesskey` 属性。
|
||||
|
||||
```js
|
||||
assert($('#second').attr('accesskey'));
|
||||
```
|
||||
|
||||
你应该将`id`是 "first" 的`a`标签的`accesskey`属性值设置为小写 "g"。
|
||||
`id` 为 "first" 的 `a` 标签的 `accesskey` 属性值应为小写的 "g"。
|
||||
|
||||
```js
|
||||
assert($('#first').attr('accesskey') == 'g');
|
||||
```
|
||||
|
||||
你应该将`id`是 "second" 的`a`标签的`accesskey`属性值设置为小写 "c"。
|
||||
`id` 为 "second" 的 `a` 标签的 `accesskey` 属性值应为小写的 "c"。
|
||||
|
||||
```js
|
||||
assert($('#second').attr('accesskey') == 'c');
|
||||
|
@ -1,6 +1,6 @@
|
||||
---
|
||||
id: 587d7788367417b2b2512aa3
|
||||
title: 使用 footer 元素使屏幕阅读器更容易导航
|
||||
title: 使用 footer 元素来让屏幕阅读器更容易进行导航
|
||||
challengeType: 0
|
||||
videoUrl: 'https://scrimba.com/c/crVrDh8'
|
||||
forumTopicId: 301022
|
||||
@ -8,27 +8,27 @@ forumTopicId: 301022
|
||||
|
||||
# --description--
|
||||
|
||||
与`header`和`nav`类似,`footer`也具有语义化特性,可以使辅助设备快速定位到它。它位于页面底部,用于呈现版权信息或者相关文档链接。
|
||||
与 `header` 和 `nav` 类似,`footer` 元素也具有语义化的特性,可以让辅助工具快速定位到它。它位于页面底部,用于呈现版权信息或者相关文档链接。
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 的忍者训练页面进展顺利。请将他在页面底部呈现版权信息的`div`标签更改为`footer`标签。
|
||||
Camper Cat 的忍者训练页面进展顺利。请将他在页面底部呈现版权信息的 `div` 元素更改为 `footer` 元素。
|
||||
|
||||
# --hints--
|
||||
|
||||
你的代码中应该包含 1 个`footer`标签。
|
||||
应存在一个 `footer` 标签。
|
||||
|
||||
```js
|
||||
assert($('footer').length == 1);
|
||||
```
|
||||
|
||||
你的代码中不应包含`div`标签。
|
||||
不应存在 `div` 标签。
|
||||
|
||||
```js
|
||||
assert($('div').length == 0);
|
||||
```
|
||||
|
||||
你代码中的`footer`应该是闭合的。
|
||||
确保 `footer` 元素有结束标签。
|
||||
|
||||
```js
|
||||
assert(code.match(/<footer>\s*© 2018 Camper Cat\s*<\/footer>/g));
|
||||
|
@ -1,6 +1,6 @@
|
||||
---
|
||||
id: 587d7787367417b2b2512aa1
|
||||
title: 使用 header 元素使屏幕阅读器更容易导航
|
||||
title: 使用 header 元素来让屏幕阅读器更容易进行导航
|
||||
challengeType: 0
|
||||
videoUrl: 'https://scrimba.com/c/cB76vtv'
|
||||
forumTopicId: 301023
|
||||
@ -8,38 +8,37 @@ forumTopicId: 301023
|
||||
|
||||
# --description--
|
||||
|
||||
`header`也是一个具有语义化的、提升页面可访问性的 HTML5 标签。它可以为父级标签呈现简介信息或者导航链接,适用于那些在多个页面顶部重复出现的内容。
|
||||
`header` 也是一个具有语义化的、可以提升页面可访问性的 HTML5 标签。它可以为父级标签呈现简介信息或者导航链接,适用于那些在多个页面顶部重复出现的内容。
|
||||
|
||||
与`main`类似,`header`的语义化特性也可以使辅助技术快速定位到它的内容。
|
||||
与 `main` 类似,`header` 的语义化特性也可以让辅助工具快速定位到它的内容。
|
||||
|
||||
**注意:**
|
||||
`header`用在 HTML 文档的`body`标签中。这点与包含页面标题、元信息的`head`标签不同。
|
||||
**注意:**`header` 应当在 HTML 文档的 `body` 标签内使用。请注意,`header` 标签与包含页面标题、元信息的 `head` 标签本不相同。
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 正在写一些训练忍者的精彩文章,并为它们建立一个新的页面。请使用`header`替换页面顶端包含`h1`的`div`标签。
|
||||
Camper Cat 正在创作一些训练忍者的精彩文章,并打算为这些文章创建一个新的页面。请把包含 `h1` 的 `div` 标签替换为 `header` 标签。
|
||||
|
||||
# --hints--
|
||||
|
||||
你的代码应该包含 1 个`header`标签。
|
||||
应该存在一个 `header` 标签。
|
||||
|
||||
```js
|
||||
assert($('header').length == 1);
|
||||
```
|
||||
|
||||
你的`header`标签应该包含`h1`。
|
||||
`header` 标签中应包含 `h1`。
|
||||
|
||||
```js
|
||||
assert($('header').children('h1').length == 1);
|
||||
```
|
||||
|
||||
你的代码不应有任何`div`标签。
|
||||
不应存在 `div` 标签。
|
||||
|
||||
```js
|
||||
assert($('div').length == 0);
|
||||
```
|
||||
|
||||
确保你的`header`标签是闭合的。
|
||||
确保 `header` 标签是闭合的。
|
||||
|
||||
```js
|
||||
assert(
|
||||
|
@ -8,35 +8,35 @@ forumTopicId: 301024
|
||||
|
||||
# --description--
|
||||
|
||||
`nav`也是一个具有语义化特性的 HTML5 标签,用于呈现页面中的主导航链接。它可以使屏幕阅读器快速识别页面中的导航信息。
|
||||
`nav` 也是一个具有语义化特性的 HTML5 标签,用于呈现页面中的主导航链接。它可以使屏幕阅读器快速识别出页面中的导航信息。
|
||||
|
||||
对于在多个页面底部出现的站点链接,不需要使用`nav`,用`footer`(在下个挑战中介绍)会更好。
|
||||
对于在多个页面底部出现的站点链接,我们不需要使用 `nav` 标签。此时,使用 `footer` 标签会更好。我们将会在下个挑战中学习 `footer` 标签的使用。
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 在他的忍者训练页面顶端使用了很多导航链接,但把它们写在了`div`中。请将`div`更改为`nav`标签,以提升页面的可访问性。
|
||||
Camper Cat 在他的忍者训练页面顶端放置了多个导航链接,但这些链接都写在了 `div` 中。请将 `div` 标签更改为 `nav` 标签,以提升页面的可访问性。
|
||||
|
||||
# --hints--
|
||||
|
||||
你的代码应该有 1 个`nav`标签。
|
||||
应存在一个 `nav` 标签。
|
||||
|
||||
```js
|
||||
assert($('nav').length == 1);
|
||||
```
|
||||
|
||||
你的`nav`标签应该包含`ul`标签及其列表项。
|
||||
`nav` 标签应包含 `ul` 标签及其列表项。
|
||||
|
||||
```js
|
||||
assert($('nav').children('ul').length == 1);
|
||||
```
|
||||
|
||||
你的代码不应包含`div`标签。
|
||||
不应存在 `div` 标签。
|
||||
|
||||
```js
|
||||
assert($('div').length == 0);
|
||||
```
|
||||
|
||||
确保你的`nav`标签是闭合的。
|
||||
确保 `nav` 标签是闭合的。
|
||||
|
||||
```js
|
||||
assert(
|
||||
|
@ -8,7 +8,7 @@ forumTopicId: 301025
|
||||
|
||||
# --description--
|
||||
|
||||
继续日期主题。HTML5 还引入了`time`标签与`datetime`属性来标准化时间。`time`是一个行内标签,用于在页面中呈现日期或时间,而`datetime`属性保存了日期的有效格式,辅助设备可以访问这个值。通过标准化时间格式,即使时间在文本中是以非正式的或口语化的形式编写,辅助设备依然可以获取准确的时间和日期。
|
||||
继续日期主题。HTML5 还引入了 `time` 标签与 `datetime` 属性来标准化时间。`time` 是一个行内标签,用于在页面中呈现日期或时间,而 `datetime` 属性用户设置日期的格式,辅助设备会获取这个值。通过标准化时间格式,即使时间在文本中是以非正式或口语化的形式编写,辅助设备依然可以获取准确的时间和日期。
|
||||
|
||||
举个例子:
|
||||
|
||||
@ -16,17 +16,17 @@ forumTopicId: 301025
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 的比武大会的时间确定了!请使用`time`标签包含文本 "Thursday, September 15<sup>th</sup>",并将`datetime`属性设置为 "2016-09-15"。
|
||||
Camper Cat 的比武大会的时间确定了!请使用 `time` 标签包裹文本 "Thursday, September 15<sup>th</sup>",并将 `datetime` 的属性值设置为 "2016-09-15"。
|
||||
|
||||
# --hints--
|
||||
|
||||
`time`标签应该包含文本"Thursday, September 15<sup>th</sup>"。
|
||||
应存在一个内容文本为 `Thank you to everyone for responding to Master Camper Cat's survey.` 的 `p` 元素和一个 `time` 元素。
|
||||
|
||||
```js
|
||||
assert(timeElement.length);
|
||||
```
|
||||
|
||||
`time`标签应该有 1 个非空的`datetime`属性。
|
||||
`time` 元素的内容文本应为 `Thursday, September 15<sup>th</sup>`。
|
||||
|
||||
```js
|
||||
assert(
|
||||
@ -35,13 +35,13 @@ assert(
|
||||
);
|
||||
```
|
||||
|
||||
`datetime`属性的值应该为 2016-09-15。
|
||||
`time` 元素应包含非空的 `datetime` 属性。
|
||||
|
||||
```js
|
||||
assert(datetimeAttr && datetimeAttr.length);
|
||||
```
|
||||
|
||||
确保`time`标签是闭合的。
|
||||
`datetime` 的属性值应为 `2016-09-15`。
|
||||
|
||||
```js
|
||||
assert(datetimeAttr === '2016-09-15');
|
||||
|
@ -8,43 +8,43 @@ forumTopicId: 301026
|
||||
|
||||
# --description--
|
||||
|
||||
标题标签(包括`h1`到`h6`)有很高的使用率,它们用于描述内容的主题。在屏幕阅读器中,用户为更快地了解页面内容,可以设置让阅读器只朗读页面标题。这意味着标题标签之间以及标签本身都应语义化,不应仅仅为了获得不同字号而使用不同级别的标题标签。
|
||||
标题标签(包括 `h1` 到 `h6`)有很高的使用率,它们用于描述内容的主题。在屏幕阅读器中,用户为了快速了解页面纲要,可以设置让阅读器只朗读页面标题。这意味着我们不应仅仅为了设置不同字号而使用标题,而应让标签本身具有语义化和实质性的含义,同时不同标题之间也应关联(具有层级关系)。
|
||||
|
||||
*语义化*:标签名能准确地表达它所含内容的信息类型。
|
||||
*语义化*的意思是,标签名能准确地表达它所含内容的信息类型。
|
||||
|
||||
对于一篇含有引言、正文、结论的论文,把结论作为引言的一部分没有任何意义,因为结论应该是独立的章节。类似地,页面中的标题标签也应该是有序的,并且能表明内容的层次关系。
|
||||
假如你在写一篇含有引言、正文、结论的论文。此时,如果把结论作为正文的一部分显然没有任何意义,因为结论应该是独立的章节。类似地,页面中的标题标签也应该是有序的,并且能表明内容的层次关系。
|
||||
|
||||
在使用中,相同级别(或者更高级别)的标题标签用于开启新的章节,低一级别的标题标签用于开启上一级标题标签的子小节。
|
||||
|
||||
举个例子:一个`h2`标签后紧跟若干`h4`标签的页面,会让使用屏幕阅读器的用户感到困惑。尽管在页面中,使用这 6 个标题标签可以控制内容的的视觉样式,但我们应该使用 CSS 来调整。
|
||||
比如说,如果我们在一个 `h2` 标签后加上若干由 `h4` 标签引导的页面。此时发生了层级的错位,这会让使用屏幕阅读器的用户感到困惑。尽管在浏览器所显示的页面中,错误地使用这六个标题标签依然可以让它们在视觉效果上看起来很合理。但此时,我们应该按照层级正确地使用标签,然后用 CSS 来调整样式。
|
||||
|
||||
最后一点,每个页面应该只有一个`h1`标签,用来说明页面主要内容。`h1`标签和其他的标题标签可以让搜索引擎获取页面的大纲。
|
||||
最后一点,每个页面应只有一个 `h1` 标签,用来概括说明页面的主题。另外,这六个标题标签可以让搜索引擎获取页面的大纲。
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 希望他的网站有一个介绍如何成为忍者的页面。请帮助他修改标题标签,使它们语义化且顺序正确。你需要将所有的`h5`标题标签调整为恰当的级别(即`h3`标题标签),使它们是`h2`标题标签的子级。
|
||||
Camper Cat 希望他的网站有一个介绍如何成为忍者的页面。请帮助他修改标题标签,使它们语义化且顺序正确。你需要将所有的 `h5` 标题标签调整为恰当的级别(即 `h3` 标题标签),因为它们是 `h2` 标题标签的子级。
|
||||
|
||||
# --hints--
|
||||
|
||||
你的代码应该包含 6 个`h3`标签。
|
||||
应存在 6 个 `h3` 标签。
|
||||
|
||||
```js
|
||||
assert($('h3').length === 6);
|
||||
```
|
||||
|
||||
你的代码不应包含 `h5` 标签。
|
||||
确保 `h3` 有结束标签
|
||||
|
||||
```js
|
||||
assert((code.match(/\/h3/g) || []).length === 6);
|
||||
```
|
||||
|
||||
代码不应该包含 `h5` 标记.
|
||||
不应该存在 `h5` 标签.
|
||||
|
||||
```js
|
||||
assert($('h5').length === 0);
|
||||
```
|
||||
|
||||
代码不应该包含 `h5` 结束标记。
|
||||
不应该存在 `h5` 的结束标签。
|
||||
|
||||
```js
|
||||
assert(/\/h5/.test(code) === false);
|
||||
|
@ -8,28 +8,28 @@ forumTopicId: 301027
|
||||
|
||||
# --description--
|
||||
|
||||
HTML 的`tabindex`属性有三个不同与标签焦点的功能。当它在标签上时,表示标签可以获得焦点。它的值可以是零、负整数及正整数,并决定了标签的行为。
|
||||
HTML 的 `tabindex` 属性是与标签焦点相关的属性,给标签加上 tabindex 表示该标签可以获得焦点。`tabindex` 的值可以是零、负整数或正整数,这些数值分别定义了三种行为。
|
||||
|
||||
当用户在页面中使用 tab 键时,有些标签,如:链接、表单控件,可以自动获得焦点。它们获得焦点的顺序与它们出现在文档流中的顺序一致。我们可以通过将`tabindex`属性值设为 0,来给其他标签赋予相同的功能,如:`div`、`span`、`p`等。举个例子:
|
||||
当用户在页面中使用 tab 键时,有些标签(如:链接、表单控件)可以自动获得焦点,它们获得焦点的顺序与它们出现在文档流中的顺序一致。我们可以通过将其他标签(如 `div`、`span`、`p` 等)的 `tabindex` 属性值设为 0 来让它们实现类似的效果。比如:
|
||||
|
||||
`<div tabindex="0">I need keyboard focus!</div>`
|
||||
|
||||
**注意:**
|
||||
`tabindex`属性值为负整数(通常为 -1)的标签也是有焦点的,只是不可以通过 tab 键来获得焦点。这种方法通常用于以编程的方式使内容获得焦点(如:激活用于弹出框的`div`标签),但是它超出了当前挑战的范围。
|
||||
`tabindex` 属性值为负整数(通常为 -1)的标签也是可以获得焦点的,只是不可以通过键盘操作(如 tab 键)来获得焦点。这种方法通常用于以编程的方式使内容获得焦点(如:将焦点设置到用 `div` 实现的弹出框上)的场景。只是这部分内容已经超出了当前挑战的范围。
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 新建了一个调查,用来收集他的用户的信息。他知道输入框可以自动获得键盘焦点,但他希望确保当键盘用户切换标签时,焦点可以停留在指示文字上。请给`p`标签添加`tabindex`属性,并将它的值设置为 0。注意:使用`tabindex`属性可以使 CSS 伪类`:focus`在`p`标签上生效。
|
||||
Camper Cat 新建了一个用来收集他的用户信息的调查。他知道输入框可以自动获得键盘焦点,但他希望用户使用键盘切换标签时,焦点可以停留在指示文字(Instructions)上。请给 `p` 标签添加 `tabindex` 属性,并将它的属性值设为 0。注意:使用 `tabindex` 属性还可以让 CSS 伪类 `:focus` 在 `p` 标签上生效。
|
||||
|
||||
# --hints--
|
||||
|
||||
你应该为表单中的`p`标签添加`tabindex`属性。
|
||||
表单中,作为指示文字(Instructions)的 `p` 标签应具有 `tabindex` 属性。
|
||||
|
||||
```js
|
||||
assert($('p').attr('tabindex'));
|
||||
```
|
||||
|
||||
你应该将`p`标签的`tabindex`属性值设置为 0。
|
||||
`p` 标签的 `tabindex` 属性值应设置为 0。
|
||||
|
||||
```js
|
||||
assert($('p').attr('tabindex') == '0');
|
||||
|
@ -8,11 +8,11 @@ forumTopicId: 301028
|
||||
|
||||
# --description--
|
||||
|
||||
`tabindex`属性还可以指定标签的 tab 键顺序,将它的值设置为大于或等于 1 就可以实现这个功能。
|
||||
`tabindex` 属性还可以指定元素的 tab 键焦点顺序,将它的值设置为大于等于 1 的整数就可以实现这个功能。
|
||||
|
||||
`tabindex`属性值为 1 的标签将首先获得键盘焦点,然后焦点将按照指定的`tabindex`的值(如:2,3 等)的顺序进行移动,直到回到默认的或`tabindex`值为 0 的标签上,如此循环。
|
||||
在使用键盘导航时,`tabindex` 属性值为 1 的元素会最先聚焦(选中);之后,焦点将按照 `tabindex` 值(如:2、3 等)的顺序进行移动,最后回到默认(即 `tabindex` 值为 0)的元素上,如此循环。
|
||||
|
||||
需要注意的是,当按照这种方式设置 tab 键顺序时,将会覆盖默认的顺序(标签在文档流中出现的顺序)。这可能会令那些希望从页面顶部开始导航的用户感到困惑。这个技术在某些情况下可能是必要的,但是对可访问性而言,在应用时要十分小心。
|
||||
需要注意的是,使用这种方式设置 tab 键焦点顺序会覆盖默认顺序,其中默认顺序为标签在文档流中出现的顺序。这可能会让那些希望从页面顶部开始导航的用户感到困惑。使用 `tabindex` 在某些情况下是必要的,但在使用时要充分考虑到页面的可访问性。
|
||||
|
||||
举个例子:
|
||||
|
||||
@ -22,29 +22,29 @@ forumTopicId: 301028
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 在他的励志名言页面中有一个搜索区域,他打算使用 CSS 将这个区域定位在页面的右上角。Camper Cat 希望他的搜索`input`与提交`input`表单控件是 tab 键顺序的前两项。请为搜索`input`添加`tabindex`属性,其值为 1。为提交`input`添加`tabindex`属性,其值为 2。
|
||||
Camper Cat 在他的励志名言页面中有一个搜索区域,他打算使用 CSS 把这个区域定位在页面的右上角。Camper Cat 希望他的搜索(search)`input` 与提交(submit)`input` 表单控件是 tab 键焦点顺序的前两项。请为搜索(search)`input` 添加 `tabindex` 属性,其属性值为 1;为提交(submit)`input` 添加 `tabindex` 属性,其属性值为 2。
|
||||
|
||||
# --hints--
|
||||
|
||||
你应该为搜索`input`标签添加`tabindex`属性。
|
||||
搜索 `input` 标签应包含 `tabindex` 属性。
|
||||
|
||||
```js
|
||||
assert($('#search').attr('tabindex'));
|
||||
```
|
||||
|
||||
你应该为提交`input`标签添加`tabindex`属性。
|
||||
提交 `input` 标签应包含 `tabindex` 属性。
|
||||
|
||||
```js
|
||||
assert($('#submit').attr('tabindex'));
|
||||
```
|
||||
|
||||
搜索`input`标签的`tabindex`属性值应该为 1。
|
||||
搜索 `input` 标签的 `tabindex` 属性值应为 1。
|
||||
|
||||
```js
|
||||
assert($('#search').attr('tabindex') == '1');
|
||||
```
|
||||
|
||||
提交`input`标签的`tabindex`属性值应该为 2。
|
||||
提交 `input` 标签的 `tabindex` 属性值应为 2。
|
||||
|
||||
```js
|
||||
assert($('#submit').attr('tabindex') == '2');
|
||||
|
@ -8,14 +8,14 @@ forumTopicId: 301029
|
||||
|
||||
# --description--
|
||||
|
||||
`article`是另一个具有语义化特性的 HTML5 新标签。`article`是一个分段标签,用于呈现独立及完整的内容。这个标签适用于博客入口、论坛帖子或者新闻文章。
|
||||
`article` 是另一个具有语义化特性的 HTML5 新标签。`article` 是一个用于表示独立且可复用结构的标签,用于呈现独立及完整的内容。这个标签适用于播客文章、论坛帖子或者新闻文章。
|
||||
|
||||
有些技巧可以用来判断内容是否独立,像是如果内容脱离了上下文,是否仍然有意义?类似地,对于 RSS 提要中的文本,它是否有意义?
|
||||
有些技巧可以用来判断内容是否独立,像是如果内容脱离了上下文,这些内容是否仍然有意义?类似地,对于文本内容,可否把这些内容放到 RSS 推送里?如果回答是肯定的,那我们就可以认为这些内容是独立的。
|
||||
|
||||
请牢记,使用辅助设备的用户依赖组织良好的、语义化的标签来获取页面中的信息。
|
||||
请牢记,辅助设备依赖组织良好、语义化的标签来获取页面中的信息。
|
||||
|
||||
**请注意`section`和`div`的区别:**
|
||||
`section`也是一个 HTML5 新标签,与`article`标签的语义含义略有不同。`article`用于独立的、完整的内容,而`section`用于对与主题相关的内容进行分组。它们可以根据需要嵌套着使用。举个例子:如果一本书是一个`article`的话,那么每个章节就是`section`。当内容组之间没有联系时,可以使用`div`。
|
||||
**请注意 `section` 和 `div` 的区别:**
|
||||
`section` 也是一个 HTML5 新标签,它与 `article` 标签的语义含义略有不同。`article` 用于独立且完整的内容,而 `section` 用于对与主题相关的内容进行分组。它们可以根据需要来嵌套使用。举个例子:如果一本书是一个 `article` 的话,那么每个章节就是 `section`。当内容组之间没有联系时,我们可以使用 `div`。
|
||||
|
||||
```html
|
||||
<div> - groups content
|
||||
@ -25,17 +25,17 @@ forumTopicId: 301029
|
||||
|
||||
# --instructions--
|
||||
|
||||
Camper Cat 打算使用`article`标签来呈现他的博客页面里的帖子,但是他忘记在顶部的帖子上使用它。请使用`article`标签来代替`div`标签。
|
||||
Camper Cat 打算使用 `article` 标签来呈现他的博客页面里的帖子,但是他还没有加到最上面的帖子上。请使用 `article` 标签来代替 `div` 标签。
|
||||
|
||||
# --hints--
|
||||
|
||||
你的代码中应该有 3 个`article`标签。
|
||||
应存在 3 个 `article` 标签。
|
||||
|
||||
```js
|
||||
assert($('article').length == 3);
|
||||
```
|
||||
|
||||
你的代码不应包含`div`标签。
|
||||
不应存在 `div` 标签。
|
||||
|
||||
```js
|
||||
assert($('div').length == 0);
|
||||
|
@ -8,11 +8,11 @@ forumTopicId: 301030
|
||||
|
||||
# --description--
|
||||
|
||||
下一个表单主题与单选按钮的可访问性有关。在上一个挑战中,单选按钮含有一个拥有`for`属性的`label`标签,`for`属性指向相关选项的`id`。然而单选按钮通常成组出现,用户必须其中选择一项。本次挑战介绍一种可以语义化呈现单选按钮组的方法。
|
||||
下一个表单主题与单选按钮的可访问性有关。在上一个挑战中,每个单选按钮都有一个包含 `for` 属性的 `label` 标签,`for` 的属性值指向相关选项的 `id`。然而单选按钮通常成组出现,而且用户必须选择其中一项。本次挑战介绍一种可以语义化呈现单选按钮组的方法。
|
||||
|
||||
使用`fieldset`标签将单选按钮组包含在里面就可以实现这个目的,通常还会使用`legend`标签来为单选按钮组提供文字说明。屏幕阅读器也可以朗读这些文字。
|
||||
我们可以使用 `fieldset` 标签将单选按钮组包含在里面,通常还会使用 `legend` 标签来为单选按钮组提供文字说明。屏幕阅读器也可以朗读这些文字。
|
||||
|
||||
当选项的含义很明确时,如:性别选择,`fieldset`标签与`legend`标签就可以省略。这时,使用含有`for`属性的`label`标签就足够了。
|
||||
当选项的含义很明确时,如“性别选择”,`fieldset` 与 `legend` 标签可以省略。这时,使用包含 `for` 属性的 `label` 标签就足够了。
|
||||
|
||||
举个例子:
|
||||
|
||||
@ -32,17 +32,17 @@ forumTopicId: 301030
|
||||
|
||||
# --instructions--
|
||||
|
||||
当用户使用邮件注册时,Camper Cat 想知道他们的忍者等级。通过上一个挑战的学习,Camper Cat 创建了一组单选按钮,并为每个选项的`label`标签添加了`for`属性,但是 Camper Cat 的代码依然需要你的帮助。请将包含单选按钮组的`div`标签替换为`fieldset`标签;将`p`标签替换为`legend`标签。
|
||||
当用户使用邮件注册时,Camper Cat 想知道他们的忍者等级。通过上一个挑战的学习,Camper Cat 创建了一组单选按钮,并为每个选项的 `label` 标签添加了 `for` 属性,但是 Camper Cat 的代码依然需要你的帮助。请将包含单选按钮组的 `div` 标签替换为 `fieldset` 标签;将 `p` 标签替换为 `legend` 标签。
|
||||
|
||||
# --hints--
|
||||
|
||||
你的代码应该使用 1 个`fieldset`标签包含单选按钮组。
|
||||
应存在 1 个 `fieldset` 标签包含单选按钮组。
|
||||
|
||||
```js
|
||||
assert($('fieldset').length == 1);
|
||||
```
|
||||
|
||||
确保`fieldset`标签是闭合的。
|
||||
确保 `fieldset` 标签是闭合的。
|
||||
|
||||
```js
|
||||
assert(
|
||||
@ -51,19 +51,19 @@ assert(
|
||||
);
|
||||
```
|
||||
|
||||
你的代码应该有 1 个包含询问用户忍者等级文字的`legend`标签。
|
||||
应存在 1 个包含询问用户忍者等级内容文字的 `legend` 标签。
|
||||
|
||||
```js
|
||||
assert($('legend').length == 1);
|
||||
```
|
||||
|
||||
你的代码不应该含有`div`标签。
|
||||
不应存在 `div` 标签。
|
||||
|
||||
```js
|
||||
assert($('div').length == 0);
|
||||
```
|
||||
|
||||
你的代码不应该有包含询问用户忍者等级文字的`p`标签。
|
||||
不应存在包含询问用户忍者等级内容文字的 `p` 标签。
|
||||
|
||||
```js
|
||||
assert($('p').length == 4);
|
||||
|
Reference in New Issue
Block a user