liqianxin

前端回顾

前端就是展示给用户并且与用户进行交互的操作界面。

前端包括包括三部分:

  1. html:网页的骨架,没有任何样式,比较丑
  2. css:相当于一些装饰品,给骨架添加样式。
  3. js:控制网页的动态效果。

前端也有很多框架,只需要按照固定的语法进行调用即可。

基础知识

软件的开发架构分为两种:

  1. CS:拥有客户端和服务端。
  2. BS:用浏览器代替客户端,其本质也是BS架构,但是客户端不需要我们自己写。

忽略掉进行域名解析的过程,当我们在浏览器的窗口中输入网址后的过程:

  1. 浏览器向服务器发出请求
  2. 服务端接受请求
  3. 服务端返回响应。
  4. 浏览器接受响应,然后将数据按照特定的规则进行渲染,展示给用户。

如果要想浏览器当做很多服务端的客户端,那么就需要浏览器熟练掌握各种各样的服务端的规则,对于浏览器来说压力很大,因此,浏览器决心变得傲娇:你要是想让我给你打工(当做客户端),那么你就遵守我的规则,不然的话,不好意思了,你自己去开发自己的客户端吧。因此,产生了浏览器制定的协议。

HTTP协议

首先说一下HTTP协议。

它是超文本传输协议,用来规定服务端和浏览器之间的数据交互的格式,有四大特性:

  1. 基于请求响应。
  2. 基于TCP\IP作用于应用层之上的协议
  3. 无状态:不保存用户状态信息。脸盲症重度患者,即使见你千百遍,依旧像是从未见。
  4. 无链接/短链接:请求来就响应,响应完就结束。

既然是基于请求响应的,那肯定也都有各自的请求响应的数据格式。

请求数据格式 = 请求首行 + 请求头 + 空行 + [请求体]

1. 请求首行:当前请求方式 url和HTTP版本号,如 GET /index/ HTTP/1.1
	当前请求方式在HTTP/1.1中有8种,只学了get和post最基本的请求方式。
    	url:统一资源定位符,可以理解为网址
    	get:请求指定的页面,要求服务端将请求的url页面在响应的时候返回。地址中?后可添加传送数据,但是一般只能传送1024个字符,不能太大。
        post:浏览器可以通过post请求将大量数据发送给服务端,无大小限制。

2. 请求头:主要由大量键值对组成,包含客户端的一些请求信息
	如:User-Agent:浏览器类型。
3. 空行
	最后一个请求头之后使一个空行,发送回车符和换行符,主要是作为标识,告诉服务端请求头结束了
4. 请求体:主要在post中使用,get请求没有。一般post适用于请求展示数据时候使用

响应数据格式 = 响应首行 + 响应头 + 空行 + 响应体。

1. 响应首行:服务器HTTP协议版本 响应状态码 状态码的文本描述,例:HTTP/1.1 200 OK
	状态码是由三位数字组成的,代表某些固定含义
    	1XX:表示请求已被服务端接受,继续处理。
        2XX:请求已被成功接受理解。
        3XX:重定向,要完成请求需要完成某些前置条件
        4XX:客户端错误,请求有错误,如资源不存在(404)等等
        5XX:服务端炸了,服务端着火了等等,就是服务端不能工作了

2. 响应头:大量键值对
3. 空行
4. 响应体:返回的是服务端返回的数据。

认识HTML

HTML是一种用于创建网页的标记语言,并不是编程语言。本质就是浏览器识别的格式,我们按照该格式书写,然后浏览器能认识并加以渲染,达到我们想要的效果。

注意:不同的浏览器对相同的标签有不一样的认识,这里是浏览器的兼容问题。

HTML组成

HTML主要是由4部分组成:
	1.<!DOCTYPE html>:声明为html5的文档
    2.<html></html>:是文档的开始和结束标志。其余三部分也是在这个标签内。
    3.<head></head>:内部数据不会再页面上展示,只是定义一些配置让浏览器识别。
    4:<body></body>:被浏览器渲染给用户看的数据内容。
其实1和2是第一层结构,而3和4是在2内部定义的。
结构如下:
<!DOCTYPE html>
<html>
	<head></head>
	<body></body>
</html>

HTML标签

标签代表的某些固定的含义,像乐高积木一样,把这些各种各样的积木堆起来,就能完成一个杰出的作品。

按照标签是否是单身可分为以下两种:

  1. 单标签:语法为<标签名 属性1=值1 属性2=值2 ...../>
  2. 双标签:语法为<标签名 属性1=值1 属性2=值2 .....>前面表开始,中间是内容,后边表结束</标签名>

一些常见的HTML标签

