高度塌陷:当所有的子元素浮动的时候,且父元素没有设置高度,这时候父元素就会产生高度塌陷。
清除浮动的方式:
优点: 快速简单,代码少
缺点:无法进行响应式布局
overflow:hidden;zoom:1;
(针对ie6的兼容)优点:简单快速,代码少,兼容性较高
缺点:超出部分被隐藏,布局时要注意
clear:both;height:0;overflow:hidden
优点:简单快速,代码少,兼容性较高
缺点:增加空标签,不利于页面优化
overflow:auto
优点:简单,代码少,兼容性好
缺点:内部宽高超过父级div时,会出现滚动条
给塌陷的元素添加伪元素
.father :after{content:'随便写';clear:both;display:block;height:0;overflow:hidden;visibility:hidden;
}
优点:写法固定,兼容性高
缺点:代码多
本来添加谷歌私有属性 -webkit-text-size-adjust:none
,现在-webkit-transform:scale()
在图片未可视区域添加一个滚动条事件,判断图片位置与浏览器顶端和页面的距离,如果前者小于后者,优先加载
将当前展示图片的前一张和后一张优先下载
cssprite
或者svgsprite
margin
和padding
在什么场合下使用margin外边距:自身边框到另一个边框之间的距离
padding内边距:自身边距到自身内容之间的距离
当需要在border外侧添加空白时用margin,当需要在border内测添加空白时用padding
em的值并不是固定的,em会继承父级元素的字体大小(参考物是父元素的font-size)em中所有的字体都是相对于父元素的大小决定的
1em=1rem=16px 在body中加入font-size:62.5% 这样直接就是原来的px数值除以10加上em就可以
左右两栏均左浮动,左右两栏采用负的margin值,中间栏被宽度为100%的浮动元素包起来
左栏左浮动,右栏右浮动,中间栏放最后
左右两栏采用绝对定位,分别固定于页面的左右两侧,中间的主体栏用左右margin值撑开距离
左右固定宽,中间flex:1
1.DNS解析
2.TCP连接
3.发送http请求
4.服务器处理请求并返回http报文
5.浏览器解析渲染页面
6.连接结束
输入url后,首先需要找到这个url域名的服务器ip,浏览器首先会寻找缓存,查看缓存中是否有记录。缓存的查找记录为:浏览器缓存->系统缓存->路由器缓存,
缓存中没有则查找系统的hosts文件中是都有记录,如果没有则查询DNS服务器,
查询DNS服务器得到服务器的ip地址后,浏览器根据这个ip以及相应的端口号,构造一个http请求,这个请求报文会包括这次请求的信息,主要是请求方法,请求说明和请求附带的数据,并将这个http请求封装在一个tcp包中, 这个tcp包会依次经过传输层、网络层、数据链路层、物理层到达服务器,服务器解析这个请求来做出响应,返回相应的html给浏览器,
闭包可以简单理解成:定义在一个函数内部的函数。其中一个内部函数
在包含它们的外部函数之外被调用时,就会形成闭包。
特点:
1.函数嵌套函数。
2.函数内部可以引用外部的参数和变量。
3.参数和变量不会被垃圾回收机制回收。使用:
1.读取函数内部的变量;
2.这些变量的值始终保持在内存中,不会在外层函数调用后被自动清除。优点:
1:变量长期驻扎在内存中;
2:避免全局变量的污染;
3:私有成员的存在 ;缺点:会造成内存泄露
push() 从后面添加元素,返回值为添加完后的数组的长度
pop() 从后面删除元素,只能删除一个,返回值是删除的元素
shift() 从前面删除元素,只能删除一个,返回值是删除的元素
unshift() 从前面添加元素,返回值是添加完后的数组的长度
splice(i,n) 删除从索引i开始之后的那个元素,返回值是删除的元素
concat() 连接两个数组,返回值为连接后的新数组
split() 将字符串转化为数组
sort() 将数组进行排序,返回值是排好的数组,默认是按照最左边的数字进行排序,不是按照数字大小排序的
reverse() 将数组反转,返回值是反转后的数组
slice(start,end)切去索引值start到索引值end的数组,不包含end索引的值,返回值是切出来的数组
forEach(callback) 遍历数组,无return 即使有return,也不会返回任何值,并且会影响原来的数组
map(callback) 映射数组(遍历数组),有return返回一个新数组
filter(callback) 过滤数组,返回一个满足要求的数组
promise是用来解决两个问题的:
代码难以维护,常常第一个的函数的输出是第二个函数的输入这种现象
promise可以支持多并发的请求,获取并发请求中的数据,这个promise可以解决异步的问题,本身不能说promise是异步的
async 就是 generation和promise的语法糖,async就是将generator的*换成 async,将yiled换成await
函数前必须加一个async,异步操作方法前加一个await关键字,意思就是等一下,执行完了再继续走,注意:await只能在async函数中运行,否则会报错。
promise如果返回的是一个错误的结果,如果没有做异步处理,就会报错,所以用try…catch捕获一下异常就可以了
一句话概况:闭包就是能够读取其他函数内部变量的函数,或者子函数在外调用,子函数所在的父函数的作用域不会被释放。
通过 apply和call改变函数的this指向,他们两个函数的第一个参数都是一样的,表示要改变指向的那个对象,第二个参数apply是数组,而call则是 arg1,arg2…这种形式。通过bind改变this作用域会返回一个新的函数,这个函数不会马上执行。
clientHeight:表示的是可视区域的高度,不包含border和滚动条
offsetHeight:表示可视区域的高度,包含了Border和滚动条
scrollHeight:表示了所有区域的高度,包含了因为滚动隐藏的部分
clientTop:表示边框border的厚度,在未指定的情况下一般为0
scrollTop:滚动后被隐藏的高度,获取对象相对于由offsetParent属性指定的父坐标(css定位的元素或body元素)距离顶端的高度。
onloading......
onloading......
apply:调用一个对象的一个方法,用另一个对象替换当前对象
call:调用一个对象的一个方法,用另一个对象替换当前对象
从定义中可以看出,call和apply都是调用一个对象的一个方法,用另一个对象替换当前对象,而不同之处在于传递的参数,apply最多只能由两个参数——新this对象和一个数组argArray,如果arg不是数组则会报错。
相同点:两个方法产生的作用是完全一样的,call apply作用就是借用别人的方法来调用,就像调用自己的一样。
不同点:方法传递的参数不同
http是超文本传输协议,信息是明文传输,https是具有安全性的ssl解密传输协议
http和https连接方式完全不同,端口也不同,http是80,https是443
http的连接很简单,是无状态的,https协议是由ssl+http协议构建的可进行加密传输,身份认证的网络协议,比http协议安全
vue是一套构建用户界面的渐进式自底向上增量开发的MVVM框架
vue的核心只关注视图层
核心思想:
数据驱动:视图的内容随着数据的改变而改变
组件化:可以增加代码的复用性,可维护性,可测试性,提高开发效率,方便重复使用,体现了高内聚低耦合
键盘修饰符:
系统修饰符:
key值的存在保证了唯一性,vue在执行时,会对节点进行检查,如果没有Key值,那么vue检查到这里有dom节点,就会对内容清空并赋新值,如果有key值存在,那么会对新老节点进行对比,比较两者key是否相同,进行调换位置或删除操作。
vue中路由跳转有两种,分别是声明式和编程式
用js方式进行跳转的叫编程式导航 this.$router.push()
用router-link 进行跳转的叫声明式, router-view路由出口,路由模板显示的位置
路由中的name属性有什么作用?
在router-link中使用name导航到对应路由
使用name导航的同时,给子路由传递参数
hash 模式地址栏中有#,history没有,history模式下刷新,会出现404情况,需要后台配置
使用javascript来对location.hash进行配置,改变url的hash值
可以使用hashChange事件来监听hash值的变化
html5提供了history api来实现 url的变化,其中最主要的api有以下两个:history.pushState()和history.replaceState(0。这两个api可以在不进行刷新的情况下,操作浏览器的历史记录,唯一不同的是,前者是新增一个历史记录,后者是直接替换当前的历史记录。
mvc模型视图控制器,视图是可以直接访问模型,所以,视图里面会包含模型信息,mvc关注的是模型不变,所以,在mvc中,模型不依赖视图,但是视图依赖模型。
mvvm 模型 视图 和vm vm是作为模型和视图的桥梁,当模型层数据改变,vm会检测到并通知视图层进行相应的修改
在进行内容操作时,对于设置和获取元素的内容使用同一个函数进行操作,设置元素内容时直接在函数中传入参数即可。
1.html() 作用:获取/设置元素的标签体内容
//获取mydiv的标签体内容 var divValue = $(‘#mydiv’).html()
//设置mydiv的标签体内容 var divValue = $(‘#mydiv’).html(‘您好’)
2.Text() 作用:获取/设置元素的标签体纯文本内容
//获取mydiv文本内容 var divText = $(‘#mydiv’).text()
//设置mydiv文本内容 var divText = $(‘#mydiv’).text(‘您好’)
3.Val() 作用:获取/设置元素的value属性值
//获取myinput的value值 var value = $(‘#myinput’).val()
//设置myinput的value值 var value = $(‘#myinput’).val(‘您好’)
(1)通用属性操作
1.attr() 作用:获取/设置元素的属性
//获取北京节点的name属性 var bj = $(‘#bj’).attr(‘name’); alert(bj);
//设置北京节点的name属性的值为dabeijing $(‘#bj’).attr(‘name’,’dabeijing’)
//新增北京节点的discription属性,属性值是didu $(‘#bj’).attr(‘discription’,’didu’)
2.removeAttr() 作用:删除属性
//删除北京节点的name属性并检验name属性是否存在
$(‘#bj’).removeAttr(‘name’);
3.Prop() 作用:获取/设置元素的属性
//获得hobby的选中状态 var hobby_type = $(‘#hobby’).prop(‘checkbox’);
4.removeProp() 作用:删除属性
//删除hobby的checkbox属性 var hobby_type = $(‘#hobby’).removeProp(‘checkbox’)
5.attr和prop区别
1.如果操作的是元素的固有属性,则建议使用prop
2.如果操作的是元素的自定义属性,则建议使用attr
(2)对class属性操作
1.addClass() 作用:添加class属性值
//添加one标签的class属性
$(‘#b2’).click(function(){$(‘#one’).addClass(‘second’);
})
2.removeClass() 作用:删除class属性值
//删除one标签的class属性
$(‘#b3’).click(function(){$(‘#one’).removeClass(‘second’);
})
3.toggleClass() 作用:切换class属性
//为one标签的class样式进行切换,有class属性就删除,没有就添加
$(‘#b4’).click(function(){$(‘#one’).toggleClass(‘second’);
})
在这里对该函数做一个详细的介绍:
判断如果元素对象上存在class=”one”,则将属性值one删除掉,如果元素对象上不存在class=”one”,则添加
4.Css() 作用:修改元素属性
//
$(‘#b5’).click(function(){Var backgroundColor = $(‘#one’).css(‘backgroundColor’);Alert(backgroundColor);
})
//
$(‘#b6’).click(function(){$(‘#one’).css(‘backgroundColor’,’green’);
})
1.append() 作用:父元素将子元素追加到末尾
2.Prepend() 作用:父元素将子元素追加到开头
3.AppendTo() 作用:子元素追加到父元素的末尾
4.prependTo() 作用:子元素追加到父元素的开头
5.After() 作用:添加元素到元素后边
6.Before() 作用:添加元素到元素前边
7.insertAfter() 作用:将元素添加到另一个元素后边,兄弟关系
8.insertBefore() 作用:将元素添加到另一个元素前边,兄弟关系
9.Remove() 作用:移除元素,将对象移除掉
10.Empty() 清空元素的所有后代元素