前言
来源:动力节点_老杜
开发工具
- 选择使用 Vs code 完成前端代码的编写
- 一些必开的设置
- 文件——->打开自动保存
- 查看——>自动换行
- 快捷键:
- ! + 回车
- F5 启动程序,shfit+F5 暂停程序
- emmet语法 可以看下手册 可以快速写代码
- tr>th + 回车 就是tr里面嵌套 th 标签
- th*3 + 回车 就是生成三组 th 标签
- div#test + 回车 快速生成 id 为 test 的标签
- div.test + 回车 快速生成 class 为 test 的标签
- 快捷键大全
- 好用的插件
- Live Server
- 作用:就是安装这个插件后,可以不用自动刷新页面,保存好源代码后,自动在浏览器刷新,无法预览图片
- Live Server
- 调试
如果要使用VScode工具的调试,需要在
vscode文件夹——->launch.json 里面配置文件的路径
启动一次调试,需要关闭后在能启动下一次,否则会报错
HTML
超文本链接和表单是重中之重
浏览器的F12面板 是用来调试前端程序错误的
基本概念
1、系统结构:
B/S架构:(以后主要走的方向是这个。)**Browser / Server (浏览器/服务器的交互形式。)**Browser支持哪些语言:HTML CSS JavaScript**写HTML CSS JavaScript代码的这波人职位叫做:WEB前端开发工程师。**(Java程序员目前来看也需要会一些前端的东西。)前端页面上的图片需要UI设计师完成。(PS对java程序员来说没有太高的要求。)S是服务器端Server,Server端的语言很多:C C++ Java python.....(我们主要是使用Java语言完成服务器端的开发)**B/S架构的系统有什么优点和缺点?**
优点:升级方便,只升级服务器端代码即可。维护成本低。
缺点:速度慢、体验不好、界面不炫酷
企业内部的解决方案都是采用B/S架构的系统,因为企业内部办公需要的一些系统,不需要炫酷,不需要特别好的用户体验,只要能做数据 的增删改查即可。并且企业内部更注重维护的成本。B/S架构的系统有哪些代表?京东百度天猫....**C/S架构**
Client / Server (客户端/服务器端的交互形式。)
缺点:升级麻烦,维护成本较高。
优点:速度快,体验好,界面炫酷。(娱乐型的系统多数是C/S架构的。)
常见的C/S架构的系统:微信支付宝....
2、什么是HTML?怎么开发HTML?怎么运行HTML?
* **HTML: Hyper Text Markup Language (超文本标记语言)****由大量的标签组成,每一个标签都有开始标签和结束标签。**<标签><标签><标签 属性名="属性值" 属性名="属性值"></标签></标签></标签>超文本: 流媒体、图片、声音、视频....* HTML开发的时候使用普通的文本编辑器就行,创建的文件扩展名是.html或者.htmHTML也有专业的开发工具,例如:DreamWeaver、HBuilder.....* 直接采用浏览器打开HTML文件就是运行。
3、HTML是谁制定的?
W3C:世界万维网联盟
W3C制定了HTML的规范,每个浏览器生产厂家都会遵守规范。HTML程序员也会按照这个规范去写代码。
HTML规范目前最高的版本是:HTML5.0,简称H5.
我们这里学习HTML4.0(主要是学习一下HTML的基础用法。)
W3C制定了很多规范:HTML/XML/http协议/https协议......为了方便中国web前端程序员的开发,提供大量的帮助文档。为开发提供方便。w3school:先出现的,和W3C没有关系w3cschool:后出现的,和W3C没有关系
基础知识
- windows操作系统中,系统默认以gbk的方式打开html页面的
基本标签
<html><head><meta charset="gbk" /><title>基本标签</title></head><body><!--段落标记--><p>《黛玉葬花》是文学名著《红楼梦》中的经典片段。林黛玉最怜惜花,觉得花落以后埋在土里最干净,说明她对美有独特的见解。她写了葬花词,以花比喻自己,在《红楼梦》中是最美丽的诗歌之一。贾宝玉和林黛玉在葬花的时候有一段对话,成为《红楼梦》中一场情人之间解除误会的绝唱。</p><p>《黛玉葬花》是文学名著《红楼梦》中的经典片段。林黛玉最怜惜花,觉得花落以后埋在土里最干净,说明她对美有独特的见解。她写了葬花词,以花比喻自己,在《红楼梦》中是最美丽的诗歌之一。贾宝玉和林黛玉在葬花的时候有一段对话,成为《红楼梦》中一场情人之间解除误会的绝唱。《黛玉葬花》是文学名著《红楼梦》中的经典片段。林黛玉最怜惜花,觉得花落以后埋在土里最干净,说明她对美有独特的见解。她写了葬花词,以花比喻自己,在《红楼梦》中是最美丽的诗歌之一。贾宝玉和林黛玉在葬花的时候有一段对话,成为《红楼梦》中一场情人之间解除误会的绝唱。《黛玉葬花》是文学名著《红楼梦》中的经典片段。林黛玉最怜惜花,觉得花落以后埋在土里最干净,说明她对美有独特的见解。她写了葬花词,以花比喻自己,在《红楼梦》中是最美丽的诗歌之一。贾宝玉和林黛玉在葬花的时候有一段对话,成为《红楼梦》中一场情人之间解除误会的绝唱。《黛玉葬花》是文学名著《红楼梦》中的经典片段。林黛玉最怜惜花,觉得花落以后埋在土里最干净,说明她对美有独特的见解。她写了葬花词,以花比喻自己,在《红楼梦》中是最美丽的诗歌之一。贾宝玉和林黛玉在葬花的时候有一段对话,成为《红楼梦》中一场情人之间解除误会的绝唱。</p><!--标题字--><h1>标题字</h1><h2>标题字</h2><h3>标题字</h3><h4>标题字</h4><h5>标题字</h5><h6>标题字</h6><!--换行标记-->helloworld!<!--长了一只眼睛,独目标记-->hello<br> world!<!--水平线,独目标签--><hr><!--color是一个属性,用来指定颜色值--><!--color是属性的名字,red是属性的值--><hr color="red"><!--HTML中的字符串可以使用单引号,也可以使用双引号--><hr color='red'><!--HTML的语法很松散,不严格,去掉单引号双引号也行!--><hr color=green ><!--HTML不区分大小写!--><HR><!--预留格式--><!--保留格式,在HTML源码上是什么格式,到网页上还是这个格式,不变。--><pre>for(int i = 0; i < 100; i++){System.out.println("i = " + i);}</pre><!--粗体字--><b>粗体字</b><!--斜体字--><i>斜体字</i><ins>插入字</ins><del>删除字</del>10<sup>2</sup>m<sub>2</sub><!--font字体标签--><!--color是字体颜色,size是字号--><font color="red" size="12">hello world!</font><br><br><br><br><br><br><br><br><br><br></body></HTML>
实体符号
!-- 凡是HTML页面中第一行是以下代码的表示该页面是一个HTML5页面:H5。 --><!DOCTYPE html><html><head><!-- 这个是告诉浏览器采用哪一种字符编码方式打开该页面。一般这个编码方式要和文件的编码方式相同,不然会乱码。 --><!-- windows操作系统的浏览器在没有指定任何编码方式的时候,浏览器默认采用GBK的简体中文的方式打开,这是因为我们的windows操作系统是简体中文环境。 --><!-- 而我们程序员,一般工作区当中文件的编码方式都是UTF-8,因为unicode更加通用。 --><!-- 当前这个文件就是utf8的编码方式,如果不写以下代码,浏览器会采用GBK的方式打开,就会出现乱码。 --><meta charset="utf-8"><title>实体符号</title></head><body><!-- 空格 --><!-- 这是一个空格。属于实体符号! -->a bc<br>a bc<br><!-- 小于号呢 -->b<a>c<br><!-- < 这是小于号 --><!-- > 这是大于号 -->b<a>c</body></html>
表格
<html><head><meta charset="utf-8"><title>HTML表格</title></head><body><!-- 3行3列的table --><!-- border用来设置边框的宽度,1px表示1像素 --><!-- <table border="1px" width="300px" height="200px"> --><!-- 还可以写成百分比的方式。 --><table border="1px" width="50%" height="200px" align="center"><!-- 第一行 --><tr><!-- 第一个单元格 --><td>1</td><td>2</td><td>3</td></tr><!-- 第二行 --><tr align="center"><!-- 第一个单元格 --><td>1</td><td>2</td><td>3</td></tr><tr><td>1</td><td>2</td><td align="center">3</td></tr></table></body></html>
表格中的单元格的合并
<html><head><meta charset="utf-8"><title>表格单元格的合并</title></head><body><table width="50%" border="1px"><tr><td>1</td><!-- colspan表示列合并,合并2个。 --><td colspan="2">xy</td><!-- <td>y</td> --></tr><tr><td>1</td><td>1</td><!-- rowspan表示行合并,2表示合并两个。 --><td rowspan="2">KINGford</td></tr><tr><td>1</td><td>1</td><!-- <td>ford</td> --></tr></table></body></html>
表格_th标签
<html><head><meta charset="utf-8"><title>th标签</title></head><body><table border="1px" width="50%"><tr><!-- <td>员工编号</td><td>员工姓名</td><td>员工薪资</td> --><!-- th可以代替td做单元格,th中的内容会自动加粗,会自动居中。 --><th>员工编号</th><th>员工姓名</th><th>员工薪资</th></tr><tr><td>7369</td><td>SMITH</td><td>800.0</td></tr><tr><td>7370</td><td>KING</td><td>8000.0</td></tr></table></body></html>
表格_thead-tbody-tfoot
<!-- 一个table可以被thead tbody tfoot分隔为三部分。 --><!-- 这个语法主要是为了后期javascript提供方便。 --><table border="1px" width="50%"><thead><tr><th>员工编号</th><th>员工姓名</th><th>员工薪资</th></tr></thead><tbody><tr><td>7369</td><td>SMITH</td><td>800.0</td></tr><tr><td>7370</td><td>KING</td><td>8000.0</td></tr></tbody><tfoot><tr><td>x</td><td>y</td><td>z</td></tr></tfoot></table>
背景颜色和背景图片
<html><head><meta charset="utf-8"><title>背景颜色和背景图片</title></head><!-- body标签的bgcolor属性指定背景颜色。 --><!-- <body bgcolor="red"> --><!-- body标签的background属性指定背景图片。 --><body background="images/dyzh.jpg"></body></html>
图片
<!-- 背景图片 --><body background="images/dyzh.jpg"><!-- 这个图片是网页中的一个元素 --><!-- <img src="images/bd.png"></img> --><!-- 开始标签和结束标签之间没有内容的话,可以直接把结束标签删除掉,开始标签末尾添加 / --><img src="images/bd.png"/><!-- img标签的属性有哪些呢? --><!-- src属性:用来指定图片的路径 --><!-- width属性:用来指定图片的宽度,高度会等比例缩放! 不要手动设置高度。--><!-- title属性用来设置鼠标悬停时的提示信息。 --><img src="images/bd.png" width="200px" title="点击我跳转到百度哦!" /><!--alt用来指定当图片加载失败的时候的提示信息 --><img src="im/bd.png" alt="图片找不到了哦!" >
超链接
<body><!-- 链接到百度 --><!-- href 属性表示:hot references,用来指定链接的路径 --><a href="http://www.baidu.com">百度</a><br><!-- 链接路径可以是一个网络中的路径,也可以是一个本地的路径! --><!-- 超链接的特点:鼠标停留在超链接上自动变成小手,超链接自动添加下划线! --><a href="004-表格.html">链接到本地的表格!</a><br><a href="http://www.jd.com">京东商城</a><br><a href="http://www.126.com">126邮箱</a><br><a href="https://map.baidu.com">百度地图</a><!-- 图片可以做热链接吗?可以 --><a href="https://map.baidu.com"><!-- 标签嵌套使用! --><img src="images/bd.png" width="200px" title="点击我跳转到百度地图哦!" /></a><hr><!-- 关于超链接的target属性 --><!-- target属性用来设置,最终打开窗口的位置 --><!--target :_blank:新窗口_self:当前窗口_parent:当前窗口的父窗口_top:当前窗口的顶级窗口--><a href="http://www.baidu.com" target="_self">百度(当前窗口)</a><a href="http://www.baidu.com" target="_blank">百度(新窗口)</a><a href="http://www.baidu.com">百度(默认是怎样的?当前窗口)</a><hr><!-- 一个窗口中的内部窗口 --><iframe src="http://www.baidu.com"></iframe>
列表
<body><!-- 无序列表 --><ul type="circle"><!-- 列表项 --><li>中国<ul type="square"><li>北京<ul type="disc"><li>东城区</li><li>西城区</li><li>海淀区</li><li>朝阳区</li></ul></li><li>上海</li><li>天津</li><li>重庆</li></ul></li><li>美国</li><li>日本</li><li>俄国</li></ul><!-- 有序列表 --><ol type="A"><li>水果<ol type="a"><li>香蕉</li><li>哈密瓜</li><li>菠萝</li><li>苹果</li></ol></li><li>蔬菜</li><li>茶<ol type="I"><li>绿茶<ol type="1"><li>西红柿茶</li><li>龙井</li><li>毛尖</li></ol></li><li>红茶</li></ol></li></ol></body>
表单
1、什么是表单有什么用?
发送请求,并且携带数据给服务器。
表单和超链接有共同的特征,就是都可以向服务器发送请求,只不过超链接是用户直接点击发送请求,不能填写数据。
而用户点击表单提交的时候,不但可以发送请求,而且请求中还可以携带输入的数据。
**表单最主要的作用就是:收集用户的信息。****表单对应的英语单词是:form**
2、怎么定义一个表单对象呢?语法格式
表单项1:
表单项2:
另外要注意:一个网页上可以有多个表单对象。
3、form标签中有一个action属性,这个属性和超链接的href相同,都需要填写url。
- 011
<body><!-- 超链接--><a href="http://www.baidu.com">百度</a><br><br><br><!-- 表单--><form action="http://www.baidu.com"><!-- 按钮,提交表单的按钮,只要点击这个提交按钮,就发送请求了! --><!-- 所有能够提交表单的按钮,type必须是submit,不能随便写 --><!-- <input type="submit"/> --><!-- 设置按钮上显示的文本 --><!-- vaule 是按钮名称--><input type="submit" value="百度"/><!-- button是一个普通按钮,能提交表单吗?不能。 --><!-- <input type="button" value="百度"/> --></form>form<!-- submit提交按钮放在form外面也是不行的!--><input type="submit" value="百度(外)"/></body>
- 012
画一个登录表单
<!-- action路径随便写了 --><!--[http://192.168.145.2:8080/crm/login](http://192.168.145.2:8080/crm/login)协议:http协议访问的服务器IP地址是什么?192.168.145.2访问这个服务器上的那个软件:8080端口对应一个服务。/crm/login:是这个服务器上的某个资源名!(它可能是一段处理登录的java程序!!!)重点*****重点*****重点*****重点*****重点*****重点*****重点*****重点*****重点*******表单最终提交的时候,表单项的name属性非常重要,有name的才会提交。没有name是不会提交的。**并且浏览器向服务器提交数据的格式是?**url?name=value&name=value&name=value&name=value&name=value**
以上的提交数据的格式,是W3C指定的格式。所有浏览器都是这样的。
以下表单提交数据的时候,格式是这样的:[http://192.168.145.2:8080/crm/login?x=zhangsan&y=111](http://192.168.145.2:8080/crm/login?x=zhangsan&y=111)这个格式非常重要,必须背会,所有浏览器都是这样提交数据的: name=value&name=value&name=value类似map:key value---------------------------x zhangsany 111
<body><form action="http://192.168.145.2:8080/crm/login"><!-- input是输入域,type不同,展示样式不同。text表示文本框 -->用户名:<input type="text" name="x"/><!-- 文本框和密码框的value实际上是不需要程序员提供的,是用户输入的! --><br><!-- type="password"表示密码框 -->密码:<input type="password" name="y" /><br><!-- 提交表单的按钮 --><input type="submit" value="登录"/></form></body>
- 013
- name有,就能提交,没有name属性就不能提交。
- 提交格式:name=value&name=value&name=value
- 表单中,如果有一些项用户没有填写,默认提交的就是空字符串
<body><form action="http://localhost:80/crm/register">用户名 <input type="text" name="username" /><!-- value不需要程序员提供 --><br>密码 <input type="password" name="userpwd" /><!-- value不需要程序员提供 --><br>性别 <!-- 最终提交给服务器的数据是:sex=1 或者 sex=0 --><!-- 同一组的单选按钮,name是需要一致的,这样才可以做到单选的效果 --><!-- checked 表示默认选中此项 --><input type="radio" name="sex" value="1" checked />男 <!-- value需要程序员提供 --><input type="radio" name="sex" value="0"/>女<br>兴趣<!-- 复选框,同一组的复选框name也是一致的。 --><input type="checkbox" name="aihao" value="smoke"/>抽烟 <!-- value需要程序员提供--><input type="checkbox" name="aihao" value="drink" checked />喝酒<input type="checkbox" name="aihao" value="firehair" checked />烫头<br>学历<!-- 下拉列表 --><select name="xueli"><!-- 假设选中专科,提交的是:xueli=zk --><option value="gz">高中</option><option value="zk">专科</option><option value="bk" selected >本科</option><!-- selected默认选中 --><option value="ss">硕士</option></select><br>简介<!-- 文本域 --><!-- value是用户填写的!--><textarea rows="10" cols="60" name="jianjie"></textarea><br><!-- 提交表单 --><input type="submit" value="注册" /><!-- 这个提交按钮不能有name,不然,这个按钮的value也会提交给服务器。 --><!-- 重置按钮 --><input type="reset" value="重置" /><!-- 普通按钮不能提交 --><input type="button" value="普通按钮" /></form><!-- 不管用! --><input type="reset" value="重置" />
name=vaule&name=vaule&name=vaule 格式详解
下拉列表多选
<body><!-- multiple 表示下拉列表支持多选 --><!-- size是设置下拉列表一次最多显示的条目数量。 --><select name="province" size="3" multiple ><option value ="hebei">河北省</option><option value ="henan">河南省</option><option value ="shandong">山东省</option><option value ="shanxi">山西省</option><option value ="hubei">湖北省</option><option value ="hunan">湖南省</option></select></body>
file控件
<body><!-- 后台java程序使用IO流的方式接收这个文件! --><form action="http://www.baidu.com">文件:<input type="file" /><br><br><br><br><input type="submit" value="文件上传" /></form></body>
hidden控件
<body><!-- hidden隐藏域空间 --><form action="http://127.0.0.1:8080/crm/save" ><!-- 隐藏域 --><!-- 不希望用户在浏览器上看到,但是希望可以将这个数据提交过去! --><input type="hidden" name="usercode" value="11111"/><!-- 提交按钮 --><input type="submit" value="提交" /></form><!-- 最终提交:http://127.0.0.1:8080/crm/save?usercode=11111 --></body>
readonly和disabled
readonly和disabled都是只读的!
http://127.0.0.1:8080/crm/save?orgcode=1111
readonly修饰的表单项可以提交给服务器,但是disabled修饰的不会提交!
<body><form action="http://127.0.0.1:8080/crm/save">机构代码 <input type="text" name="orgcode" value="1111" readonly /><br>用户代码 <input type="text" name="usercode" value="2222" disabled /><br><input type="submit" value="提交" /></form></body>
maxlength属性
<body><!-- 最多输入3个字符 --><input type="text" maxlength="3" /></body>
HTML元素的id属性
1、在HTML中任何一个节点上,都有id属性2、在同一个网页中,id属性是不能重复的。3、id代表了这个节点,id是这个节点的身份证号。4、后期学习了javascript之后,我们要通过javascript对HTML的节点进行增删改,对节点 增 删改的时候,**需要先获取到该节点对象,id属性可以让我们方便的获取到该节点对象。**5、**通过id属性可以很方便的在Javascript中获取到该节点,然后对这个节点进行操作,最终产生网页的动态效果,所以javascript可以让死气沉沉网页活跃起来。**
<body id="mybody"><form id="myform"><input id="username"></form><ul id="myul"><li id="myli"></li></ul></body>
div和span
1、div和span都是图层。(div和span都是盒子)2、什么是图层,有什么用?每一个图层在网页当中都是一个独立的盒子。图层的最主要作用就是:网页布局3、table表格不是可以布局吗?table表格布局有什么缺点:不灵活div和span布局更加灵活。4、每一个div和span左上角的顶点,都有x和y轴的坐标,通过这个坐标可以定位div在网页当中的位置。后面讲CSS的时候,我们可以通过CSS样式进行定位。5、很久以前都是采用table进行布局,现代化的网页都是采用div+span进行布局。6、对于web前端来说,怎么调试程序?**每一个浏览器都内置了调试器,使用快捷键F12,可以调出来调试器。**7、div和span有什么区别?div默认情况下独自占用1行。span不会独占行!
<body><div id="div1">我是一个div!</div>是新的一行吗?<span id="myspan">我是一个span标签!</span><!-- div嵌套--><div id=""><div id=""><div id=""><span id=""></span><span id=""></span></div></div></div></body>
CSS
掌握:看见css要懂,常见的样式要会写
HTML中嵌入CSS样式的第一种方式:内联定义
- 内联定义语法格式?
<标签 style="样式名 : 样式值;样式名 : 样式值;样式名 : 样式值;">
</标签>
**style:风格,样式。**任何一个HTML标签都可以指定style属性。
<body><div id="div1" style="background-color : #CCCC33;width : 300px;height: 300px;position : absolute;top: 100px;left: 100px;border-style : solid;border-color : red;border-width : 1px;"></div></body>
HTML中嵌入CSS样式的第二种方式:定义内部样式块对象
- CSS中常见的选择器包括:最常用的三种选择器。
标签选择器
标签名 {}
作用于改类型的所有标签
id选择器
ID选择器
#id{} 只作用于id这个元素
class选择器
.class {} 样式作用于当前网页中某一类的标签
class属性,任何一个标签都有,class相同的,可以看做是同一类标签。
div{ /* 作用于所有的div元素*/background-color: aqua;width: 100px;height: 100px;border-color: red;border-style: solid;border-width: 10px;}/* ID选择器#id{} 只作用于id这个元素*/#username {width: 400px;height: 30px;border-color: black;border-style: solid;border-width: 1px;}/* 类选择器.class {} 样式作用于当前网页中某一类的标签*/.student {font-size: 12px;color: #FF0000;}</style></head><body><div></div><div></div><div></div><br><br><br><!-- 怎么才能让样式作用于某1个标签,可以使用id选择器 --><input type="text" id="username" /><hr><!-- class属性,任何一个标签都有,class相同的,可以看做是同一类标签。 --><span class="student">文本内容span</span><p class="student">文本内容:段落p标签</p><br><br><br><br><br><br><br><br><br><br><br></body>
HTML中嵌入CSS样式的第三种方式:链入外部样式表文件
<head><meta charset="utf-8"><title>HTML中嵌入CSS样式的第三种方式:链入外部样式表文件</title><!-- 引入外部独立的CSS样式表文件 --><!-- 在web前端开发中,这种方式是最常用的! --><link rel="stylesheet" type="text/css" href="css/1.css"/></head>
隐藏样式
<head><meta charset="utf-8"><title>隐藏样式</title><style type="text/css">#citysOfChina {display: none; /* 隐藏*/}input {display: block; /* 显示*/}ul {/* list-style-type: circle; */list-style-type: none;}ol {/* list-style-type: none; */list-style-type : upper-roman;}</style></head>
文本装饰样式
<head><meta charset="utf-8"><title>文本装饰样式</title><style type="text/css">#baidu {text-decoration : underline;/* text-decoration : overline; *//* text-decoration : line-through; *//* text-decoration : blink; */}#baidu2 {text-decoration: none;}</style></head><body><div id="baidu">百度</div><a id="baidu2" href="http://www.baidu.com">百度</a></body>
设置鼠标的悬停效果
- :hover 是专门用来设置鼠标悬停效果的
- :hover在使用的时候,这个冒号两边都是不允许有空格的
<head><meta charset="utf-8"><title>设置鼠标的悬停效果</title><style type="text/css">/* :hover 是专门用来设置鼠标悬停效果的 */span:hover {color: red;font-size: 20px;}/* 注意::hover在使用的时候,这个冒号两边都是不允许有空格的。 */input:hover {border-color: black;}</style></head><body><span>我是一个段落</span><span>我是一个段落</span><input type="text" /></body>
内边距和外边距
<head><meta charset="utf-8"><title>内边距和外边距</title><style type="text/css">#div1 {width: 300px;height: 300px;background-color: #00FFFF;border: solid 1px red;/* 内补丁 */padding-left: 20px;}#div2 {width: 100px;height: 100px;background-color: black;border: solid 1px red;/* 在div2这个节点顶部top打一个补丁,这个补丁离top 10px *//* 外补丁 */margin-top : 10px;}</style></head><body><!-- 盒子套盒子 --><!-- 如果盒子套盒子,需要定位的话,可以使用外补丁和内补丁。 --><div id="div1"><div id="div2"></div></div></body>
float浮动效果
<head><meta charset="utf-8"><title>float浮动效果</title><style type="text/css">img {float: right;}</style></head>
定位样式
<head><meta charset="utf-8"><title>定位样式position</title><style type="text/css">#div1 {background-color: red;border: solid 1px black;width: 100px;height: 100px;/* 定位 */position: absolute;top: 100px;left: 100px;}#baidu:hover {/* 变成小手 */cursor: pointer ; /* 尽量不要使用hand,有浏览器兼容问题!*/text-decoration: underline;color: blue;}</style></head>
JAVAScript
HTML中嵌入JS代码的第一种方式:行间事件
笔记:
1、要实现的功能:
用户点击以下按钮,弹出消息框。
2、JS是一门事件驱动型的编程语言,依靠事件去驱动,然后执行对应的程序。
在JS中有很多事件,其中有一个事件叫做:鼠标单击,单词:click。并且任何
事件都会对应一个事件句柄叫做:onclick。【注意:事件和事件句柄的区别是:
事件句柄是在事件单词前添加一个on。】,而事件句柄是以HTML标签的属性存在
的。
3、onclick=”js代码”,执行原理是什么?
页面打开的时候,js代码并不会执行,只是把这段JS代码注册到按钮的click事件上了。
等这个按钮发生click事件之后,注册在onclick后面的js代码会被浏览器自动调用。
4、怎么使用JS代码弹出消息框?
在JS中有一个内置的对象叫做window,全部小写,可以直接拿来使用,window代表的是浏览器对象。
window对象有一个函数叫做:alert,用法是:window.alert(“消息”);这样就可以弹窗了。
5、JS中的字符串可以使用双引号,也可以使用单引号。
6、JS中的一条语句结束之后可以使用分号“;”,也可以不用。
7 事件和事件句柄的区别,多了一个on
画图理解:
代码:
<html><head><title>HTML中嵌入JS代码的第一种方式</title></head><body><!----><input type="button" value="hello" onclick="window.alert('hello js')"/><input type="button" value="hello" onclick='window.alert("hello jscode")'/><input type="button" value="hello" onclick="window.alert('hello zhangsan')window.alert('hello lis')window.alert('hello wangwu')"/><!-- window. 可以省略。--><input type="button" value="hello" onclick="alert('hello zhangsan')alert('hello lis')alert('hello wangwu')"/><input type="button" value="hello" onclick="alert('hello zhangsan');alert('hello lis');alert('hello wangwu');"/></body></html>
在HTML中嵌入JS代码的第二种方式:脚本块的方式
<html><head><meta charset="utf-8"><title>在HTML中嵌入JS代码的第二种方式:脚本块的方式</title></head><body><!-- 这个按钮会先被加载到浏览器内存。 --><input type="button" value="按钮1" /><!-- 脚本块 --><!-- 一个页面中脚本块可以出现多个! --><script type="text/javascript">/* 在这里直接编写JS代码,这些JS代码在页面打开的时候自上而下的顺序依次逐行执行! *///alert("hello world"); // 单行注释alert("hello zhangsan");alert("hello lisi");/*多行注释*/</script><!-- 最后加载这个按钮2 --><input type="button" value="按钮2" /></body></html><script type="text/javascript">alert("page end!")</script>
在HTML中嵌入JS的第三种方式:引入外部独立的JS文件
<html><head><meta charset="utf-8"><title>在HTML中嵌入JS的第三种方式:引入外部独立的JS文件</title><!-- 引入外部独立的CSS文件。这个标签link中属性是href --><link rel="stylesheet" type="text/css" href=""/></head><body><!-- 引入外部独立的js文件 --><!-- script标签引入js文件的时候,是src属性,不是href。 --><script type="text/javascript" src="js/1.js"></script><!-- 引入第二次,这个操作没有意义,测试结果:只要引入一次JS文件,JS文件中的代码就会全部执行一遍 --><script type="text/javascript" src="js/1.js"></script><script type="text/javascript" src="js/1.js">//alert("hello world!~~~~~"); // 这里的代码不会执行!</script><!-- 单独的脚本块 --><script type="text/javascript">alert("hello world!%%%%%%%%");</script></body></html>
关于前端的各种注释:
<html><head><meta charset="utf-8"><title>关于各种注释</title><style type="text/css">/* CSS的注释 */</style></head><body><!-- 这是HTML的注释 --><script type="text/javascript">/* 这是javascript注释,多行 */// 这是javascript注释,单行</script></body></html>
标识符和关键字
<html><head><meta charset="utf-8"><title>标识符和关键字</title></head><body><script type="text/javascript">/* 标识符命名规则和命名规范按照java那一套来就行! *//*以下这段代码是JS的for循环,找出其中的关键字和标识符?关键字:var、for标识符:i、alert标识符命名规则:标识符只能由数字、字母、下划线、美元符号组成,不能含有其它特殊符号标识符不能以数字开始标识符严格区分大小写关键字不能做标识符标识符理论上没有长度限制标识符命名规范?.....*/for(var i = 0; i < 10; i++){alert("i = " + i)}</script></body></html>
变量
<html><head><meta charset="utf-8"><title>JS的变量</title></head><body><script type="text/javascript">/*回顾Java中的变量?怎么声明?int i;double d;String s;怎么赋值?i = 100;d = 3.14;s = "abc";一行上能声明多个变量吗?int a, b, c = 300;a b c都是int类型。a和b没有赋值。c赋值300重点:Java语言是一种强类型语言,有编译阶段,属于编译型语言。Java语言在编译阶段确定变量的数据类型,也就是说程序还没有运行呢,变量的数据类型就已经确定了,并且该变量的数据类型在这一生中,永远不可变。int x = 1200;【x = true; java的编译器会报错。不让这样做。语法不对!】double d = x;这行代码表示x的变量中保存的值1200给d变量x变量还是int类型,d变量是double类型。一生不变。JS的变量?怎么声明?var 变量名;var i;怎么赋值?变量名 = 值;i = 100;一行上能声明多个变量吗?var a, b, c = 300;声明3个变量,a b c,并且c赋值300,其中a和b变量没有赋值,系统默认赋值undefinedundefined 在JS中一个具体的值,这个值就是 undefined重点:JS语言是一种弱类型语言,没有编译阶段,直接浏览器打开解释执行,在JS中声明变量时不需要指定变量的数据类型,程序在运行过程当中,赋什么类型的值,变量就是什么数据类型,并且变量的数据类型是可变的。var i;i = 100; 到这里i是整数型i = false; 到这里i就是布尔类型了i = true;i = 3.14;i = new Object();*/var i;alert(i) // 变量只声明没有赋值,系统默认赋值undefined, 在JS当中undefined是一个具体存在的值.var x = "undefined";alert(x) // "undefined"这个不是undefined,它是一个字符串.// 声明时,同时赋值var k = 100;alert(k + 1) // 101k = false;alert(k);k = "abc";alert(k)// 一行上可以声明多个变量//var是一个关键字,就是用来声明变量的,variables单词的前3个字母.var a, b, c = 100;alert(a) // undefinedalert(b) // undefinedalert(c) // 100</script></body></html>
函数初步(一)
1.笔记:
回顾Java中的方法:[修饰符列表] 返回值类型 方法名(形式参数列表){方法体;}例如:public static int sum(int a,int b){return a + b;}JavaScript当中的函数:函数定义的语法格式是什么?function 函数名(形式参数列表){函数体;}例如:function sum(a, b){return a + b;}函数名:sum形式参数列表是:a和b (a和b都是变量名!)JS中的函数返回值类型是不需要指定的,因为可以返回任何类型的数据。没有限制。关于JS的的调试?首选方案是:alert(),在程序的某个位置先使用alert弹出某个变量的值,看看是否是你需要的。通过alert可以调试JS代码。另外一种方案是:采用浏览器自带的调试插件,F12F12这个插件中比较重要的面板:控制台查看器网络掌握以上三个面板!!!!!!!!!!!!
<html><head><meta charset="utf-8"><title>函数初步</title></head><body><script type="text/javascript">//alert(122222);*//* function sum(a, b){} */// 函数必须调用才会执行.function sum(x, y){alert(x + "," + y);//alert("sum函数执行了!");}//这一切都是因为js是一门弱类型语言!sum("abc", false);// 调用sum函数sum();// 调用sum函数sum(1);// 调用sum函数sum(1,2);// 调用sum函数sum(1,2,3);/* JS的函数还有另一种声明方式?*//* function mysum(a, b){} *///效果相同mysum = function(a, b){return a + b; //返回计算结果!}// 调用函数var result = mysum(10, 20);alert(result)//定义一个函数function sayHello(username){alert("欢迎" + username + "光临!")}</script><!-- 在事件句柄当中调用sayHello函数 --><input type="button" value="hello" onclick="sayHello('李四')" /></body></html>
函数初步(二)
<html><head><meta charset="utf-8"><title>函数初步</title></head><body><script type="text/javascript">// 这里也可以调用sayHello()函数.//sayHello();// 函数必须手动调用才会执行!// 在JS当中函数声明的优先级比较高,打开网页的时候,网页中所有的函数先进行声明.function sayHello(){alert("hello world!")}// 这行代码暴露在script标签当中,在页面打开的时候遵循自上而下的顺序依次逐行执行!//sayHello();//再调用一次//sayHello();</script><input type="button" value="hello" onclick="sayHello() "/></body></html>
局部变量和全局变量
- 笔记
全局变量:
在函数体之外声明的变量,叫做全局变量。
全局变量在浏览器打开的时候分配空间,直到浏览器关闭的时候才会销毁。
局部变量:在函数体当中声明的变量,叫做局部变量。局部变量在函数被调用的时候分配空间,函数执行结束之后,内存释放。**javascript也是遵守就近原则的。**变量声明了,但是没有手动赋值,系统默认赋值undefined。变量没有声明,直接访问,这个时候会报错。(用F12可以查看控制台的错误信息!)在javascript当中,如果一个变量声明的时候没有使用var关键字的话,这个变量不管是在哪里声明的,都是全局变量。这种全局变量在声明的时候必须手动赋值,不能采用系统默认值。
- 代码
// 全局变量var username = "zhangsan";// 定义函数function sayHello(){// 局部变量var username = "lisi";alert("welcome, " + username); //就近原则(这是任何一个编程语言都具备的!)// 局部变量var i = 100;}
JS中的函数可以重载吗
- 在JS中函数是不能重载的,也不存在重载机制
- JS中的函数只要出现同名函数,之前的函数就消失了
- 注意在JS中编写函数名的时候,谨慎一些,以防将其他函数干掉!
JS的数据类型
关于JS的数据类型?
1、JS中声明变量不需要指定变量数据类型呀,为什么还要学习数据类型呢?例如:var i = 100; var d = 3.14;**在JS中学习数据类型也不是为了声明变量,是为了理解JS程序的底层原理。**我们起码要知道100是什么类型,3.14是什么类型,怎么存储的....2、**ES6之前JS的数据类型包括6种:**UndefinedNumberNullBooleanStringObject其中:**Undefined、Number、String、Boolean、Null都属于原始类型(或者叫做基本数据类型)**其中:**Object属于引用数据类型(或者叫做对象类型)**3、在ES6之后引入了其它新的类型,知道就行:SymbolBigInt注意:ES6之后是8种类型。ES6之前是6种类型。
typeof运算符
**typeof运算符**(非常重要*****)typeof运算符可以在JS代码运行过程当中,动态的获取变量的数据类型。** typeof运算符的语法格式:typeof 变量名**typeof运算符的运算结果是以下6个字符串之一:** "undefined"**
“number”
“string”
“boolean”
“object”
“function”
并且以上6个字符串都是全部小写的!
5、在JS中判断两个字符串是否相等,应该使用“==”,JS中没有equals函数!!!6、关于JS的比较官方的参考文档?https://developer.mozilla.org/zh-CN/docs/Web/APIWeb API 接口参考
Undefined数据类型
Undefined类型:
1、只有一个值,它的值就是:undefined
2、当一个变量声明之后没有手动赋值,系统默认赋值undefined
3、Undefined类型属于原始类型。
Null类型
Null类型
1、Null类型也是属于原始类型。
2、Null类型只有1个值:null
3、注意: typeof null 运算结果是:”object”
在控制台输出
相当于Java中的system.out.println
console.log(typeof i) // "object"
Number类型
Number类型
1、Number类型属于原始类型。
2、Number类型都有哪些值?
-1
0
1
2
3
3.14
2.0
NaN
Infinity
….
3、NaN?
Not a Number,表示不是一个数字。
但NaN一个值,它属于Number类型。
4、什么情况下结果是一个NaN?当一个数学表达式的运算结果本应该返回一个数字,但是最终无法返回一个数字的时候,结果是NaN。5、**Infinity是无穷大,当除数是0的时候,最终计算结果是无穷大。**6、强调:JavaScript当中的Number类型代表了java中的:byte short int long float double7、在Number类型这一块,有一个函数叫做:**isNaN()函数**,这个函数**最终返回布尔类型,返回true表示不是一个数字,返回false表示是一个**
数字。
isNaN : is Not a Number
true: 表示不是一个数字
false:表示是一个数字
** isNaN(数据)**:这个函数有一个特点,它会首先尝试将“数据”转换成数字,如果转换失败了,则结果就是true。转换为数字成功了,那么结果就是false。isNaN这个函数是干啥的?** 就是用来判断“数据”是否是一个数字!!!!!**8、**在Number类型这一块还有一个函数叫做:Number()函数,这个函数的作用可以将不是数字类型的数据转换成数字类型的数据。**9、**parseInt()函数,将字符串数字转换成数字,并且取整。向下取整。**10、**Math.ceil(),这是一个Math工具类中的一个函数,向上取整。**
向上取整:只要后面有小数前面的整数就加1
向下取整:下取整,不管四舍五入的规则,只要后面有小数忽略小数给定。比如:4. 9,调用用向下取整函数,得到的是4。调用用向上取整函数,得到的是5
Boolean类型
Boolean类型:
1、Boolean类型属于原始类型。
2、Boolean类型只有两个值:true,false,没有其他值。
3、Boolean类型中有一个函数:Boolean()函数
这个函数的作用是?
将不是布尔类型的转换成布尔类型。
转换规律是什么?**"只要有东西"结果就是true。**有数据就是true,无数据就是false
console.log(Boolean(1)); // trueconsole.log(Boolean(0)); // falseconsole.log(Boolean("abc")); // trueconsole.log(Boolean("中国")); // trueconsole.log(Boolean("")); // falseconsole.log(Boolean(NaN)); // falseconsole.log(Boolean(Infinity)); // trueconsole.log(Boolean(null)); // falseconsole.log(Boolean(new Object())); // trueconsole.log(Boolean(undefined)); // falsevar i = 0;if(i){ // 这里的代码实际上是这样的:if(Boolean(i))console.log("不是0");}else{console.log("是0");}var i = 10;while(i) { // 这里也会自动调用Boolean()函数进行转换.alert(i);i--;}
Boolean()函数在JS中会被隐式调用![程序员是不需要手动调用的]
这里不是说if后面小括号可以跟字符串,if后面小括号中永远只能是true或者false,如果不是true,也不是false,那么JS会自动隐式调用Boolean()函数进行类型转换.
//var username = "zhangsan";varusername = "";if(Boolean(username)) {console.log("welcome, " + username)}else{console.log("对不起用户名不能为空!")}
String 类型
String类型
1、String类型属于原始类型(基本数据类型)
2、在JS中怎么定义字符串,包括两种方式:var s = "字符串";var s = '字符串';var s = new String("字符串");3、在JS当中提供了创建字符串的两种方式:如果采用这种方式创建的字符串就属于原始类型!var s = "hello";如果采用这种方式创建的字符串就属于Object类型,这里使用了Object类的子类String,String类是JS内置的,可以直接使用:var s = new String("hello");4、**在JS中不管是原始类型的字符串,还是Object类型的字符串,他们的方法和属性都是通用的。**
常用属性和方法
学习方法:熟练掌握,没必要记忆,开发的时候去查文档
String当中的常用属性和方法:
常用属性:
length属性,获取字符串长度
常用方法:charAt 方法 获取指定下标位置的字符concat 方法 连接字符串indexOf 方法 获取某个字符串在当前字符串中第一次出现处的索引lastIndexOf 方法 获取某个字符串在当前字符串中最后一次出现处的索引replace 方法 替换split 方法 拆分字符串substr 方法 截取字符串substring 方法 截取字符串toLowerCase 方法 转小写toUpperCase 方法 转大写
var s1 = "abc";console.log(typeof s1) // "string"var s2 = new String("hello");console.log(typeof s2) //"object"console.log("abcdef".length) //6console.log("http://www.baidu.com".charAt(3)) //pconsole.log("abc".concat("def")) //abcdefconsole.log("username=zhangsan&password=123".indexOf("=")) // 8console.log("username=zhangsan&password=123".lastIndexOf("=")) //26console.log("1980-10-11".replace("-",",")) //1980,10-11 (替换所有需要使用正则表达式)// 拆分字符串返回一个数组.var arr = "1980-11-12".split("-"); // var[] arr; 这是错误的,没有这种语法在JS当中.// 遍历数组for(var i = 0; i < arr.length; i++){ // arr.length是数组中元素的个数!console.log(arr[i]) // 还是使用中括号的方式加下标的方式访问数组中的元素.}// 对于substr和substring来说,只有1个参数的话没有区别.console.log("abcdef".substr(2)) //cdefconsole.log("abcdef".substring(2)) //cdef// 对于substr和substring来说,都有两个参数会有什么区别?// substr(startIndex, length)// substring(startIndex, endIndex),需要注意,不包括endIndexconsole.log("abcdef".substr(2,3)) //cdeconsole.log("abcdef".substring(2,3)) //cconsole.log("ABCdef".toLowerCase()) //abcdefconsole.log("ABCdef".toUpperCase()) //ABCDEF
object类型
Object类型:
1、在JS当中内置了一个类型Object,可以将Object类型看做是所有对象的超类/基类
2、**在JS当中默认定义的类型,没有特殊说明的话,默认继承Object**3、Object类型中有哪些通用属性和方法呢?属性:**prototype 属性** | constructor 属性方法:toLocaleString 方法 | toString 方法 | valueOf 方法重点掌握:** prototype属性(**prototype翻译为原型)
这个属性可以给对象动态扩展属性和方法。
语法:
类型.prototype.名称(属性名或者函数名)= function(这里如果是值的话表示动态的给对象扩展属性)
JS中怎么定义类对象
1、在JS中怎么定义类?包括两种方式
第一种方式:function 类名(形式参数列表){this.属性名 = 参数;this.属性名 = 参数;this.方法名 = function(){}}第二种方式:类名 = function(形式参数列表){this.属性名 = 参数;this.属性名 = 参数;this.方法名 = function(){}}
既是一个函数,同时又是一个类的定义.
函数名是:sayHello,类名是:sayHello
function sayHello(){
}sayHello = function(){}
- 调用
- 关键看你怎么调用,如果没有使用new运算符调用,表示普通函数调用.不会在堆中new对象.
sayHello();
- 使用new运算符去调用这个函数,显然是把它当做一个类来看待,这个会导致浏览器的堆当中开辟一个新对象!
var obj = new sayHello(); // obj是一个引用,保存内存地址指向对象!
- 案例:
function Emp(x, y, z){// 属性this.empno = x;this.ename = y;this.sal = z;// 方法this.work = function(){console.log(this.ename + " is working!!!")}}
- 访问一个对象的属性还能这样,语法格式:引用[“属性名”]
**console.log("e4.empno = " + e4["empno"])**
null NaN undefined的区别
1、和**=有什么区别?**
== 等 同运算符:只比较值是否相等。
=== 全等运算符:既比较值是否相等,同时又比较数据类型是否相同。
== 有点类似于Java语言中的equals方法
2、null undefined NaN的区别?
类型都是不一样的
null和undefined是等同关系。
null的类型属于原始类型,typeof运算符的结果是:object
JS的常用事件
- load事件:
这个是卸载body当中的
1、load事件不是在页面加载过程中触发的。
2、**load事件是在页面中所有的元素全部加载完毕之后才发生的。**
JS的常用事件:
学习方法:需要背会,这里列举的是常用事件,具体的可以看开发文
(1)blur【布勒】 失去焦点(5)focus【佛肯死】 获得焦点(3)click 鼠标单击(4)dblclick 鼠标双击(6)keydown 键盘按下(7)keyup 键盘弹起(9)mousedown 鼠标按下(10)mouseover 鼠标经过(11)mousemove 鼠标移动(12)mouseout 鼠标离开(13)mouseup 鼠标弹起(16)submit 表单提交(14)reset 表单重置(15)select 文本被选定(2)change 下拉列表选中项改变,或文本框内容改变(8)load 页面加载完毕**提醒:任何一个事件都有对应的事件句柄。事件句柄是在事件名称前添加on就行。**
- 事件的测试
失去焦点的作用:就是开发过程中,注册账号是账号名重复的话,就会失去焦点,提示账号名重复
测试失去焦点事件:<input type="text" onblur="console.log('失去焦点了')"/><br>测试获取焦点事件:<input type="text" onfocus="console.log('获取焦点了')"/><br>
测试click事件:<input type="button" value="click事件" onclick="console.log('单击')"/><br>测试dblclick事件:<input type="button" value="dblclick事件" ondblclick="console.log('双击')"/><br>
测试keydown事件:<input type="text" onkeydown="console.log('keydown....')" onkeyup="console.log('keyup....')"/><br>测试keyup事件:<input type="text" onkeyup="console.log('keyup....')" />
测试mouse相关的事件:【测试时,需要在css里面,构造一个区域】
<div id="mouseDiv" onmouseover="console.log('鼠标经过了')"onmousedown="console.log('鼠标按下了')"onmouseout="console.log('鼠标离开了')"onmouseup="console.log('鼠标弹起了')"onmousemove="console.log('鼠标移动了')"></div><br>
<body onload="console.log('页面加载完毕了!')"><script type="text/javascript"></script>测试选中文本事件:<textarea rows="10" cols="30" onselect="console.log('文本被选中了')"></textarea><br><input type="text" onselect="console.log('文本被选中了')"/><br><br>测试change事件:<select onchange="console.log('选项被修改!')"><option value ="">--请选择您的学历--</option><option value ="gz">高中</option><option value ="zk">专科</option></select><br><br>测试表单的提交和重置事件:<form action="" onsubmit="alert('表单提交了')" onreset="console.log('表单重置了')"><input type="submit" value="提交"/><input type="reset" value="重置"/></form><br>测试mouse相关的时间:<div id="mouseDiv" onmouseover="console.log('鼠标经过了')"onmousedown="console.log('鼠标按下了')"onmouseout="console.log('鼠标离开了')"onmouseup="console.log('鼠标弹起了')"onmousemove="console.log('鼠标移动了')"></div><br></body>
