整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

HTML常用标签

TML常用标签有:a标签、table标签、img标签、form标签和input标签。

a标签

作用

  1. 跳转到外部网页
  2. 跳转到内部锚点
  3. 跳转到邮箱或电话等

属性

(一)href

href是hyper reference的缩写,超链接的意思。

用于指定链接目标的ur地址,(必须属性)当为标签应用href属性时,它就具有了超链接的功能;
href=“#”表示这是一个空链接;
如果href里面地址是—个文件或者压缩包,会下载这个文件。

<a href="https://google.com">超链接到google网站的主页</a>
 <a href="https://google.com">超链接到google的主页</a>
 <a href="//google.com">超链接到google的主页</a>

展现形式:

点击此链接,即可到达google的主页

a标签href的取值:

1、上述代码中的网址的取值(推荐使用第三行的代码)

<a href="//google.com">超链接到google的主页</a>

由于此方式能够自动补齐相关的网络地址,前面两种写错就会报错,所以推荐使用。

2、路径

  • /a/b/c 或者是a/b/c

当前路径下的a里面的b,b里面的c

  • index.html 以及./index.html

在当前目录下寻找index.html文件

3、伪协议

  • javascript:代码;(冒号与分号一定要写)
<a href="javascript:;">点击后无任何点击或刷新等动作的反应</a>
  • 锚点链接
<a href="#要跳转的元素的id"></a>

点击链接的时候,会跳转到指定元素所在的位置。

  • mailto:邮箱
<a href="mailto:abcdefg@163.com ">发邮件给我</a>
  • tel:手机号
<a href="tel:12345678901">打电话给我</a>

(二)targe

用于指定链接页面的打开方式

a的target取值

1、内置名字

_blank 在空白页打开

_self 在当前页面打开

_parent 在父级窗口打开

_top 在最顶级的窗口打开

<a href="//google.com" target="_blank">超链接到google网站的主页在空白页打开</a>

2、程序员的命名

window:name(在xxx页面打开)

iframe的name(iframe现在已经很少使用了,是指内嵌窗口)


(三)download

下载页面,但目前很少用,有的浏览器不支持,尤其是手机浏览器可能不支持。

table标签

1、table标签的语法:

thead:表头

tbody:表的内容,用于定义

tfoot:表的脚部

tr:table row,表格里的行

th:表格的表头部分,其中的文本内容字体加粗居中显示

td:table data,表格数据,用于定义表格中的单元格

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>
  <body>
    <table>
      <thead>
        <tr>
          <th></th>
          <th>小红</th>
          <th>小黄</th>
          <th>小蓝</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th>数学</th>
          <td>90</td>
          <td>60</td>
          <td>80</td>
        </tr>
        <tr>
          <th>语文</th>
          <td>88</td>
          <td>95</td>
          <td>97</td>
        </tr>
        <tr>
          <th>英语</th>
          <td>88</td>
          <td>95</td>
          <td>97</td>
        </tr>
      </tbody>
      <tfoot>
        <tr>
          <th>总分</th>
          <td>266</td>
          <td>250</td>
          <td>274</td>
        </tr>
      </tfoot>
    </table>
  </body>
</html>



第一行的th标签为空

2、table的样式

table-layout:auto;自动计算每一行的宽高

table-layout:fixed;通过列表的宽度来决定平均宽度

border-collapse:collapse; 合并边框(默认边框与边框之间不合并)

border-spacing:0;边框为0.(边框与边框之间的距离)。

img标签(图片)

作用:发出get请求,展示一张图片。

<img src="1.JPG" alt="头像" width="400" />

当前路径下的1.jpg,确定宽度为400,只写宽度高度会自适应

属性

alt:alternate的缩写,替换的意思。替换文本,图像不能显示的文字。

路径错误显示alt内容

title:提示文本。鼠标放到图像上,显示的文字。

响应

max-width:100% 所有的图片在手机上都自适应宽度,宽度最大为100%。

事件

onload/onerror 监听图片是否加载成功,加载成功时用onload,不成功是用onerror事件。确保在onerror事件能够补救。

<body>
 <img id="xxx" src="dog.jpg" alt="一只小狗">
<script>
xxx.onload = function () {
console.log("图片加载成功");
 };
xxx.onerror = function () {
console.log("图片加载失败");
xxx.src = "/404.jpg";
 };
</script>
</body>

监听成功时,打印出成功

监听失败时,先打印出监听失败并且开始执行加载失败是的挽救图片。404.jpg文件执行