首先是注释:<!--注释内容-->

    
<!--head标签内部常用的标签-->
<title>网页标题</title>  

<style>内部用来书写css代码</style>  

<link rel='stylesheet' href='外部css文件'></link>   引入外部css文件

<script src='外部文件'></script>

<meta name='keywords' content='被浏览器搜索的关键字'>
<meta name='description' content='网页的描述性信息'>
<!--body内部常用的标签-->

<h1> 1级标题 改变数字可以进行1~6级标题的替换</h1>
<u>下划线</u>
<i>斜体</i>
<s>删除线</s>
<b>加粗</b>
<p>段落</p>
<br>  换行
<hr>  水平分割线

<!--特殊符号表示方法-->
&nbsp;  空格
&gt;   大于号
&lt;   小于号
&amp;  &
&yen;  ¥
&copy;		©
商标&reg;  ®
上述标签在浏览器中的显示所占的位置是不一样的,据此,对不同的标签又进行了分类。

1. 块级标签:独占一行,不受本身文本的大小限制。
	-块级标签可以修改长宽。
    -其内部可以嵌套块级标签。
	-只有一个比较页数的标签:p标签只能内嵌行内标签
    
2.行内标签:其所占位置大小被自身文本所决定,文本多大,占多大。
	-行内标签不能嵌套块级标签

div和span标签

块级标签的典型代表就是<div>标签,行内标签代表就是<span>标签,为什么要单独拉出来说呢?因为这两个标签是我们专门用来在初期构造html骨架的。在设计页面初期,我们可以首先使用div标签来进行整体页面的一个规划,然后其中的文本内容可以使用span标签占位。后期我们添加内容都是在div和span组成的简易结构中进行的。

特殊的属性

  1. id:该页面不能重复,用来标识标签唯一身份。
  2. class:类似于Python的继承,会按照class内的css样式进行渲染标签。

常用标签

1. img标签:可以插入图片
	<img src="图片的路径" alt="图片未加载成功时的提示" title="鼠标悬浮在图片上的提示信息" width="自定义宽" height='自定义高'>
如果宽和高只定义一个的话,那么就会等比例改变

2. a标签:传送门标签
	<a href='传送地址'></a>
	target='_self/_blank'  打开新页面的方式,前者表示本页面打开,后者是新建页面打开,默认前者
	
tip:本页面跳转的功能
a标签具有锚点功能,这时候就要说到一个特殊的属性了:id='',这个id必须是本页面唯一,作为每个标签的身份标识,我们可以通过查找某标签的id直接定位到该标签,所以a标签中的href属性就可以写为本页面的id值,完成点击之后即跳转到该标签。

3. 列表标签
列表标签有三种,这里只记录一下无序列表。
	<ul>
    	<li>默认是带小黑点的子集排列</li>
    	<li>如下展示</li>
	</ul>
  • 无序列表就是这样
  • 可以有多行
4. 表格标签
<table>  # 声明一个表格
    <thead>  # 表头
        <tr>  # 每一个tr标签代表一行数据
            <th>加粗的字段1</td>
            <td>字段2</td>
            <td>字段3</td>
        </tr>
    </thead>

    <tbody>  # 表身
        <tr>
            <td>一行数据的第一个字段值</td>
            <td>一行数据的第二个字段值</td>
            <td>一行数据的第三个字段值</td>
        </tr>
    </tbody>
</table>

html本身子代的表格是比较丑的,但是仍然可以添加一些属性的变化使其稍微好看点。
border='数字':表格的边框样式
rowspan='数字':向下的单元格合并几行
colspan='数字':向右的单元格合并几行
  1. 表单元素

这个表单属性可以实现向服务端发送数据,如果我们填写一部分数据向后端提交,就要使用到这个表单元素。

<form action="数据提交地址" method='请求方式' enctype='multipart/form-data'>
    <input type="text" name=''>					输入文本
    <input type="password" name=''>				密码输入
    <input type="date" name=''>					日期输入
    <input type="radio" name=''>				单选框:从给出的选项进行选择
    <input type="checkbox" name=''>				多选框:从给出的选项中可以进行多选
    <input type="submit" name=''>				提交按钮,触发提交动作
    <input type="button" name=''>				可以进行自定义功能按钮,空白的只能点着玩
    <input type="reset" name=''>				重置按钮:刷新本页面
    <input type="file" name=''>					选择文件,可进行上传,但有前提条件
	<label for="">
        <input type="text" name=''>				input标签在label内,能让用户再点到文本提示信息的时候自动进入到数据输入状态,即获得焦点。
    </label>
    
</form>


