轩辕李的博客 轩辕李的博客
首页
  • Java
  • Spring
  • 其他语言
  • 工具
  • HTML&CSS
  • JavaScript
  • 分布式
  • 代码质量管理
  • 基础
  • 操作系统
  • 计算机网络
  • 编程范式
  • 安全
  • 中间件
  • 心得
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

轩辕李

勇猛精进,星辰大海
首页
  • Java
  • Spring
  • 其他语言
  • 工具
  • HTML&CSS
  • JavaScript
  • 分布式
  • 代码质量管理
  • 基础
  • 操作系统
  • 计算机网络
  • 编程范式
  • 安全
  • 中间件
  • 心得
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • JavaScript

  • HTML & CSS

    • HTML基础全景图
      • 原则
      • 全局属性
      • 基础标签
      • 行内元素和块级元素
      • 标记文字标签
      • 组织内容标签
        • 1、内容分区
        • 2、文本内容
        • 3、图片多媒体
        • 4、内嵌内容
        • 5、交互元素&Web组件
      • 表格
      • 表单
      • 总结
  • 前端
  • HTML & CSS
轩辕李
2021-08-05
目录

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)。目前仅用于移动设备。
              一个常见的示例:
                <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
              
              width=device-width,表示宽度等于设备宽度 initial-scale,表示初始缩放比例 此外还有height、maximum-scale、minimum-scale等值
            • creator:当前文档的创建者
            • googlebot:robots 的替代名称,只被 Googlebot(Google 的网页爬虫/索引搜寻器)使用
            • publisher:当前文档的发布者/出版者
            • robots:爬虫、协作搜寻器,或者 “机器人”,对此页面的处理行为,或者说,应当遵守的规则
          • charset:这个属性声明了文档的字符编码。比如utf-8
          • content:此属性包含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/css
    • media:规定该样式表适用于哪个媒体。参考 媒体查询 (opens new window)
    • title:标题
  • link:外部资源链接元素。参考MDN link元素 (opens new window)
    • href:指定被链接资源的URL
    • hreflang:指明了被链接资源的语言
    • 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/css
      • prefetch:建议浏览器提前获取链接的资源。页面全部加载完成后,空闲时间下载或预取
      • preload:告诉浏览器下载资源,因为在当前导航期间稍后将需要该资源。在页面生命周期的早期开始加载,尽早但不要阻塞页面呈现
    • as:如果rel="preload" 或者 rel="prefetch" 时才能使用。规定了加载内容的类型,比如audio image,这样会先预加载音频资源,再预取图片资源
    • importance:如果rel="preload" 或者 rel="prefetch" 时才能使用。规定资源优先级,可选值:auto、high、low
    • type:内容的MIME类型。常用值:text/css
    • crossorigin:是否必须使用 CORS
    • disabled:仅对于rel="stylesheet"可用,表示禁止应用样式表
  • script:嵌入或引用可执行脚本。参考MDN script元素 (opens new window)
    • defer:有 defer 属性的脚本会阻止 DOMContentLoaded 事件,直到脚本被加载并且解析完成
    • async:对于普通脚本,会并行请求;对于模块(type="module")脚本,脚本和依赖都会在延缓队列中并发请求
    • src:定义引用外部脚本的 URI
    • integrity:子资源完整性,常用于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%宽
  • 行内元素:可以多个标签存在一行,对宽高属性值不生效,完全靠内容撑开宽高

我们来看一个实际的例子:

<html>
    <p>Hello</p>
    <span class="sp">World</span>
    <p>I'm Jack</p>
</html>
<style>
    .sp{
        background-color: red;
        /* 对行内元素的宽高设置是不起效果的 */
        height: 30px;
        width: 50px;
    }
</style>

会看到元素在浏览器中的排版流程大概是这样的:

  • 对行的排版,一般是先行内布局,再确定行的位置,根据行位置计算出行内盒和文字的排版位置
  • 对块的排版,它总是单独占据一行,计算出交叉轴方向的高度即可

