通过本章的学习,你将会找到一些演示如何使用无侵入性(unobtrusive)DOM脚本和CSS来充分利用这些语义和结构,以增强网页的功能和样式的示例。
或者标题
这样的代码。
- 按照JavaScript专家Peter-Paul Koch发布的网络文章www.quirksmode.org/dom/toc.html中的描述,可以通过JavaScript提炼网页中的各级标题,自动生成单个文档的基本目录(table of content, TOC)。
- 尽管与用于组织一组文档的TOC相比,这个基本的TOC性能低下,而且内容覆盖范围低,但是当你插入或者删除某个标题的时候,它确实能够充分利用动态更新的优势。
2.1.2 联系信息
- 被用来标记联系地址,只是用来实现这个目的,别无他用。
- HTML规范对
标签的用途规定得非常具体:它并不显示任何人或物的联系信息,只显示与文档本身有关的联系信息。
- 举例来说,假设你正在为某个协会成员名录维护一份详细的联系信息表。在这种情况下,为每个成员分别使用一项
标签并不合适。但是,如果你还需要网络管理员或者那个维护会员名录的人的详细联系信息,那么可以只将
标签用于这一个人。它不一定非常具体地指出物理的实体地址,例如HTML规范中给出的示例包含了指向个人页面的链接和日期。
- 元素本身是一个行内元素,因此它只能够包含行内元素,不能有段落、列表或者div。
<address>
<a href="../People/Raggett/">Dave Raggetta>,
<a href="../People/Arnaud/">Arnaud Le Horsa>,
contact persons for the <a href="Activity.html">W3C HTML Activitya> <br>
Date: 1999/12/24 23:37:50
address>
2.1.3 引用
HTML为web制作者提供了两种明显不同的标记引用方式,一种用于块级引用,另一种用于行内引用。但是,我只推荐使用前一种方法:
元素。
1. 块引用
- 历史上
blockquote
通常用来发挥它的表示作用,而不是它的语义意义或者结构相关性的作用。
- 建议样式表的各种实现品能够提供一种机制,用来在由BLOCKQUOTE界定的引用体前后,按照一种与当前语言上下文和引用嵌入级别相适应的方式插入引号。
- 有些Web制作者仅仅将BLOCKQUOTE用作一种缩排文本的机制一样,为了保留Web制作者们的本意,在默认样式中,用户代理不应该插入引号。
- 使用样式表之后,已经不推荐将BLOCKQUOTE用来缩排文本。
- 人们如此普遍地使用
标签来缩排文本,而不是用作包含引用的容器,以至于W3C建议用户代理不要自动包含引号,并已经采取了异乎寻常的措施实际上反对这种滥用。
标签还有一个cite
属性可以用来让制作者推荐引用的来源(通常是以URL的形式,但是它还可以是任何其他引用形式,比如另一位作者的姓名或者某一部电影的名字)。
获取引用信息并在客户端将其显示出来,至少有两种方法。第一种方法是使用CSS,第二种方式是使用一些DOM脚本。
下面是CSS方法:
blockquote[cite]:after {
content: "Source" attr(cite);
}
第二种方法是使用DOM脚本,它的优势是可以在更多的浏览器上运行,但它的缺点是只有启动JavaScript的情况下才有用。
function betterBlockquotes() {
if(document.getElementsByTagName) {
quotes = document.getElementsByTagName("blockquote");
for(i = 0; i < quotes.length; i++) {
citation = quotes[i].getAttribute('cite');
citeLink = document.createElement('a');
citeLink.setAttribute('href', citation);
citeLink.appendChild(document.createTextNode('Source: '));
p = document.createElement('p');
p.appendChild(citeLink);
quotes[i].appendChild(p);
}
}
}
window.onload = betterBlockquotes;
2. 行内引用
用于行内应用。建议不要使用
标签。
- 当使用
标签之后,假定会发生以下的事情:浏览器会自动在引用前后添上排字正确的引号,这也就意味着,页面制作者不应该在页面包含这些引号。此外,明智地使用lang
属性之后,这些引号就应该适合于按照指定语言的样式显示出来(比如,在欧洲的一些语言中,使用波浪号或者书名号“《”和“》”,而不是将““”和“””作为引号)。
- 各种浏览器对
的支持不一致导致它变得完全没有用处。
2.1.4 列表
在当前的X(HTML)版本中,总共有三种不同的列表类型:无序列表
、有序列表
和定义列表
。
这种列表类型之间的差别很小,而且非常简单。
- 没有任何顺序,就用无需列表。
- 按照某种顺序,则使用有序列表。
- 定义列表用来将名称或术语与值或其他数据(任何彼此有着直接关系的项目,比如术语表)联系起来。W3C也建议使用这类列表标识对话:每个定义术语作为一个说话者,定义描述则作为说出来的话,这样一来,我们就可以认为这个元素的使用实际上非常的自由。
1. 无序列表和有序列表
- 起始标签和结束标签只能包含列表项,但是列表项中可以包含任何东西,包括段落、div、标题以及更多的列表。只要把它们包含在一个单独的列表项中,这就是非常合理且格式正确的标记。
- 在严格的doctype中,列表已经没有哪种有趣的或者隐藏的属性未遭弃用。
- 曾经可以使用start和value属性。
start
可以让制作这从某个不是1开始的数字对有序列表进行编号,如果你想中断某个有序列表(比如搜索结果列表太长,需要好几个页面才能显示完整),这个属性非常有用。
value
属性可以让作者为某个特定的列表设置无序的编号。将来使用CSS计数器或许能够重现这些属性的功能,但是没有浏览器会支持这一点。
compact
属性,其本意是
- 如果需要用到这些属性,那么考虑将doctype设置为
transitional
,否则文档就不能通过验证测试。
- 尽管这个标记并没是那么让人兴奋,但它至少灵活,而且配合CSS能够按照各种方式显示列表:水平方式、垂直方式、展开或者折叠,或者是作为一幅画映射。
<ul>
<li><a href="/">Homea>li>
<li><a href="/">Concata>li>
<li><a href="/">Abouta>li>
<li><a href="/">Archivea>li>
ul>
我们可以非常轻易地转化成水平个菜单:
li {
float: left;
}
通过display: inline;
将
从一个块容器转换成行内容器也可以获得同样的效果,但是块级容器在将来能够为我们提供更过的样式选项。
简单的列表可以按照不同于默认样式的方式显示出来。使用CSS可以创建出一些具有相当动态特性的列表。
利用:hover
伪类,构成弹出菜单
li ul { display:none;}
li:hover > ul { display: block; }
资料:
- Web Standards Group的联席主席Russ Weakley创建了大量的列表样式(当前的数目已经超过了70余种),可以在http://css.maxdesign.com.au找到这些样式。
- Mark Newhouse在www.alistapart.com/articles/taminglists发表的CSS Desig:Taming Lists的文章也值得一看。
- 为了避免创建链接列表的麻烦,Accessify的List-O-Matic(https://www.accessify.com/tools-and-wizards/developer-tools/list-o-matic)也值得一试,这是一个网上列表创建程序,可以让你从多种预先建立好的样式中选择。
- Eric Meyer曾经在一篇文章(https://meyerweb.com/eric/css/edge/menus/demo.html)中指出,那些在任何元素上都支持“:hover”伪类别的浏览器可以使用这个伪类来显示嵌套列表,从而构成弹出菜单。
- Patrick Griffiths的Suckerfish Dropdown脚本(https://www.htmldog.com/articles/suckerfish/dropdowns/)
2. 定义列表
<dl>
<dt>Bottledt>
<dd>A rece......dt>
<dd>.....dd>
<dt>Rocketdt>
<dd>.....dd>
dl>
- 定义列表的使用非常灵活。只要词语和(一个或者多个)定义词之间有着直接的关系,那么很多结构都可以使用这种列表表示。
- 举例来说
- 一张图片可以作为定义词,在这个定义词的描述中可以提供拍照者和照相机的信息。
- 还可以用于显示某次会议的一系列演讲的时间表,演讲的题目作为定义词,下面的描述可以包括演讲者的详细信息以及日期和时间。
- 还可以用于网上购物应用中,用来描述产品的详细信息,诸如此类。
- 注意事项
- 定义词不能包含任何块级元素,也就是说不能包含有块级元素,也就说不能含有段落、标题或者列表,这就意味着不能像标题一样给出不同的定义词指示不同的重要等级(如
、
等)。
- 定义描述可以包含任何元素,或者一系列元素,只要它们的格式正确。
2.1.5 链接
- 严格来讲,
标签并不是一个链接,它是一个锚点(anchor),它要么链接到一个新的文件,要么指向别处某个已命名的锚点(要么位于同一个页面,要么位于不同的页面),要么指向任何一个具有id属性的元素
link
标签,它可以在文档的起始处,你可以用它将样式表链接到页面上来,但是还可以用它来提供其他导航信息。
- 想要链接到另一个锚点标签,需要使用**片段标识符(fragment identifier)**进行定位,通过锚点标签的name或者id属性将这个标识符设置到锚点标签中。
<a href="newpage.html#partwo">linka>
如果你希望链接到同一个页面上的某个锚点标签或者其他已标记的元素,就没必要将文件名包含进来。
<a href="#partwo">linka>
- 像这样链接到同一个页面上的某个锚点标签或者已标识元素,可以有多种用途:
name
属性和id
属性有何不同?name
属性只能用于锚点标签,它的用户就是链接定位,而id
属性则可以用于任何标签。
- 如果你正在使用一个锚点,并且同时赋予ID和name,那么它们必须一致。此外,在同一个页面上,不同元素的name和ID不能相同。
资料:
- Jim Thatcher在他所写的文章Skip Navigation(https://www.jimthatcher.com/skipnav.html中总结了跳转链接的各种很好的用途。
1. 关系问题
2. 链接定位
3. 可访问链接
合理使用tabindex
和accesskey
属性(
标签有这些属性,而
标签没有)以及title
属性(所有元素都有这个属性),可以显著提高网络的可访问性和可用性。
-
title
属性为相关元素提供了额外的信息。
- 对于锚点链接而言,它应该用来提供有关这个链接内容的描述,但是仅当链接文本尚没有提供足够信息的情况下才这样做。
- 例如,没有必要编写类似
concats
这样的代码,因为屏幕阅读设备可能会没有必要地重复读取title和link文本。此时,更好的title或许应该是“董事会的电子邮件、电话和邮政编码等联系信息”,因为这样的title可以让你有一个更简短的链接(能够适应狭窄的导航列表或者类似的环境)但却能够提供详细的解释信息。
-
tabindex
和accesskey
这两个属性都只适用于那些能够获得键盘焦点的元素:锚点链接和表单域。
-
tabindex
可以用来为某些用户建立特定的Tab键顺序(tabbing order),这些用户习惯使用键盘而不是鼠标在网站导航。
- 要想实现这个功能,只需为这个元素赋予一个数字,比如
tabindex="1"
,这将产生以下效果:当用户按下Tab键之后,这个元素将成为第一个获得焦点的元素。元素的tabindex值越高,按下Tab获得键盘焦点的顺序就越靠后。
- 有一定好处,但是应该小心使用。如果以一种良好的方式构建网站,在源标记中按照逻辑顺序安置导航元素,那么根本不需要将tabindex应用到链接上,因为浏览器能够自动识别逻辑上的Tab键顺序。
- 如果定义的tabindex结构与用户过去使用的有很大不同,就会让用户感到迷惑的风险。
- 如果需要在列表中间插入一个新的链接,你可能会遇到维护难题,因为这将导致对所有后续链接的重新编号。
-
accesskey
这个属性用来指定某个字母作为键盘的快捷键。
- 比如
\accesskey="S"
,将会导致以下结果:当用户激活这个快捷键的时候,该元素就会获得焦点。根据浏览器的不同,相应的快捷键可能是Ctrl+S
、Alt+S
(我在google浏览器上测试时为该快捷健)、甚至还可能是Ctrl+Alt+S
(此外还有Mac平台上对应的快捷键)。
- 对于完全避开不用
accesskey
还存在很多争议。
- 没有标准的accesskey方案,这就会导致很多网站使用不同的快捷键。
- 大多数浏览器不能够向用户显示什么是用户实际可用的accesskey,这就意味着用户必须要么找到可访问的文档并参照其操作,要么查看源码。
accesskey
和原有的浏览器的快捷键之间存在的冲突可能会损害用户预期得到的效果,再加上有这么多的浏览器可供使用,根据Web Accessibility Technical Services的统计数据,尚未被浏览器用到的字符只剩下“/”、“\”和“]”了。
- Opera几乎为所有操作都提供了键盘快捷键,它采用了以下办法来解决这个问题
- 它包含了一个快捷键来开启accesskey功能,按下
Shift+Esc
键就会让你使用accesskey而不需要任何修饰键。
- 但是,这并没有问题,用户在浏览特定网站的时候,还是没有办法搞清楚自己在使用哪些accesskey,而且Opera也没有提供任何通知机制,告知用户是否处于“开启”模式,或者在不需要查看帮助文件的情况下,就能够知道确实存在这样的系统。
- Accessify正在使用一套系统试图通过让用户设置自己的accesskey来避开这个问题(http://accessify.com/preferences/accesskeys),但是这个解决方案不可能广泛流传:它是跟网站相关的;它不能轻易地在网站之间共享,就像基于安全原因不能让不同域访问cookie一样;而且在那些没有实现这种方法的网站上用户仍然还会遇到问题。
2.1.6 标示文档修改
和
标签可以标识文档的修订
- 最常用的就是用于标记文本的修改(例如,当获得更新的、更准确的信息之后,校正博客帖子中的详细信息)。
- 它们还可以用来标注文档结构的修改(如,将网站上的整节内容封起来)。
- 它们的功能很丰富,根据上下文,既可以用作块元素,也可以用作行内元素。
- 如果在块元素中(也就是说,某个不允许嵌套其他块元素的块元素,比如段落或者标题)使用这些标签,那么可以将它们本身也视为行内元素,就像是
或者
。
- 但是,如果你使用这些元素来包含块元素,就可以将它们本身也视为块元素(尽管你可能需要在CSS中应用display:block来利用快样式的外边距、内边距或者边框)。
<p>Lorem ipsum dolr sit amet, <del>consecetuer adipiscing elitdel>.p>
<del><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.p>del>
- 这些标签有一些限制。
- 你不能使用
来标示删除一个
,因为能够放到
里面的标签只有
。同样表格中删除表格行()的时候也是如此,这就成为非法标记,即使它有一定的逻辑意义。
和
有两个专门的属性:datetime
和cite
。
- 前者用来设置一个日期记录修订时间,后者可以用来提供一个解释为何进行修订的链接
- 对于这类属性,它们的信息往往不为大多数用户所知。因此,如果希望显示这些信息,就需要使用JavaScript,正如在前面检查如何从
中获取cite
属性值的时候所讨论的那样,你也可以使用JavaScript控制删除部分和插入部分显示效果。
<p>Lorem ipsum dolr sit amet, <del datetime="20060509" cite="http://example.com/errata.html" >consecetuer adipiscing elitdel>.p>
<del><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.p>del>
2.2 表示性元素
- 表示性元素(presentation element)并没有说明它所描述的内容,但是它说明了与这些内容如何显示有关的全部信息。
- 在HTML规范中还有一些这样的元素,其中有些元素还在使用中,而其他的元素则可以找到更合适的替代品。
- HTML规范自身并没有明确地列出这些表示性元素,所以我们下面将讨论那些通常被认为表示性的元素,它们是
2.2.1 字体样式元素
- W3C将字体样式元素(font style element)定义为能够简单地指定字体信息的元素,因此没有语义意义和价值。
- 尽管并不是不完全推荐使用,但是不鼓励优于样式表使用它们。
- W3C定义的字体元素为
- 还有两个字体修饰元素,但是这两个元素已经不再推荐使用了,它们对于我们不再有任何用处。
和
是最典型的两个表示性元素,为了增强可访问性和基于标准的设计方法学,应该避开它们分别选用
和
,因为前两个标签所传递的纯粹是视觉信息,而后者则同时传递意义,即强调。
- 使用
和
作为标准的替代品,在任何需要斜体和粗体文本的地方不断地使用这两个元素。
- 好多所见即所得的工具都存在误用
和
的情况,它们都有I和B按钮,但是现在应该修改它们的功能,在相应的标记处插入
或者
元素。
元素可以用在外语中将文本倾斜(比如,Molte grazie
)。如果使用
来实现这个功能,则需要额外的类名,比如
,因此使用
和
在语义上没有表达什么意思,我建议只使用
元素,因为它已经实现了你想要的功能,而且在标记中占用的空间更少。
tt
元素使用电传机字体或者等宽字体呈现文本。
- 这个元素在语义上没有意义,而且你也可以找到其他的更合适于描述内容的元素(将在下一章中讨论),比如
、
或者
。
和
都会对它们所包含的字体大小产生影响,而且嵌套的
和
还会让内容更大和更小。
- 它们属于纯粹的表示性元素,你可能会发现CSS字体大小属性可能会更适合你的需要。
- 有些人建议,在标签云中使用嵌套
或
元素,以取得“按照重要加权”的视觉效果。其他人则持相反的意见,他们建议使用嵌套的
元素,这样做的好处是代码更加有意义,但是在一些非CSS用户代理中丧失了视觉效果。
- 在HTML4和XHTML1中均不推荐使用的字体样式元素分别是
、
和
。
、
功能相同:在它们所包含的内容中间画一条线,而这个功能的视觉效果已经可以通过使用CSS文本装饰属性完成。
- 如果你希望能够指出某些内容已经被删除,那么使用
元素。
被用来为所含内容添加下划线,而这个功能也同样可以通过文本装饰来完成。
- 任何不属于链接的内容都不应该被添加下划线(链接和下划线通常彼此相联,在Web上任何东西加上下划线现在看上去都像是为用户提供的链接),这是明智的做法。
- 当为一般用户设计所见即所得用户界面的时候,你可以考虑使用这些元素,因为带有不正确的语义要比完全不带有语义更糟糕。
2.2.2
、、和
从技术角度来看,
、
、
和
均属于表示性元素,但是它们也表达了一些(或者不应该)用CSS重现的含义。
-
以
为例:它就是一个简单的水平标尺。
- 在很多情况下,在块元素的顶部或底部简单地添加一条CSS边框就可以重现这个效果,但是只有在用
元素来表示边框的时候才应该用CSS效果来替换。
- 如果你只是将
特别地用作一个分隔符,就像找到书中某一章的单独节一样,那么标尺应该有结构上的用途,应该用它而不是CSS边框。
hr
标签有几个属性:size
、width
、noshade
和align
,但是所有这些属性都已经不推荐使用了,所以我们必须使用CSS来进行样式化。
- 而这里的CSS样式化方法多少有些古怪…
-
标签的作用是在标记中预留空白(比如,tab、空格或者换行)。
- 如果空白对于理解内容很重要的,比如代码样例,就用
- 这个标签的视觉效果可以用CSS的white-space属性重现,但是使用这个属性来代替
意味着你将会在非CSS用户代理中丧失效果。
-
类似地,
和
(上标和下标)元素也通过外表传达着重要的含义。
- 方程式 e=mc2
- 分子式 H2O
- W3C还留意到(除了英语之外)某些语言需要使用上标和下标文本。 Mlle Dupont
- 还可以在英语中使用上下标。最常见的例子就是在日期,或者用来指出脚注或者尾注的位置。
- The 14th of September
- The committee report stated that the minister had acted in good faith.ii
2.3 短语元素
- 短语元素(phrase element)为文本赋予了意义。
- 它们有助于改进文档的结构,使得文档的语义更加丰富,但同时还保留预期的视觉样式。
- 短语元素的完整列表
2.3.1 强调
资料
- Molly E. Holzschlag的文章World Grows Small更加详细的讨论了国际化问题。
2.3.2 引用和定义
cite
属性,用在
标签中指示引用的来源,还用在
和
中引用某个解释性文档,但是还有一个
标签用来包含单独的参考资料,而不与任何特定的元素或者其他材料的引用相关。
- 比如书籍或者电影的标题。
- 大多数用户代理将使用斜体字体显示引用,在打印资料时也可以常常看到这种排版习惯。
dfn
元素,它指出某个术语的第一次出现,这个术语将在整个文档中重复使用。
- 通常也默认为斜体字显示。
- 为术语定义添加唯一性id属性是一个值得考虑的措施,因为这可以让你能够从术语表中直接链接到这些术语。
2.3.3 代码
- 下面四个短语元素对于描述程序设计或者其他计算机相关的任务(比如描述用户输入)非常有用,即
和
用来显示原始的计算机程序代码、(X)HTML标记、CSS,等等。
总是使用等宽字体显示,而
则是使用斜体显示
- 我们可以去掉下面代码的换行符,将
换成
,但是当代码过长的时候,不用
而用
和
,就可以防止这些过长的代码行从布局中溢出。
<html><head>head><body><code>
#!/usr/local/bin/perl<br \>
print "<var>Content-type: text/html\nvar>";<br \="">
print "<var>Hello worldvar>\n";<br \="">
code>body>html>
sample
描述的是这些代码的输出结果。
- 通常也使用等宽字体显示。
<html>
<head>head>
<body>
<p>
<samp>[paul@localhost ~]$ perl hello.cgisamp>
p>
<p>
<samp>Content-type: text/html<br \="">
<H1>Hello World</H1>samp>
p>
body>
html>
利用实现命令提示窗口样式。
samp {
background: #000;
border: 3px groove #ccc;
color: #ccc;
display: block;
padding: 5px;
width: 300px;
}
指出需要用户使用键盘输入。
- 对于
元素来说,最明显的事情就是设置其样式,使其看上去有点像键盘按键。
<html>
<head>head>
<body>
<p>Press <kbd>Akbd>, then <kbd>Bkbd>, then <kbd>Ckbd>. Finally, press the <kbd>Enterkbd> key to continue.p>
body>
html>
samp {
background: #000;
border: 3px groove #ccc;
color: #ccc;
display: block;
padding: 5px;
width: 300px;
}
2.3.4 缩写词
元素指出缩写文本,同时还常常在title
属性中包含了未经缩写的完整文本
则用于首字母缩写词acronym
- 所有的首字母缩写词都属于缩写词,但是并非所有的的abbreviation都是首字母缩写。因而,如果不能确定的话,那么使用
来描述内容总是正确的。
- 屏幕阅读器和其他音响设备如何处理缩写词。
- 如果这个缩写词是一个acronym或者截断词,那么它就应该按照常规单词发音。
- 如果这个缩写词是一个initialism的话,就应该逐字母读出来而不是作为一个普通单词那样发音。
<html>
<head>head>
<body>
<abbr>Mrabbr>
<acronym>NATOacronym>
<abbr class="initialism">BBCabbr>
body>
html>
abbr, acronym {
speak: normal;
}
abbr.initialism {
speak: spell-out;
}
2.4 图像和其他媒体
我们可以按照不同的方式将图像包含进来:行内图像、通过CSS背景图像;通过图像映射或者通过
元素。这些方法都有各自的有点和缺陷。
2.4.1 行内图像
![](image.jpg)
alt
属性
- 在XHTML和HTML中,不管
alt
属性是否包含值,所有的图像元素都应该包含这个属性。
- alt属性的唯一作用就是为图像提供替换内容(alternative content),这就意味着这个属性的值必须能够重述这幅图像所包含的任何有意义的内容。
- 如果图像没有任意意义,那么就将这个属性保留,并且将其值设置为空:
alt=""
。(还可以考虑是否可以完全将这幅图像删除,而将其放置到CSS中作为一幅装饰性的背景图像)
- 并不是为了提供任何附加信息或者描述性标题,而应该由
title
属性来完成这些功能。
longdesc
属性,提供了一个链接,指向一个为alt属性值提供更加详尽的补充说明页面。
- 但是在历史上,支持这个属性的浏览器非常少,因而应该慎用。
- imag元素可以指定图像的高和宽的取值,单位为像素。
- 这些属性是可选的,但是使用这些属性有一个好处是在载入图像之前,浏览器就可以精确地显示文本内容,从而避免了在图像载入之后文本内容必须为图像腾让空间的麻烦。
- 不好的地方在于,这些属性是描述性属性,理想情况下应该在CSS中设置这类属性,这样一来,如果尺寸发生变化,就更加方便修改。
- 如果设置了这些与尺寸相关属性,就会导致在同样大小的盒子内显示alt属性值,如果文本内容的长度比预留的空间大的话,这可能并不是想要的结果。
2.4.2 CSS背景图像
- 为了尽可能帮助标记保持整洁,应该在网页中使用
background
属性来放置那些修饰性图像,这样只需要修改样式表,就可以为网站的外观做出重大的修改(还可以为网站的打印、移动和投影等各种不同版本分别指定图像。)
- 坏处:当图像不可用但CSS可用的时候,替换内容就不会显示出现了,因此并不建议在导航按钮文本或者类似情况中使用CSS背景图像。
- 只要不是重现原文内容,那么背景图像就能够极大地帮助我们获得一定的视觉效果。
资料:
- Dan Cederholm在他的文章Faux Columx中引证了“虚假背景栏(faux column)”的概念:在网页的
上面使用单幅覆盖的背景图像,会产生出两列登高背景栏错觉,不管哪一列包含最多的内容。
- Doug Bowman的文章Sliding Doors of CSS,他在这篇文章中详细地描述了一项技术,在导航菜单中使用一幅超大尺寸的背景图像,允许文本改变尺寸,并且允许背景图像根据文本大小调整。
- Time Murtaugh的文章CSS Design: Mo’Betta Rollovers,他在这篇文章中描述了如何明智地使用
background-image
属性和:hover
伪类,以便不依靠javascript就可以创建基于CSS的翻转图像。
注:“rollover image”,即当鼠标移到一幅图像上时,该图像变为另一幅图像,鼠标离开后恢复为原图。
2.4.3 图像映射
- 图像映射(image map)有两个变种: 客户端和服务端。
- 客户端图像映射由一幅图像构成,这幅图像上面有一系列的预先设定好的不同形状和不同尺寸的热点区域,它们代表了多个链接。。
- 服务端图像映射也是类似的结构,但是鼠标点击处的像素坐标会发送到服务器,由服务器计算出后续的动作。
- 应该优先选择客户端图像映射,因为即使在图像被禁用或者不可用的情况下它们也可以访问,并且对于判断用户是否正在点击某个激活区域,客户端图像映射也能够提供即时的反馈。
- 一幅图像映射就需要有如此众多的标记,这违背了将表示从内容中分离的原则。
- 它由两个明显不同的部分组成,两者不能彼此嵌套。
- 映射元素(
)
- 一个带有
name
属性的容器标签。
- 这个标签可以包含任意数量的
自结束标签。
- 这些
标签使用shape
属性(circle
、rect
、poly
或者default
)来决定区域的形状
coords
竖向标出这个形状的尺寸
href
属性来确定当该区域点击之后应该将用户带往何处,或者使用nohref
属性表示没有使用链接
- 图像元素(
![]()
)
- 具有
usemap
属性,这个属性的值应该等于映射的name
属性的中。
ismap
属性指出这幅图像是否映射。
2.4.4 对象
被设计用来在网页中包含类似图像、视频和Java小应用程序(Java applet)这类的对象。
- 它可以用来却带那些更加具体地
![]()
和
标签,还有专门的
和
标签。
- 存在一套反馈机制,通过这个机制,可以嵌套
,让用户代理在不能呈现优先选择的时候能够显示替代内容。
- 用户代理会先尝试显示视频,如果不能显示的话,它应该尝试显示图像,但如果还不能小时的话,它就显示文本,这里根本不需要
alt
属性。
<object data="myVideo.img" type="application/mpeg">
<object data="myPicture.gif" type="image/gif">
Some descriptive text, and <a href="link.html">a linka>.
object>
object>
- 由于缺乏浏览器支持,导致
要比预期的难以使用,而且这个元素本身臃肿,它共有17个该元素特有的属性。
并不仅仅用来包含图形,它还可以使用
参数来嵌入富媒体播放器,如Windows Media Player、RealPlayer、QuickTime和Flash Player,
参数可以向网页用到的媒体播放器传递各种不同的参数。
- 当嵌入媒体的时候只需要关注一下,
标签通常就是你所需要的东西。
你可能感兴趣的:(html,javascript,前端)