action的3种状态:

  1. 不填:默认是向本页面所在的url提交数据。
  2. 写全路径:向该url提交数据。如’www.baidu.com‘。
  3. 只写路径后缀:自动识别当前的ip和port,然后拼接。如:'/index/'

主要记得就是当在内部输完数据准备进行提交的时候,action决定了提交的方向。

几个特殊状态:

  1. checked:对于给出的选项(针对radio和check)问题,可使用这个值作为设定默认值。
  2. disabled:不能获得焦点(不能输入)。
  3. readonly:只能读。

上传文件的前提条件:

  1. 请求方式为POST
  2. 必须定义enctype='multipart/form-data'属性。

注意事项:

  1. name属性:数据是按k:v进行提交的,因此input内部务必填写一个name属性作为数据的key。
  2. value属性:针对输入文本类型,value为输入文本,针对按钮类为按钮显示文本,针对选项类为传送数据的键值对的值。
select标签:默认是单选的,下拉式选项。想要多选需添加mutiple  selected为默认选中状态
<form action="" >
        <select name="" id="" multiple>
            <option value="" selected>1</option>
            <option value="">2</option>
            <option value="">3</option>
        </select>
        
        <textarea name="" id="" cols="30" rows="10"></textarea>
    </form>
    
textarea标签是获取用户大段文本输入,本身是一个大的可输入多行的文本框。

认识css

css相当于一个化妆盒,用来给html打造的东东进行华丽大变身。

既然要进行装饰,那么就首先要找到被装饰的对象。

css的引入方式有几种:

  1. head内的link标签引入外部css文件
  2. head内的style标签内写入css
  3. 在标签内部直接定义style='{属性:属性值.....}'

一般情况建议使用第一种方式,方便后期维护,第三种方式不建议大批量使用,耦合度较高。

选择器

这个就很好理解,就是通过一些方法精确定位到某一个标签。

选择器分类:

/*我是注释语法:选择器是定位某标签,大括号内的内容是定义的css的一些样式*/
选择器 {属性1:属性值1;属性2:属性值2.....}

/*基本选择器*/
/*1. id选择器: 关键符号为# */
#id值 {属性1:属性值1;属性2:属性值2.....}

/*2. 类选择器: 关键符号为点 */
.类 {属性1:属性值1;属性2:属性值2.....}

/*3. 元素选择器*/
标签名 {属性1:属性值1;属性2:属性值2.....}

/*4. 通用选择器*/
* {属性1:属性值1;属性2:属性值2.....}

/*组合选择器:先找到某一个确定的标签,根据这个标签的亲戚关系进行查找*/
后代选择器:凡是在标签内部的标签都是后代		  #id a {}
儿子选择器:在标签内部第一层级的标签			   #id>a {}
毗邻选择器:同级别紧挨着标签的下一个标签		  #id+a {}
弟弟选择器:同级别下方所有的标签				 #id~a {}

/*属性选择器:以[]为标识,查找含有某属性的标签*/
[name] {}  			含有name属性的标签都被选择
[name='tom']  		含有name属性且值为tom的所有标签
标签名[name='tom']   标签名内含有属性为name的且值为tom的所有标签

分组:多个元素样式相同可通过逗号隔开选择器的方式设置。

嵌套:多种选择器嵌套使用,可以想想后代选择器

div,#d1,.c1 {}  选择div标签、id为d1、继承c1类的标签
#d1 a {}		选择id为下的a标签

伪类选择器

一般在a标签使用比较频繁

a:link {color:blue}  		# 未访问链接时的颜色
a:visited {color:blue}  	# 访问链接之后的颜色
a:hover {color:blue}  		# 鼠标悬浮在链接时颜色
a:active {color:blue}  		# 鼠标点击链接不松时的颜色
input:focus {color:bule}  	# 输入框获得焦点时的样式

伪元素选择器

p:first-letter {}  设置文本首字母的字体样式
p:after {content:'content必须定义'}  在p元素之后添加一个不可选中的内容,多用于清除浮动 
p:before {content:'content必须定义'}  在p元素之前添加一个不可选中的内容,多用于清除浮动

优先级

在标签内部的所有标签都会默认继承该标签的样式,但是如果内部标签也有自己的样式,这个时候就要考虑优先级的问题了。

选择器的优先级是按照权重来决定的,谁的权重高那么就听谁的。按照通俗的话说就是哪一个选择器精确就听谁的。

针对相同的选择器:就近原则。后执行的会将前面执行的覆盖。

针对不同的选择器:行内选择器》id选择器>类选择器>标签选择器。谁查找的精度高,范围小。就听谁的。

属性

宽和高

