目录
1.Web概念
(1)软件的架构
1. C/S: Client/Server 客户端/服务器端
* 在用户本地有一个客户端程序,在远程有一个服务器端程序
* 如:QQ,迅雷...
* 优点:
1. 用户体验好
* 缺点:
1. 开发、安装,部署,维护 麻烦
2. B/S: Browser/Server 浏览器/服务器端
* 只需要一个浏览器,用户通过不同的网址(URL),客户访问不同的服务器端程序
* 优点:
1. 开发、安装,部署,维护 简单
* 缺点:
1. 如果应用过大,用户的体验可能会受到影响
2. 对硬件要求过高
(2)资源分类
B/S架构详解
- 资源分类:
- 1. 静态资源:
- 使用静态网页开发技术发布的资源。
- 特点:
- 如果用户请求的是静态资源,那么服务器会直接将静态资源发送给浏览器。浏览器中内置了静态资源的解析引擎,可以展示静态资源
- 如:文本,图片,音频、视频, HTML,CSS,JavaScript
- 所有用户访问,得到的结果是一样的。
- 2. 动态资源:
- 使用动态网页及时发布的资源。
- 特点:
- 所有用户访问,得到的结果可能不一样。
- 如:jsp/servlet,php,asp...
- 如果用户请求的是动态资源,那么服务器会执行动态资源,转换为静态资源,再发送给浏览器
我们要学习动态资源,必须先学习静态资源!
静态资源:
- 1. HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片、视频等。
- 2. CSS样式是表现。就像网页的外衣。比如,标题字体、颜色变化,或为标题加入背景图片、边框等。所有这些用来改变内容外观的东西称之为表现。
- 3. JavaScript是用来实现网页上的动态效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用JavaScript来实现的。
2.HTML
(1)概念
HTML是最基础的网页开发语言
* Hyper Text Markup Language 超文本标记语言
* 超文本:
* 超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本.
* 标记语言:
* 由标签构成的语言。<标签名称> 如 html,xml
* 标记语言不是编程语言,编程语言有一定的逻辑性,标记语言没有任何逻辑性,如C++中的if-else只会执行if或else其中一个部 分,而标记语言写上就会被解析
案例认识html标签:
平常大家说的上网就是浏览各种各式各样的网页,这些网页都是由html标签组成的。下面就是一个简单的网页。效果图如下:
分析:(这个网页由哪些html标签组成)
- “勇气”是网页内容文章的标题,<h1></h1>就是标题标签,它在网页上的代码写成<h1>勇气</h1>。
- “三年级时...我也没勇气参加。” 是网页中文章的段落,<p></p>是段落标签。它在网页上的代码写成 <p>三年级时...我也没勇气参加。</p>
- 网页上那张小女生的图片,由img标签来完成的,它在网页上的代码写成<img src="1.jpg">
源码:
总结一下,可以这么说,网页中每一个内容在浏览器中的显示,都要存放到各种标签中。
(2)HTML快速入门
- 语法:
- 1. html文档后缀名 .html 或者 .htm(两种没有任何区别)
- 2.标签由英文尖括号<和>括起来,如<html>就是一个标签。
- 3. 标签分为
- 1. 围堵标签:有开始标签和结束标签。如 <html> </html>
- 2. 自闭和标签:开始标签和结束标签在一起。如 <br/>
- 4. 标签可以嵌套:
- 需要正确嵌套,不能你中有我,我中有你
- 错误:<a><b></a></b>
- 正确:<a><b></b></a>
- 5. 在开始标签中可以定义属性。属性是由键值对构成,值需要用引号(单双都可)引起来
- 6. HTML标签不区分大小写,<h1>和<H1>是一样的,但建议小写,因为大部分程序员都以小写为准。
示例:
<html>
<head>
<title>Hello,World</title>
</head>
<body>
<font color='red'>Hello,World</font></br>
<font color = 'blue'>hello,world</font>
</body>
</html>
运行结果:
3.HTML标签
3.1文件标签
是构成html最基本的标签
- html:标识html文档的根标签
- head:头标签
- 用于定义文档的头部,它是所有头部元素的容器。头部元素有<title>、<script>、 <style>、<link>、 <meta>等标签
- title:标题标签
- body:体标签
- 在<body>和</body>标签之间的内容是网页的主要内容,如<h1>、<p>、<a>、<img>等网页内容标签,在这里的标签中的内容会在浏览器中显示出来。
- <!DOCTYPE html>:html5中定义该文档是html文档
3.2 文本标签
-
注释:<!-- 注释内容 -->
-
<h1> to <h6>:标题标签
-
h1~h6:字体大小逐渐递减
-
-
<p>:段落标签
-
注意一段文字一个<p>标签
-
<p>标签的默认样式,可以在上图中看出来,段前段后都会有空白,如果不喜欢这个空白,可以用css样式来删除或改变它。
-
-
<strong>和<em>标签
-
有了段落又有了标题,现在如果想在一段话中特别强调某几个文字,这时候就可以用到<em>或<strong>标签。
-
但两者在强调的语气上有区别:<em> 表示强调,<strong> 表示更强烈的强调。并且在浏览器中<em> 默认用斜体表示,<strong> 用粗体表示。两个标签相比,目前国内前端程序员更喜欢使用<strong>表示强调。
-
如,在网上商城中,某产品的打折后的价格是需要强调的。如下图。
-
-
<q>标签,短文本引用
-
比如在你的网页的文章里想引用某个作家的一句诗,可以使用<q>标签
-
1. 在上面的例子中,“庄生晓梦迷蝴蝶。望帝春心托杜鹃。” 这是一句诗歌,出自晚唐诗人李商隐的《锦瑟》 。因为不是作者自己的文字,所以需要使用<q></q>实现引用。
-
2. 注意要引用的文本不用加双引号,浏览器会对q标签自动添加双引号。
-
3.注意这里用<q>标签的真正关键点不是它的默认样式双引号(如果这样我们不如自己在键盘上输入双引号就行了),而是它的语义:引用别人的话。
-
-
<blockquote>标签,长文本引用
-
浏览器对<blockquote>标签的解析是缩进样式。如下图所示:
-
<br>:换行标签
-
注意:在 html 中是忽略回车和空格的,你输入的再多回车和空格也是显示不出来的
-
如:示例1
-
在浏览器中显示如下:
-
示例2:
-
-
:空格
-
<hr>:展示一条水平线
-
示例代码:
-
<!DOCTYPE html> <html lang="ch" > <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!--这是注释--> <!--br,换行--> 白日依山尽,<br/> <!--语法不严格,可以写成<br>--> 黄河入海流 <!--标签h1-h6--> 旅游</br> <h1>旅游</h1> <h2>旅游</h2> <h3>旅游</h3> <h4>旅游</h4> <h5>旅游</h5> <h6>旅游</h6> <!--段落标签:p--> <p> 1你好你好你好你好你好你好你好 </p> <p> 2你好你好你好你好你好你好你好 </p> <p> 3你好你好你好你好你好你好你好 </p> <!--hr:显示一条水平线--> <hr/> </body> </html>
- <address>标签,为网页加入地址信息
- 一般网页中会有一些网站的联系地址信息需要在网页中展示出来,这些联系地址信息如公司的地址就可以<address>标签。也可以定义一个地址(比如电子邮件地址)、签名或者文档的作者身份。
- <code>标签:添加一行代码
-
<pre>标签:为你的网页加入多行代码
-
<pre>标签的主要作用:预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。
-
在浏览器中显示:
-
注意:<pre> 标签不只是为显示计算机的源代码时用的,在你需要在网页中预显示格式时都可以使用它,只是<pre>标签的一个常见应用就是用来展示计算机的源代码。
3.3 图片标签
- 语法:
<img src="图片地址" alt="下载失败时的替换文本" title = "提示文本">
- img:展示图片
- 属性:
- src:指定图片的位置
- 相对路径:
- ./:代表当前目录 ./image/1.jpg
- ../:代表上一级目录
- 当指定的路径找不到的时候,浏览器会显示如下
- 相对路径:
-
alt:指定图像的描述性文本,当图像不可见时(下载不成功时),可看到该属性指定的文本;
-
title:提供在图像可见时对图像的描述(鼠标滑过图片时显示的文本);
- src:指定图片的位置
-
图像可以是GIF,PNG,JPEG格式的图像文件。
3.4 列表标签
有序列表:
- ol:
- li:列表的项目
-
<ol>在网页中显示的默认样式一般为:每项<li>前都自带一个序号,序号默认从1开始
无序列表:
- ul:
- li:列表的项目
-
ul-li在网页中显示的默认样式一般为:每项li前都自带一个圆点
示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>列表标签</title>
</head>
<body>
<!--有序列表-->
早上起床干的事情
<ol type="A">
<li>睁眼</li>
<li>看手机</li>
<li>穿衣服</li>
<li>洗漱</li>
</ol>
<!--无序列表-->
早上起床干的事情
<ul>
<li>睁眼</li>
<li>看手机</li>
<li>穿衣服</li>
<li>洗漱</li>
</ul>
</body>
</html>
3.5 链接标签
- a:链接标签
- 属性:
- href:跳转到的超链接的url,可以是本地的url,也可以是网络的url
- target:指定在哪个页面打开
- _self:默认值,在当前页面打开链接
- _blank:在空白页面即新的页面打开链接
-
title:鼠标滑过链接文字时会显示这个属性的文本内容。这个属性在实际网页开发中作用很大,主要方便搜索引擎了解链接地址的内容(语义化更友好)
-
- 属性:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>超链接</title>
</head>
<body>
<!--超链接-->
<!--如果a标签没有写href属性的话,点击不会有任何反应-->
<a>点我没反应</a>
<br>
<!--href属性指定跳转到网络url-->
<a href="https://www.baidu.com">百度</a>
<br>
<!--href属性指定跳转到本地url-->
<a href="./demo01.html">本地html</a>
<br>
<!--target属性指定为_self表示在当前页面打开此链接-->
<a href="https://www.baidu.com" target="_self">在当前页面打开百度</a>
<br>
<!--target属性指定为_blank表示在新的页面打开此链接-->
<a href="https://www.baidu.com" target="_blank">在新的页面打开百度</a>
<br>
<!--点击图片实现跳转到指定页面-->
<a href="https://www.baidu.com"><img src="./1.jpg" alt="百度"></a>
<br>
</body>
</html>
3.6 块标签
块标签没有任何效果,但是方便与css配合
- div:每一个div,占满一整行,块级标签
- span:文本信息在一行显示,内联标签
(1)div在排版中的作用:
- 在网页制作过程过中,可以把一些独立的逻辑部分划分出来,放在一个<div>标签中,这个<div>标签的作用就相当于一个容器。
- 确定逻辑部分:
- 什么是逻辑部分?它是页面上相互关联的一组元素。如网页中的独立的栏目版块,就是一个典型的逻辑部分。如下图所示:图中用红色边框标出的部分就是一个逻辑部分,就可以使用<div>标签作为容器。
(2)给div命名,使逻辑更加清晰
我们把一些标签放进<div>里,划分出一个独立的逻辑部分。为了使逻辑更加清晰,我们可以为这一个独立的逻辑部分设置一个名称,用id属性来为<div>提供唯一的名称,这个就像我们每个人都有一个身份证号,这个身份证号是唯一标识我们的身份的,也是必须唯一的。
3.7 语义化标签
语义化。那么什么叫做语义化呢,说的通俗点就是:明白每个标签的用途(在什么情况下使用此标签合理)比如,网页上的文章的标题就可以用标题标签,网页上的各个栏目的栏目名称也可以使用标题标签。文章中内容的段落就得放在段落标签中,在文章中有想强调的文本,就可以使用 em 标签表示强调等等。
讲了这么多语义化,但是语义化可以给我们带来什么样的好处呢?
1. 更容易被搜索引擎收录。
2. 更容易让屏幕阅读器读出网页内容。
- 无语义化标签:上述的div和span起到包裹的作用,但是它们本身没有语义,不方便阅读代码
- 语义化标签:html5中为了提高程序可读性而提供的标签
- 语义化标签无任何样式,仅仅是为了将一块代码包裹起来,增强可读性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>语义化标签</title>
</head>
<body>
<!--比如说这是开头-->
<!-- html4的做法:<div id="header"></div> -->
<!-- 下面是html5的做法:使用语义化标签,增强了可读性-->
<header>
<h1>
欢迎您
</h1>
</header>
<!--比如说这是结尾-->
<!-- html4的做法:<div id="footer"></div> -->
<!-- 下面是html5的做法:使用语义化标签,增强了可读性-->
<footer>
<h6>
再见
</h6>
</footer>
</body>
</html>
3.8 表格标签
html中表格的概念没有列的概念,仅仅有行,每一行再分成多个单元格,如下图:
- table:定义表格
- 属性:border:是否使用边框,默认不使用边框,border="1"表示使用边框
- tr:定义行
- td:定义单元格
- th:定义表头单元格,th标签中的文本默认为粗体并且居中显示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表格标签</title>
</head>
<body>
<!--定义一个表格-->
<table border="1">
<!--定义一行-->
<tr>
<!--在一行中定义一个单元格-->
<td>编号</td>
<td>姓名</td>
<td>成绩</td>
</tr>
<tr>
<td>1</td>
<td>小龙女</td>
<td>100</td>
</tr>
<tr>
<td>2</td>
<td>杨过</td>
<td>50</td>
</tr>
</table>
</body>
</html>
- 表格中的一些如下标签,类似于语义化标签,增强表格的代码可读性
-
为表格添加摘要:
-
语法:<table summary="表格简介文本">
-
摘要的内容是不会在浏览器中显示出来的。它的作用是增加表格的可读性(语义化),使搜索引擎更好的读懂表格内容,还可以使屏幕阅读器更好的帮助特殊用户读取表格内容。
-
-
当表格内容非常多时,表格会下载一点显示一点,但如果加上<tbody>标签后,这个表格就要等表格内容全部下载完才会显示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表格标签</title>
</head>
<body>
<!--定义一个表格-->
<table border="1">
<!--表头-->
<thead>
<!--定义一行-->
<tr>
<!--在一行中定义一个单元格-->
<td>编号</td>
<td>姓名</td>
<td>成绩</td>
</tr>
</thead>
<!--表的标题-->
<caption>学生信息表</caption>
<!--表体-->
<tbody>
<tr>
<td>1</td>
<td>小龙女</td>
<td>100</td>
</tr>
<tr>
<td>2</td>
<td>杨过</td>
<td>50</td>
</tr>
</tbody>
<!--表的结尾-->
<tfoot>
<tr>
<td>3</td>
<td>尹志平</td>
<td>40</td>
</tr>
</tfoot>
</table>
</body>
</html>
td标签有两个属性可合并单元格:
- rowspan
- colspan
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表格标签</title>
</head>
<body>
<table border="1">
<thead>
<tr>
<!--编号单元格占2行-->
<td rowspan="2">编号</td>
<td>姓名</td>
<td>成绩</td>
</tr>
</thead>
<caption>学生信息表</caption>
<tbody>
<tr>
<td>1</td>
<td >小龙女</td>
<td>100</td>
</tr>
<tr>
<td>2</td>
<!--杨过单元格占2列-->
<td colspan="2">杨过</td>
</tr>
</tbody>
</table>
</body>
</html>
3.9 表单标签
表单
- 用于采集用户输入的数据,然后用于和服务器进行交互
(1)表单标签
- form:用于定义表单的,可以定义一个范围,范围代表采集用户数据的范围,定义在form表单之内的输入数据会被一次性提交
- 属性:
- action:指定提交数据的URL
- method:指定提交方式
- 分类:一共有7种,2种比较常用
- get
- post
- 分类:一共有7种,2种比较常用
- 注意:
- 1.表单中的表单项要被提交,必须指定它的name属性
- 2.写在form标签当中当中的输入数据会被提交,写在form之外不会被提交
- 属性:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单标签</title>
</head>
<body>
<form action="#" method="get">
用户名:<input name="user"><br>
<!--没有指定name属性,不会被提交-->
密码:<input><br>
<input type="submit" value="登录">
</form>
<!--写在form表单之外-->
验证码:<input name="check"><br>
</body>
</html>
提交前的地址栏:
提交后的地址栏:
结果分析:
1.只有用户名被提交,密码(没有给name属性赋值)和验证码(写在form表单之外)
2.可以看到使用get方式时被提交的数据的name属性和输入值会添加到地址栏当中
get和post的区别:
- 1.get的请求参数会在地址栏中显示,会封装在请求行中
- post的请求参数不会在地址栏中显示,会封装在请求体中
- 2.get的请求参数的长度有限制,
- post的请求参数的大小没有限制
- 3.get请求不太安全,
- post请求较为安全
(2)表单项标签
1)input
- input:可以通过type属性值,改变元素展示的样式
- name属性:为组件命名,以备后台程序使用。
- type属性:
- text:文本输入框,是input的默认值
- password:密码输入框
- 对于text和password:
- value属性:可以指定框中默认显示的信息,但是是黑色的,并且点击不会消失,需要手动删除
- plassholder属性:可以指定框中默认显示的信息,是灰色的,并且点击后会消失
- 对于text和password:
- radio:单选框
- 注意:
- 1.要想让多个单选框实现单选的效果,则多个单选框的name属性的值必须一样
- 2.一般会给每一个单选框提供value属性,指定其被选中后提交的值,如果不写,选中之后会被提交on
- 注意:
- checkbox:复选框
- 注意:
- 1.要想让多个复选框实现对同一个值的复选效果,则多个单选框的name属性的值必须一样
- 2.一般会给每一个复选框提供value属性,指定其被选中后提交的值,如果不写,选中之后会被提交on
- checked:单选框和复选框都有的属性,表示默认被选中,一般写为checked="checked"
- 注意:
- file:文件选择框
- hidden:隐藏域,虽然不会被显示在浏览器页面,但是数据会被提交
- 按钮:
- submit:提交按钮,提交表单
-
value:按钮上显示的文字
-
- button:普通按钮,会和javaScript配合使用
- value:按钮上显示的文字
- image:图片提交按钮,可以通过src属性指定图片的路径
- reset:用重置按钮使输入框恢复到初始状态。只需要把type设置为"reset"就可以。
- value:按钮上显示的文字
- submit:提交按钮,提交表单
- color:取色器
- date:日期
- datetime-local:日期和时间
- email:对输入的邮箱进行正则校验
- number:只能输入数字的框
- label标签:指定输入项的文字描述信息
- label标签不会向用户呈现任何特殊效果,它的作用是为鼠标用户改进了可用性。如果你在 label 标签内点击文本,就会触发此控件。
- 注意:label的for属性一般会和input的id属性值一致,一致后点击label区域,会让input输入框获取焦点
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单项标签</title>
</head>
<body>
<form action="#" method="get">
<label for="username">用户名</label>:<input type="text" name="username" placeholder="请输入用户名" id="username"><br>
密码:<input type="password" name="password" placeholder="请输入密码"><br>
性别:<input type="radio" name="gender" value="male" checked="checked">男
<input type="radio" name="gender" value="female">女
<br>
爱好:<input type="checkbox" name="hobby" value="shopping" checked="checked">逛街
<input type="checkbox" name="hobby" value="Java">Java
<input type="checkbox" name="hobby " value="game">游戏
<br>
图片:<input type="file" name="file "><br>
隐藏域:<input type="hidden" name="id" value="aaa"><br>
取色器:<input type="color" name="color "><br>
生日:<input type="date" name="birthday "><br>
时间:<input type="datetime-local" name="local"><br>
邮箱:<input type="email" name="email"><br>
年龄:<input type="number" name="age"><br>
<br>
<input type="submit" value="提交按钮">
<input type="button" value="普通按钮"><br>
<input type="image" src="./2.jpg">
</form>
</body>
</html>
点击用户名,焦点会跳到用户名输入框中
2)select
- option:下拉选项
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>下拉列表</title>
</head>
<body>
<!--定义一个下拉框-->
省份:
<!--同样在下拉框中加了name属性才会被提交-->
<select name="province">
<!--定义下拉选项-->
<!--value属性表示要被提交的值,""表示不被提交-->
<option value="">--请选择--</option>
<option value="1">--北京--</option>
<option value="2">--上海--</option>
<!--selected属性指定默认被选中的值-->
<option value="3" selected="selected">--重庆--</option>
</select>
</body>
</html>
3)textarea
属性:
- cols:指定列数,每一行有多少个字符
- row:默认行数,行不够,会自动扩容
-
注意这两个属性可用css样式的width和height来代替:col用width、row用height来代替。(这两个css样式在以后的章节会讲解)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文本域</title>
</head>
<body>
<!--定义一个下拉框-->
自我描述:<textarea name="self_description" cols="30" rows="10"></textarea>
</body>
</html>
3.10 案例
使用html实现一个没有简陋的注册页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<form action="#" method="post">
<table border="1">
<tr>
<td><label for="username">用户名</label>:</td>
<td><input type="text" name="username" id="username" placeholder="请输入账户"></td>
</tr>
<tr>
<td><label for="password">密码</label>:</td>
<td><input type="password" name="password" id="password" placeholder="请输入密码"></td>
</tr>
<tr>
<td><label for="email">Email</label>:</td>
<td><input type="email" name="email" id="email" placeholder="请输入邮箱"></td>
</tr>
<tr>
<td><label for="name">姓名</label>:</td>
<td><input type="text" name="name" id="name" placeholder="请输入姓名"></td>
</tr>
<tr>
<td><label for="telephone">手机号</label>:</td>
<td><input type="text" name="telephone" id="telephone" placeholder="请输入手机号"></td>
</tr>
<tr>
<td><label>性别</label>:</td>
<td><input type="radio" name="gender" value="male" checked="checked">男
<input type="radio" name="gender" value="female">女
</td>
</tr>
<tr>
<td><label for="birthday">出生日期</label>:</td>
<td><input type="date" name="birthday" id="birthday"></td>
</tr>
<tr>
<td><label for="check_code">验证码</label>:</td>
<td><input type="text" name="check_code" id="check_code">
<img src="./verify_code.jpg" alt="验证码">
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="注册"></td>
</tr>
</table>
</form>
</body>
</html>