排版角度分类,每个类别元素太多了,下面从功能性进行分类,一一介绍。
由于元素众多,并不会对每个元素的用法详细讲解,只会对其中重点提点一下,具体详情参阅: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:表示程序输出。渲染时字体为monotype
  • abbr:表示缩写。无特殊表现
  • span:表示短语,无任何语义。无特殊表现
  • dfn:表示术语。渲染时字体为斜体
  • q:表示短的引用文本。渲染时前后会添加双引号
  • cite:表示作品的引用。渲染时字体为斜体
  • ruby/rt/rp:东亚语言中的注音符号。渲染效果如下:
<html>
  <ruby>
    汉 <rp>(</rp><rt>han</rt><rp>)</rp>
    字 <rp>(</rp><rt>zi</rt><rp>)</rp>
  </ruby>
</html>
  • 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的项目,他们的默认渲染效果:
<html>
    <h2>我是有序列表</h2>
    <ol>
      <li>White</li>
      <li>Red</li>
      <li>Black</li>
    </ol>
    <h2>我是无序列表</h2>
    <ul>
      <li>White</li>
      <li>Red</li>
      <li>Black</li>
    </ul>
</html>
  • dl,dt,dd:一个术语定义和描述的列表,三个元素要配合使用。效果如下:
<html>
  <dl>
    <dt>Firefox</dt>
    <dd>A free, open source, cross-platform, graphical web browser
      developed by the Mozilla Corporation and hundreds of volunteers.
    </dd>
    <!-- other terms and definitions -->
  </dl>
</html>
  • 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:定义图片的点击热区。可用来实现点击不同区域,触发不同逻辑。演示效果:
<html>
  <p>点击太阳或其他行星,注意变化:</p>
  
  <img src="https://cdn.jsdelivr.net/gh/xuanyuanli/Img@master/picx/image.6b3z3ix66nc0.jpg" width="145" height="126" alt="Planets" usemap="#planetmap">
  
  <map name="planetmap">
    <area shape="rect" coords="0,0,82,126" alt="Sun" onclick="alert('我是太阳')">
    <area shape="circle" coords="90,58,3" alt="Mercury" onclick="alert('我是水星')">
    <area shape="circle" coords="124,58,8" alt="Venus" onclick="alert('我是金星')">
  </map>
</html>

# 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)

# 表格

来看一个完整的示例:

<html>
  <table border="1">
    <colgroup>
      <col span="2" style="background-color:red">
      <col style="background-color:yellow">
    </colgroup>
    <caption>我是Title</caption>
    <thead>
      <tr>
        <th>ISBN</th>
        <th>Title</th>
        <th>Price</th>
      </tr>    
    </thead>
    <tbody>
      <tr>
        <td>3476896</td>
        <td>My first HTML</td>
        <td>$53</td>
      </tr>
    </tbody>
  </table>
</html>

从示例上我们可以看到,一个表格由如下部分组成:

  • table:表格根元素
  • caption:定义表格标题
  • colgroup,col:定义列样式
  • thead,tr,th:定义表格列头
  • tbody,tr,td:定义表格内容

thead和tbody通常可以省略,极简的表格只需要table、tr、td即可完整展示

# 表单

  • form:表单根元素,常用属性有:
    • auction:处理表单提交的 URL
    • method:请求方式,可选值:get、post、dialog(表单在dialog元素中,提交时关闭对话框)
    • enctype:method为post时,提交给服务器的MIME类型。可选值:
      • application/x-www-form-urlencoded:默认值
      • multipart/form-data:文件上传用到的值
      • text/plain:用于调试
    • novalidate:不需要验证表单
  • fieldset、legend:对表单元素分组。示例:
<html>
<form>
  <fieldset>
    <legend>Personalia:</legend>
    Name: <input type="text"><br>
    Email: <input type="text"><br>
    Date of birth: <input type="text">
  </fieldset>