感想:

  • a标签的默认样式可以设置清除,href属性可以有好多种取值,a标签的意义也不仅仅是跳转到一个网址,还可以发邮件打电话。
  • 给img标签设置宽度和高度时,不能让图片变形
  • table标签必须按照thead,tbody,tfoot的结构去写,先划分好结构,再往里填充内容,即使tfoot写在前面,也会显示在页面的尾部

本文为作者本人的原创文章,著作权归作者本人和饥人谷所有,转载务必注明来源。

、html的介绍

1.1 html的定义

HTML 的全称为:HyperText Mark-up Language, 指的是超文本标记语言。标记:就是标签, <标签名称></标签名称>,比如:<html></html>、<h1></h1>等,标签大多数都是成对出现的。

所谓超文本,有两层含义:

  1. 因为网页中还可以图片、视频、音频等内容(超越文本限制)
  2. 它还可以在网页中跳转到另一个网页,与世界各地主机的网页链接(超链接文本)

1.2 html的作用

html是用来开发网页的,它是开发网页的语言。

1.3 小结

  • html是开发网页的语言
  • html中的标签大多数都是成对出现的, 格式: <标签名>

二、html的基本结构

2.1 结构代码

<!DOCTYPE html>
<html>
   <head>            
       <meta charset="UTF-8">
       <title>网页标题</title>
   </head>
   <body>
        网页显示内容
   </body>
</html>
  1. 第一行<!DOCTYPE html>是文档声明, 用来指定页面所使用的html的版本, 这里声明的是一个html5的文档。
  2. <html>...</html>标签是开发人员在告诉浏览器,整个网页是从<html>这里开始的,到html结束,也就是html文档的开始和结束标签。
  3. <head>...</head>标签用于定义文档的头部,是负责对网页进行设置标题、编码格式以及引入css和js文件的。
  4. <body>...</body>标签是编写网页上显示的内容。

2.2 浏览网页文件

网页文件的后缀是.html或者.htm, 一个html文件就是一个网页,html文件用编辑器打开显示的是文本,可以用文本的方式编辑它,如果用浏览器打开,浏览器会按照标签描述内容将文件渲染成网页。

2.3 小结

三、vscode的基本使用

3.1 vscode 的基本介绍

全拼是 Visual Studio Code (简称 VS Code) 是由微软研发的一款免费、开源的跨平台代码编辑器,目前是前端(网页)开发使用最多的一款软件开发工具。

3.2 vscode 的安装

  1. 下载网址: https://code.visualstudio.com/Download
  2. 选择对应的安装包进行下载:


  1. 根据下载的安装包双击进行安装即可,当然为了更好的使用 vscode 还可以安装对应的插件。

3.3 vscode 的插件安装

插件名说明Chinese (Simplified) Language Pack for VS Code中文(简体)汉化包open in browser右击在浏览器打开html

  1. 汉化插件安装

  1. open in browser插件安装


  1. 注意: 如果在vscode打开的html文档中右击没有出现 open in browser 类型的选项,需要把当前打开的文件关掉,重新打开这个文件就好了。

3.4 vscode 的插件卸载

点击对应安装的插件,然后再点击卸载按钮即可。

3.5 vscode 的使用

  1. 打开文件夹创建文件


  1. 快速创建html文档的基本结构


  1. 右击在浏览器打开html文档


3.6 设置字体大小


3.7 设置颜色主题


3.8 设置默认浏览器[可选]

  1. 可以根据自己的需要设置默认使用的浏览器


3.9 小结

  • vscode 是由微软研发的一款免费、开源的跨平台代码编辑器
  • 通过资源管理器打开文件夹创建HTML文件,编写 HTML 代码
  • 可以根据需要安装对应的插件
  • 可以设置字体大小和颜色主题

个月前把 ES6 的特性都过了一遍,收获颇丰。现在继续来看看 TypesScript(下文简称为 “TS”)。限于经验,本文一些总结如有不当,欢迎指正。


官网有这样一段描述:

TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.

说的是 TS 是 JS 的超集,并且可以编译成普通的 JS。

而实际上,“超出” 的部分主要就是 “类型系统”。因此可以这样归纳:

TS ≈ ES6 + 类型系统

ES6 是 ES5 转向主流语规格的一个重要升级,顺着这个角度看,TS 让这门语言披上一层类型的外衣,直接演变成一种强类型的语言;从相反角度看,TS 将编程语言们一些主流的特性引入到了 JS 的世界。

平稳过渡

TypeScript 设计巧妙,兼具微软工业化的水准。首先,它仅靠一行命令,就融入到了广大前端人的世界:

npm install -g typescript

然后由你随便挑一个曾编写的 .js 脚本文件(不妨叫做hello.js),不用对内容做任何修改,直接将文件后缀改成 .ts。这样,你就已经完成了一份 TypeScript 脚本的编写!

然后编译它:

tsc hello.ts

OK,你已经平滑过渡到了 TS 的世界。就是这么简单!

当然这只是“一小步”,似乎后边还有无数的坑要填。不用担心,TS 已经填平了大部分的坑!

比如,时下最流行的 gulp,webpake 工具,只需做一些简单的配置,就能接引入TypeScript 进行编译;同时为了能与 React 完美融合,TS 引入了与 JSX 类似的 TSX 语法。当然,TS 在 Angular、Vue.js 以及 Node.js 中也是畅通的…

坑都填平了,大家过渡起来自然顺心顺手。

基本类型

与 ES6 一脉相承的,同时也接轨大部分强类型语言,TS 的类型大概有这些:

1),Number、Boolean、String、Null 、undefined、Symbol

2), Array、Function、Object

3),Tuple、enum、Void、 Never、Any

TS 作为 JS 的一个超集,在 JS 的基础上扩展了一些非常有用的类型。第 3)中的类型就是从一些强类型语言引入的类型。

为了由简入繁,不妨将这些类型划分为:基本类型、复合类型。复合类型 一般由 基本类型 构成。以下将渐进式的对 TS 的这些类型进行了解。

如何做类型声明?

强类型语言都有一套类型声明的语法规则,TS 也不例外。TS 采用类型注释的写法,像这样将一个带冒号的注释,置于声明变量名之后,就构成了 TS 类型声明的语法。

let str : string = 'hello typescript';

JAVA 的写法是相反的,但无实质差别:

String str = 'hello java';

这样的注释如同一种补充说明,后文将简称它为 “冒号注释”,熟悉书写规则,有利于快速进入到 TS 的代码世界。

实际上,ES6 有一种属性描述对象,是通过Object.getOwnPropertyDescriptor(obj, key) 获取的。

let obj = {
 set name(val) {}}Object.getOwnPropertyDescriptor(obj, 'name');// {// configurable: true// enumerable: true// get: undefined// set: ƒ a(val)// }

如果将 setter 类型的 name 方法适当改写,我们甚至可以实现 obj.name 赋值的类型检查功能,也非常有意思。

同样的,冒号注释 : string 也可以理解为对一个 str 变量的描述。凭借这个注释的描述,TS 的类型编译器就能进行类型检查了。

建立了类型的认知后,继续跑马圈地,巩固认知。其中,Function、 Never、Any 规则稍显复杂,但也没有什么特别的,留后细说。

简单的基本类型

// boolean 类型let isBool: boolean = 1 < 5;// string 类型let str: string = 'hello world';// number 类型let num: number = 123;// void 类型let unusable: void = undefined;// undefined 类型let u: undefined = undefined;// null 类型let n: null = null;//Symbol 类型// 类型 symbol 小写也能编译通过let sym: Symbol = Symbol('hello');

简单的复合类型:

// object 类型let obj : object = {};let arrObj : object = [];let funcObj : object = () => {};// array 类型let arrNum : number[] = [1, 2, 3]let arrStr : string[] = ['a', 'b', 'c']let arrObj : object[] = [{}];// 元组 类型let tup : [number, string] = [1, 'hello'];// 枚举类型enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat};

可谓一览无余,类型的语法就是冒号注释,仅凭这一条,60~70% 的情况你都无需担心自己的类型书写有误。

一个灵活的子类型

但 JS 的动态类型太灵活了,null 和 undefined 的相似性, Array、Function 和 Object的纠缠不清的关系,仅凭一招恐怕还很难驾驭的住 JS 的 “多动症” 般的类型。比如:

// boolean 类型接收这样的赋值let isBool_n: boolean = null;let isBool_u: boolean = undefined;// void 类型接收这样的赋值let unusable: void = undefined;unusable = null;// Symbol 类型接收这样的赋值let sym: Symbol = Symbol('hello');sym = null;sym = undefined;// object 类型接收这样的赋值let obj : object = {};obj = null;obj = undefined;

它们都能编译通过。但是 null 不属于 boolean 类型,undefined也并不属于object 类型,为什么能通过类型检查?

事实上,undefined 和 null 是所有类型的子类型。也就是说,它们俩可以作为值赋给任何类型的变量。甚至,它们俩可以互相赋值给对方。

