最准确的网页设计思路是把网页分成三个层次,即:结构层、表示层、行为层。
网页的结构层(structural layer)由 HTML 或 XHTML 之类的标记语言负责创建。标签,也就是那些出现在尖括号里的单词,对网页内容的语义含义做出了描述,但这些标签不包含任何关于如何显示有关内容的信息。例如,P 标签表达了这样一种语义:“这是一个文本段。”
网页的表示层(presentation layer) 由 CSS 负责创建。 CSS 对“如何显示有关内容”的问题做出了回答。
网页的行为层(behavior layer)负责回答“内容应该如何对事件做出反应”这一问题。这是 Javascript 语言和 DOM 主宰的领域。
网页的表示层和行为层总是存在的,即使我们未明确地给出任何具体的指令也是如此。此时, Web 浏览器将把它的默认样式和默认事件处理函数施加在网页的结构层上。例如,浏览器会在呈现“文本段”元素时留出页边距,有些浏览器会在用户把鼠标指针悬停在 某个元素的上方时弹出一个显示着该元素的 title 属性值的提示框,等等。
分离
在所有的产品设计活动中,选择最适用的工具去解决问题是最基本的原则。具体到网页设计工作,这意味着:
使用 (X)HTML 去搭建文档的结构。
使用 CSS 去设置文档的呈现效果。
使用 DOM 脚本去实现文档的行为。
不过,在这三种技术之间存在着一些潜在的重叠区域,如:DOM 技术可以用来改变网页的结构。在 CSS 身上也可以找到这种技术相互重叠的例子。诸如 :hover 和 :focus 之类的预定义符号(伪 class 属性) 使我们可以根据用户触发事件来改变呈现效果。改变元素的呈现效果当然是表示层的“势力范围”,但对用户触发事件做出反应却是行为层的领地。表示层和行为层 的这种重叠形成了一个灰色地带。
伪 class 属性是 CSS 正在深入 DOM 领地证据,但 DOM 在这方面也不是毫无作为。我们完全可以利用 DOM 技术把样式信息施加在 HTML 元素身上。
分离的效果要做到即使去掉表示层和行为层,文档的内容也依然可以访问,因为“内容才是一切”。而且网页的行为层 (javascript) 与其结构 (XHTML) 是彼此互不干扰的,不能混杂在一起。还要给行为层“预留退路”,要考虑到如果你的用户禁用了 Javascript 会怎样?是不可网页还可以正常运作。
总之,这三种技术就像是一个凳子的三条腿,要想成为一名技能全面的 Web 技术师,就必须熟练掌握这三种技术,并知道每种技术最适用于哪一类问题。
本面试题为前端常考面试题,后续有机会继续完善。我是歌谣,一个沉迷于故事的讲述者。
欢迎一起私信交流。