</form>
</html>
  • label、input:一般两个元素会配合使用。input的类型丰富,根据类型不同配合使用的属性也各不相同。参考:MDN Input元素 (opens new window) :
    • button:表现为普通按钮
    • reset:表现为按钮,将表单的所有内容重置为默认值
    • submit:表现为按钮,提交表单
    • image:表现为图片按钮
    • hidden:隐藏的text
    • checkbox:复选框。有属性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:文本控件。常用属性有:
      • maxlength: 最大字符
      • minlength: 最小字符
      • pattern: 验证内容的正则
      • placeholder: 示例值
      • size: 文本框有多少字符的宽度
      • spellcheck: 是否进行拼写检查
    • tel: 电话号码控件,属性同text。移动端设备会显示电话数字键盘
    • email: 邮箱控件,属性同text
    • url: url地址控件,属性同text
    • password: 密码控件,属性同text(不支持list)
    • input的所有控件都有通用属性:
      • name: 反馈给服务器的名称
      • value: 默认值
      • disabled: 控件不可用。click事件将失效,也不会把此控件数据提交到服务器
      • readonly: 只读,不可修改。在type为hidden、range、color、checkbox、radio、file,将被忽略
      • required: 表示必填
  • select、optgroup、option 选择框,optgroup元素是可选的。如果要做出多选框,使用mulpitle,也可以和size属性配合
  • datalist: 描述了input元素中可能的值。演示效果:
<html>
<datalist id="colorsxx">
  <option>#ff0000</option>
  <option>#ee0000</option>
  <option>#dd0000</option>
  <option>#cc0000</option>
  <option>#bb0000</option>
</datalist>
<datalist id="numbersxx">
  <option>0</option>
  <option>2</option>
  <option>4</option>
  <option>8</option>
  <option>16</option>
  <option>32</option>
  <option>64</option>
</datalist>
<datalist id="fruitsxx">
  <option>cherry</option>
  <option>banana</option>
  <option>mango</option>
  <option>orange</option>
  <option>blueberry</option>
</datalist>
<datalist id="urlsxx">
  <option>https://developer.mozilla.org</option>
  <option>https://caniuse.com/</option>
  <option>https://mozilla.com</option>
  <option>https://mdn.github.io</option>
  <option>https://www.youtube.com/user/firefoxchannel</option>
</datalist>

<p>
  <label for="textx">Text</label>
  <input type="text" list="fruitsxx" id="textx"/>
</p>
<p>
  <label for="colorx">Color</label>
  <input type="color" list="colorsxx" id="colorx" readonly/>
</p>
<p>
  <label for="rangex">Range</label>
  <input type="range" min="0" max="64" list="numbersxx" id="rangex"/>
</p>
<p>
  <label for="numberx">Number</label>
  <input type="number" min="0" max="64" list="numbersxx" id="numberx"/>
</p>
<p>
  <label for="urlx">URL</label>
  <input type="url" list="urlsxx" id="urlx"/>
</p>
</html>
  • textarea: 多行纯文本编辑控件。常用属性值:
    • cols: 文本可视宽度,默认为 20
    • rows: 文本行数
    • wrap: 文本换行的方式,默认为 soft。还可选hard,文本到达元素最大宽度的时候,浏览器自动插入换行符
    • minlength、maxlength、placeholder、spellcheck: 不赘述
  • meter: 描述标量或者分数值。常用属性有:
    • low: 下限值。会有视觉效果,元素处于[min-low] [low-high] [high-max]之间颜色会有所不同
    • high: 上限值。会有视觉效果
    • optimum: 最佳取值
    • min: 最小值,默认 0
    • max: 最大值,默认 1
  • progress: 进度条。一般是max属性和value属性配合着用
  • button: 可点击的按钮

# 总结

有了这个HTML全局视图,在脑海中就有了基本框架,以后遇到HTML方面相关的问题,按图索骥就好了。
当然,HTML只是千层之台的第一步,后续还有CSS和JS DOM相关的内容,有了CSS,就有了神笔马良;而有了JS DOM,就有了展示动态内容的内容,插上了飞翔的翅膀。
任重而道远,让你我继续前进。

祝你变得更强!

编辑 (opens new window)
#HTML
上次更新: 2024/12/26
关于this关键字的魔幻现实

← 关于this关键字的魔幻现实

最近更新
01
Spring Boot版本新特性
09-15
02
Spring框架版本新特性
09-01
03
Spring Boot开发初体验
08-15
更多文章>
Theme by Vdoing | Copyright © 2018-2025 京ICP备2021021832号-2 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式