这两个属性是块级标签通用的,用来设置高和宽,行内标签是无法生效宽属性的,它的宽是由其本身文本内容决定

width:100px;  设置宽
height:100px; 设置高

字体属性

font-family: "Microsoft Yahei", "微软雅黑", "Arial";字体的版式,前面不能使用就用备胎
font-size:10px	字体的大小
font-weight:250px  字体的粗细
color:red		颜色的英文
	#abc456		16进制的6位数
	rgb(111,222,255)	三基色。范围0~255
	rgba(111,222,255,0.5)	三基色加透明度,透明度范围0~1

文字样式属性

text-align:left/right/center/justify  水平对齐方式
text-decoration:none  无样式,常用语去掉a标签默认的下划线
				underline  文本下的一条线
				overline  文本上的一条线
				line-through  穿过文本的一条线
text-indent:2em	空两个字符大小

背景属性

background-color:white  背景颜色
background-image:url('')  背景图片
background-repead:repead  默认图片会铺满整个网页
				  no-repead  背景图片不平铺
				  repead-x  水平平铺
				  repead-y  垂直平铺
background-position:center center 确定背景位置
background-attachment:fixed  背景不会随着文档的向下移动而滚动

对于上述都是以同样开头的属性是支持简写的
background:White url() no-repead center center

边框

可以设置整体的边框样式,也可单独设置边框的样式,例如:border-left-width
border-width:10px;								边框宽
border-style:solid/none/dotted/dashed;			边框的样式
border-color:red;								边框的颜色

简写:border:10px solid red;

border-radius:50%  								可以设置为圆,半径为长与宽的一半

display属性

display:none;	文档中元素存在,但是不显示
		block;	将标签设置为块级标签
		inline; 将标签设置为行内标签
		inline-block; 标签可以在一行,且可以设置宽和高

css盒子模型

margin:用于控制元素周围空间的间隔,通俗点就是与邻居标签的距离
border:本身边框
padding:标签内部内容与边框的巨鹿
content:盒子的内容

margin-top:10px;
margin-right:10px;
margin-bottom:10px;
margin-left:10px;
简写:margin:10px 10px 10px 10px ;
margin:0 auto;  水平居中

padding方法和margin相似

float浮动

假设我们看到的页面是一个平面的话,那么浮动就会让元素从平面升到空中,任何元素都可以浮动,浮动之后就会自动成为块级元素,只可以向左或向右浮动,知道碰到边框为止。

注意:浮动有可能导致父标签塌陷的问题

float:right  向左浮动
float:left   向右浮动

clear清除浮动

在clear规定的属性的某一侧是不允许有浮动元素的。

clear:left;		该标签的左侧是不能有浮动元素的
clear:right;	该标签的右侧不能有浮动元素
clear:both;		两个均不能出现浮动元素

清除浮动的影响,除了使用clear还有两种方式:
1.自己添加一个有高度的div。
2.通用的解决方式是继承一个自定义的类clearfix,
.clearfix:after {
    content:'';
    display:block;
    clear:both;
}

溢出属性overflow

overflow:visible;		多出内容默认可见,在框外可见
overfloe:hidden;		多出部分在框外不可见
overflow:scroll;		加一个滚动条
overflow:auto;			内容被修剪的话,就会显示滚动条

最佳案例:原型头像的设置。
<style>
        p {background-color: gray; padding: 20px;}
        #d1 {
            width:200px;
            height:200px;
            border-radius: 50%;
            overflow: hidden;
        }
        #d2 {
            max-width: 100%;
        }
</style>

<div id="d1">
    <img src="https://i3.mmzztt.com/2020/05/29a105.jpg" alt="" id="d2">
</div>

position定位

定位分为四种:
position:static;	默认值,没有定位过。无法作为绝对定位的参照物
position:relative;	相对定位。以自己原始位置为参照物定位
position:absolute;	绝对定位。相对定位过的父元素为原点定位
position:fixed;		固定定位。固定在某一个位置且不会改变,原点是基于浏览器窗口

验证浮动和定位是否脱离文档流(原来的位置是否保存)

不脱离文档流:相对定位

脱离文档流:浮动、相对定位、固定定位

z-index模态框

是设置对象的层叠顺序,相当于在平面的文档上,又加了一个z轴,而z-index就是设置z的高度。值高的就会压着值低的,导致值低的元素会被遮挡。

只能针对已经定位过的元素进行设置,同时,比较数值的时候是看父元素的z-index。

opacity透明度

定义透明效果,之前在颜色中rgba()也有一个透明度,但是只能针对颜色,而这个透明度则是针对元素。取值范围是0~1之间。

相关文章: