HTML基础全景图
HTML是前端基础,不知道你学完之后,是否和我一样需要一张全景视图?
如果拥有这么一张视图,那么复习和查询知识点就方便多了。
# 一、原则
HTML的使用原则
- 语义与呈现分离。也就是HTML与CSS分离
- 不要误用。典型的就是万物皆可table,这是不对的
- 具体为佳,一以贯之。标签太多,语义不明?你喜欢div布局,没关系,一以贯之
# 二、全局属性
全局属性是所有HTML元素共有的属性; 它们可以用于所有元素,即使属性可能对某些元素不起作用。
参考MDN 全局属性 (opens new window)
accesskey:提供了为当前元素生成键盘快捷键的提示class:控制用户的文本输入是否和如何自动大写class:一个以空格分隔的元素的类名(classes )列表contenteditable:一个枚举属性(enumerated attribute),表示元素是否可被用户编辑contextmenu:<menu>的id ,作为该元素的上下文菜单data-*:自定义数据属性dir:一个指示元素中文本方向的枚举属性draggable:是否可以拖动dropzone:在元素上删除哪些类型的内容hidden:隐藏id:定义唯一标识符land:帮助定义元素的语言style:含要应用于元素的CSS样式声明tabindex:顺序键盘导航title:表示与其所属元素相关信息的文本
# 三、基础标签
一段基础的HTML代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟</title>
</head>
<body>
<p>我的第一个段落。</p>
</body>
</html>
逐个分析其中的元素:
!DOCTYPE:涉及到了SGML (opens new window)的古老历史,HTML可以说是SGML的一种格式。HTML5中简化为了目前我们看到的头部html:根标签head:包含元数据title:标题base:为页面上的所有的相对链接规定默认 URL 或默认目标meta: 参考MDN meta元素 (opens new window)name:参考MDN meta name (opens new window)author:文档作者的名字description:一段简短而精确的、对页面内容的描述generator:生成此页面的软件的标识符keywords:与页面内容相关的关键词(搜索引擎相关)referrer:控制由当前文档发出的请求的 HTTP Referer 请求头theme-color:表示当前页面的建议颜色color-scheme:指定与当前文档兼容的一种或多种配色方案viewport:为viewport(视口)的初始大小提供指示(hint)。目前仅用于移动设备。
一个常见的示例:width=device-width,表示宽度等于设备宽度 initial-scale,表示初始缩放比例 此外还有height、maximum-scale、minimum-scale等值<meta name="viewport" content="width=device-width, initial-scale=1.0"/>creator:当前文档的创建者googlebot:robots 的替代名称,只被 Googlebot(Google 的网页爬虫/索引搜寻器)使用publisher:当前文档的发布者/出版者robots:爬虫、协作搜寻器,或者 “机器人”,对此页面的处理行为,或者说,应当遵守的规则
charset:这个属性声明了文档的字符编码。比如utf-8content:此属性包含http-equiv 或name 属性的值,具体取决于所使用的值http-equiv:定义了一个编译指示指令content-security-policy:它允许页面作者定义当前页的内容策略。关于内容策略CSP,参考:CSP (opens new window)content-type:如果使用这个属性,其值必须是"text/html; charset=utf-8"default-style:设置默认样式x-ua-compatible:这是一个旧标记,不推荐使用。主要是IE浏览器渲染时用到refresh:指定重新载入页面的时间间隔 (秒)
body:包含了可见的页面内容style:包含文档的样式信息或者文档的部分内容。参考MDN style元素 (opens new window)type:以 MIME 类型 (opens new window) 定义样式语言。默认为text/cssmedia:规定该样式表适用于哪个媒体。参考 媒体查询 (opens new window)title:标题
link:外部资源链接元素。参考MDN link元素 (opens new window)href:指定被链接资源的URLhreflang:指明了被链接资源的语言rel:指定 链接类型 (opens new window) 值。下面对主要的值进行说明icon:重点关注。一般和type、sizes配合使用。在之前,还会看到shortcut,应该被弃用
<link rel="icon" href="/static/images/favicon.ico" type="image/x-icon" sizes="16x16" />stylesheet:重点关注。样式表,如果没有制定type,默认是text/cssprefetch:建议浏览器提前获取链接的资源。页面全部加载完成后,空闲时间下载或预取preload:告诉浏览器下载资源,因为在当前导航期间稍后将需要该资源。在页面生命周期的早期开始加载,尽早但不要阻塞页面呈现
as:如果rel="preload" 或者 rel="prefetch" 时才能使用。规定了加载内容的类型,比如audio image,这样会先预加载音频资源,再预取图片资源importance:如果rel="preload" 或者 rel="prefetch" 时才能使用。规定资源优先级,可选值:auto、high、lowtype:内容的MIME类型。常用值:text/csscrossorigin:是否必须使用 CORSdisabled:仅对于rel="stylesheet"可用,表示禁止应用样式表
script:嵌入或引用可执行脚本。参考MDN script元素 (opens new window)defer:有 defer 属性的脚本会阻止 DOMContentLoaded 事件,直到脚本被加载并且解析完成async:对于普通脚本,会并行请求;对于模块(type="module")脚本,脚本和依赖都会在延缓队列中并发请求src:定义引用外部脚本的 URIintegrity:子资源完整性,常用于CDN安全设置nomodule:用于不支持ES2015 Modules的旧浏览器中脚本回退。一个示例:
新浏览器会解析第一行,旧浏览器会解析第二行<script type="module" src="app.js"></script> <script nomodule src="classic-app-bundle.js"></script>type:可以是MIME类型,支持的 MIME 类型包括text/javascript, text/ecmascript, application/javascript, 和application/ecmascript;可以是module,会被当成JavaScript模块
noscript:如果页面上的脚本类型不受支持或者当前在浏览器中关闭了脚本,则在 HTML noscript 元素中定义脚本未被执行时的替代内容
# 四、行内元素和块级元素
HTML元素众多,分类的方法也是五花八门。
从排版的角度,对元素进行分类,大致可分为两种:行内元素和块级元素。
在HTML 5规范关于排版方面,并没有行内和块级的概念。这俩名词最高出现在HTML 4.01标准,HTML 5中用了更复杂的 内容类别 (opens new window) 来替代,有兴趣可以去学习一下。
由于行内、块级概念本身的简洁性,从它们出发有利于我们更好的理解HTML排版。
简单来说,它们的主要区别是:
- 块级元素:独占一行,对宽高的属性值生效,有盒子模型。不给宽度,块级元素就默认为浏览器的宽度,即就是100%宽
- 行内元素:可以多个标签存在一行,对宽高属性值不生效,完全靠内容撑开宽高
我们来看一个实际的例子:
会看到元素在浏览器中的排版流程大概是这样的:
- 对行的排版,一般是先行内布局,再确定行的位置,根据行位置计算出行内盒和文字的排版位置
- 对块的排版,它总是单独占据一行,计算出交叉轴方向的高度即可
排版角度分类,每个类别元素太多了,下面从功能性进行分类,一一介绍。
由于元素众多,并不会对每个元素的用法详细讲解,只会对其中重点提点一下,具体详情参阅:MDN HTML元素参考 (opens new window)
# 五、标记文字标签
此章节的元素都为行内元素
a:超链接。主要用到href和target属性(常用值:_blank,_self)b:特别强调。渲染为字体加粗strong:表示重要。渲染为字体加粗,和b表现形式一致small:文本的字体变小一号u:非文本注释。渲染时有一条实体下划线em:强调。渲染为斜体i:区别于不同文本,例如表示科学术语、外文词语。渲染字体为斜体,和em表现形式一样s:表示不精确、不正确的内容。渲染时有一条删除线del:表示删除的文本。渲染时有一条删除线,和s表现形式一样ins:表示插入文本。渲染时有一条下划线sub:下标。渲染时字体变小,位置变低sup:上标。渲染时字体变小,位置变高br:生成一个换行符号wbr:在合适的位置换行code:一段代码。渲染时字体变细var:表示变量。渲染时字体为斜体samp:表示程序输出。渲染时字体为monotypeabbr:表示缩写。无特殊表现span:表示短语,无任何语义。无特殊表现dfn:表示术语。渲染时字体为斜体q:表示短的引用文本。渲染时前后会添加双引号cite:表示作品的引用。渲染时字体为斜体ruby/rt/rp:东亚语言中的注音符号。渲染效果如下:
mark:突出显示的文本。渲染时会高亮(背景颜色为mark,字体颜色为marktext)time:表示时间和日期的标签
标记文字元素中最常用的就是a和span了,你会发现其他元素大多都是具有语义的span,在忽略CSS样式表的浏览器或者是搜索引擎爬虫中,使用语义元素是有利于页面信息展示的。
当你学习了CSS之后,你会发现所有的标记文字语义元素其实就是自带样式的span,比如sub的默认样式表:
sub {
vertical-align: sub;
font-size: smaller;
}
# 六、组织内容标签
此章节的元素都为块级元素
# 1、内容分区
无特殊说明,元素都没有默认渲染样式
main:呈现应用主题部分nav:提供导航链接section:通用独立章节header:介绍性内容footer:页脚article:独立结构aside:与其余页面几乎无关的内容,比如侧边栏或标注栏address:个人或组织的联系信息h1-h6:6个不同级别的标题,H1是一级标题,渲染时字体加粗,字号变大;h2之后,渲染效果逐级递减
# 2、文本内容
div:通用的内容容器ul/ol,li:ol是有序列表,ul是无序列表。li是ol/ul的项目,他们的默认渲染效果:
dl,dt,dd:一个术语定义和描述的列表,三个元素要配合使用。效果如下:
figure,figcaption:两者配合使用,作为一个独立的引用单元blockquote:块级引用元素p:段落pre:预定义格式文本。通常按照原文件中的编排,以等宽字体的形式展现出来,文本中的空白符(比如空格和换行符)都会显示出来
# 3、图片多媒体
img:图片audio,source:音频。source用来描述资源,参考:MDN Audio元素 (opens new window)video,source:视频。source用来描述资源,参考:MDN Video元素 (opens new window)map,area:定义图片的点击热区。可用来实现点击不同区域,触发不同逻辑。演示效果:
# 4、内嵌内容
iframe:将另一个HTML文档嵌入到当前页面object、embed:嵌入对象,可以嵌入图片、视频、html、flash等。不推荐使用,请使用iframe、img、video等语义元素picture,source:为不同的显示/设备场景提供不同的图像展示svg:嵌入一个独立的svg片段,支持的内容非常丰富。参考:MDN Svg属性列表 (opens new window)math:MathML的根元素,MathML用来描述数学公式、符号。参考:MDN MathML (opens new window)
# 5、交互元素&Web组件
dialog:对话框details,summary:一个挂件,可以切换成展开状态template,slot:Web Components使用的元素,允许定制元素并在web应用中使用。参考:MDN Web Components (opens new window)
# 七、表格
来看一个完整的示例:
从示例上我们可以看到,一个表格由如下部分组成:
table:表格根元素caption:定义表格标题colgroup,col:定义列样式thead,tr,th:定义表格列头tbody,tr,td:定义表格内容
thead和tbody通常可以省略,极简的表格只需要table、tr、td即可完整展示
# 八、表单
form:表单根元素,常用属性有:auction:处理表单提交的 URLmethod:请求方式,可选值:get、post、dialog(表单在dialog元素中,提交时关闭对话框)enctype:method为post时,提交给服务器的MIME类型。可选值:application/x-www-form-urlencoded:默认值multipart/form-data:文件上传用到的值text/plain:用于调试
novalidate:不需要验证表单
fieldset、legend:对表单元素分组。示例:
label、input:一般两个元素会配合使用。input的类型丰富,根据类型不同配合使用的属性也各不相同。参考:MDN Input元素 (opens new window) :button:表现为普通按钮reset:表现为按钮,将表单的所有内容重置为默认值submit:表现为按钮,提交表单image:表现为图片按钮hidden:隐藏的textcheckbox:复选框。有属性checked,表示被选中radio:单选框color:颜色控件date:日期控件(年月日)。常用属性值:min:最小值。例如"2017-04-01"max:最大值
time:时间控件。也有min、max属性month:年与月组成的日期。有min、max属性week:年与周组成的日期。有min、max属性datetime-local:日期时间控件。有min、max属性file:想要上传文件,form的请求方式必须为post,enctype必须为"multipart/form-data"。常用属性值:accept:可以是文件扩展名,如".jpg,.png,.doc"。或者一个有效的MIME类型,如"image/*"capture:在PC上会得到一个文件选择器。在移动端,当accept为图像、音频、视频的时候,此属性指定哪个设备获得媒体资源。可选值有:user:应使用面向用户的摄像头和/或麦克风environment:应使用外向摄像头和/或麦克风
multiple:表示可以选择多个文件
number:数字控件。有min、max、step属性range:范围控件。有min、max、step、list(和datalist配合)属性 文本类型:text:单行文本password:密码(隐藏输入)email:邮箱(带验证)url:URL(带验证)tel:电话(移动端显示数字键盘)search:搜索框(可能有清除按钮)
文本类型的通用属性:
maxlength/minlength:长度限制pattern:正则表达式验证placeholder:占位提示autocomplete:自动完成提示spellcheck:拼写检查
其他类型:
color:颜色选择器- input的所有控件都有通用属性:
name: 反馈给服务器的名称value: 默认值disabled: 控件不可用。click事件将失效,也不会把此控件数据提交到服务器readonly: 只读,不可修改。在type为hidden、range、color、checkbox、radio、file,将被忽略required: 表示必填
select、optgroup、option 选择框,optgroup元素是可选的。如果要做出多选框,使用mulpitle,也可以和size属性配合
datalist: 描述了input元素中可能的值。演示效果:
textarea: 多行纯文本编辑控件。常用属性值:cols: 文本可视宽度,默认为 20rows: 文本行数wrap: 文本换行的方式,默认为 soft。还可选hard,文本到达元素最大宽度的时候,浏览器自动插入换行符minlength、maxlength、placeholder、spellcheck: 不赘述
meter: 描述标量或者分数值。常用属性有:low: 下限值。会有视觉效果,元素处于[min-low][low-high][high-max]之间颜色会有所不同high: 上限值。会有视觉效果optimum: 最佳取值min: 最小值,默认 0max: 最大值,默认 1
progress: 进度条。一般是max属性和value属性配合着用button: 可点击的按钮
# 九、总结
有了这个HTML全局视图,在脑海中就有了基本框架,以后遇到HTML方面相关的问题,按图索骥就好了。
当然,HTML只是千层之台的第一步,后续还有CSS和JS DOM相关的内容,有了CSS,就有了神笔马良;而有了JS DOM,就有了展示动态内容的内容,插上了飞翔的翅膀。
任重而道远,让你我继续前进。
祝你变得更强!