// undefined 类型let u: undefined = null;// null 类型let n: null = undefined;

有了这一条规则,就能解释一些 “复合类型” 中遇到的问题:

let arrNum: number[] = [];let arrStr: string[] = [];// undefined 也属于 number 类型let arrNum: number[] = [undefined];// undefined 也属于 object 类型let obj : object = undefined;

有了这条规则,我们可以大胆的写 TS 的类型声明了。

但太过放开的规则——本文姑且称之为 “混杂模式”,又似乎一下子让 TS 退回到了 JS 的动态类型的原始状态了,让习惯了强类型的同学容易懵掉,也让从 JS 转 TS 的同学体会不到强类型的好处。

画条界限

好在,TS 设计了一套巧妙的类型系统,犹如给 JS 披上 了一层强大的盔甲。

TS 在 “混杂模式” 下,可能存在这样的风险,就是:编译正确,运行出错。比如:

// 无意获得一个 undefined 作为初始值let init_name = undefined;let nameList: string[] = [init_name];console.log(nameList[0].split('_')); // 运行报错

在非 “严格模式” 下,上述 TS 代码编译无误,但是真正拿到页面去运行编译结果时,出现错误。

那怎么办呢?要相信 TS 强大的类型系统,只需一项配置,就能将编译切换成 “严格模式”:

// 在配置文件 tsconfig.json 中增加一项"compilerOptions": {
 // ...
 "strictNullChecks": true
 },

再次执行编译,就会出现错误提示信息:

error TS2322: Type 'undefined[]' is not assignable to type 'string[]'.

TypeScript 官方教程鼓励尽可能地使用 --strictNullChecks,因此这里也强烈建议配置该属性再进行编译,这样能很好的发挥 TS 类型检查的作用。

网开一面和漏网之鱼

TS 编译通过指的是类型检查符合类型系统的规则,运行 OK 则是编译后的 JS 本身执行无误。编译通过,不等于运行OK,即使在 “严格模式” 下也是这样的,所以千万别以为编译通过了就完事了。

以 Any 类型为例,在 --strictNullChecks 模式下:

// TS 代码let anyThing: any = 'hello';console.log(anyThing.myName);// 编译后的 ES6let anyThing = 'hello';console.log(anyThing.setName('world'));

很显然,编译后的 anyThing.setName('world') 会运行报错。

当然, Any 类型略有点特殊,因为它可以当做是 TS 平滑退化到 JS 的一个类型,官网教程也有这样解说:

在对现有代码进行改写的时候,any类型是十分有用的,它允许你在编译时可选择地包含或移除类型检查。

那问题又回来了,是否除了 Any 类型,其他编译OK,代码就运行无错呢?鉴于笔者正在入门,经验有限,不敢给这个结论。但无论如何,类型检查是可以排除大部分错误的。

最后,编译的时候,尽量选择编译成 ES6 (前提是项目是用 ES6 写的)。配置是:

"compilerOptions": {
 "target": "es6" // "es5"}

只有一条规则

TS “冒号注释” ——就这一条规则,贯穿始终。在函数的类型声明中,继续来巩固这条规则的写法。

类型声明只对变量负责,对于函数,需考察输入——函数参数(也是变量)、输出——函数返回值两个要素。

因为函数的特殊结构,所有 “冒号注释” 规则的写法要特别了解下:

// 声明函数function add(x: number, y: number): number {
 return x + y;}// 函数直接量let myAdd = function(x: number, y: number): number { return x + y; };

可以看到,参数的 “冒号注释” 和一般变量没有任何差别。倒是函数输出类型注释有点特别——试想,: number 紧随函数名之后或者 function 关键字之后,是不是容易被误解为函数名的一部分?是不是对编译引擎不太友好?从这个角度看,注释置于) 之后最为合理。

对了,一个疑问一直从头保留到现在:要是一个变量是 function 类型,那类型注释怎么写,又不能拿 function 关键字去做类型注释?

let myAdd: (x: number, y: number) => number =
 function(x: number, y: number): number { return x + y; };

其中等号前边的 : (x: number, y: number) => number 就代表了函数类型。它仍然在结构上符合 “冒号注释” 的规则,只不过冒号后边是一串表达式。这样的结构有点像 Python 中的推导式的概念。

好了,补上这一块重要的缺漏,本文就完成了所有基本类型的类型声明的解释。凭借一条规则,希望在 TS 学习上畅通无阻的敲代码~


作者:https://segmentfault.com/u/webyoung