<div>
<section class="a1">a1</section>
<section class="a2">a2</section>
<section class="a3">a3</section>
<section class="a4">a4</section>
<section class="a5">a5</section>
</div>
div {
width: 180px;
height: 50px;
}
section {
float: left;
}
.a1 {
width: 50px;
height: 50px;
background-color: tan;
}
.a2 {
float: right;
width: 50px;
height: 50px;
background-color: tan;
}
.a3 {
width: 80px;
height: 25px;
background-color: red;
}
.a4 {
width: 40px;
height: 25px;
background-color: #ddd;
}
.a5 {
width: 40px;
height: 25px;
background-color: #666;
}
复制代码
div {
width: 180px;
height: 50px;
position: relative;
}
.a1 {
position: absolute;
width: 50px;
height: 50px;
background-color: red;
}
.a2 {
position: absolute;
left: 50px;
width: 80px;
height: 25px;
background-color: blue;
}
.a3 {
position: absolute;
left: 50px;
top: 25px;
width: 40px;
height: 25px;
background-color: green;
}
.a4 {
position: absolute;
left: 90px;
top: 25px;
width: 40px;
height: 25px;
background-color: tan;
}
.a5 {
position: absolute;
width: 50px;
height: 50px;
left: 130px;
background-color: red;
}
复制代码
div {
width: 180px;
height: 50px;
display: flex;
flex-flow: column wrap;
align-content: flex-start;
}
.a1 {
width: 50px;
height: 50px;
background-color: red;
}
.a2 {
width: 80px;
height: 25px;
background-color: tan;
}
.a3 {
flex-grow: 1;
background-color: aqua;
}
.a4 {
width: 25px;
height: 50px;
background-color: #fff;
}
.a5 {
flex-grow: 1;
background-color: red;
}
复制代码
div {
width: 180px;
height: 50px;
display: flex;
background-color: tan;
}
section {
flex: auto;
}
.a1 {
background-color: #fff;
}
.a2 {
background-color: #444;
}
.a3 {
background-color: red;
}
复制代码
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
复制代码
div {
width: 100px;
height: 100px;
position: relative;
background-color: tan;
display: table-cell;
vertical-align: middle;
text-align: center;
}
span {
background-color: red;
}
复制代码
div {
width: 100px;
height: 100px;
position: relative;
background-color: tan;
}
section {
width: 50px;
height: 50px;
display: inline-block;
margin: 25px;
background-color: red;
}
复制代码
div {
width: 100px;
height: 100px;
position: relative;
background-color: tan;
}
section {
width: 50px;
height: 50px;
margin: 25px;
float: left;
background-color: red;
}
复制代码
div {
width: 100px;
height: 100px;
background-color: tan;
text-align: center;
line-height: 100px;
}
span{
background-color: #fff;
vertical-align: middle;
}
复制代码
margin-box, border-box, padding-box, content-box
首先是最内层content-box,用来显示元素信息
向外是padding-box,主要用于设置元素四个方向的内边距,
再向外是border-box,用于设置元素四个方向的边框样式,
最外层是margin-box,为了让元素与其余元素隔开,对于垂直方向上的BFC元素的margin会发生合并,去较大的值
padding-box和margin-box是透明的,padding-box会受元素的背景的影响,能够经过box-sizing设置
padding-box和border-box不能去负值,margin-box能够取负值
还有元素的溢出属性,处理空白空间及文本溢出
* css中每一个元素都看做多个盒子的组合,咱们能够经过设置这些盒子的属性来改变元素的样式
* 若是设置 box-sizing 为 content-box,那么宽度就是内容区的宽度
* 若是设置为 border-box,那么宽度就死活内容区宽度+padding+border
复制代码
text-overflow:ellipsis; white-space:nowrap; overflow:hidden;javascript
浮动,绝对定位,overflow不为visible,非块级盒子块级容器
触发:
1. float 除了none之外的值
 2. overflow 除了visible 之外的值(hidden,auto,scroll )
 3. display (table-cell,table-caption,inline-block, flex, inline-flex)
 4. position值为(absolute,fixed)
特性:
在BFC中,盒子从顶端开始垂直地一个接一个地排列。
盒子垂直方向的距离由margin决定。属于同一个BFC的两个相邻盒子垂直方向的margin会发生重叠。
在BFC中,每个盒子的左外边距(margin-left)会触碰到容器的左外边缘(border-left)。
BFC不会与浮动盒子产生交集,而是紧贴浮动元素边缘。
计算BFC高度BFC时,天然也会检测浮动的子盒子高度。
应用:
自适应两栏布局
解决margin叠加问题:下面元素添加父元素:overflow: hidden;
清除浮动,计算BFC高度
复制代码
只要协议、主机、端口不一致,就会有跨域的问题css
function jsonp(url, value, cb) {
let cbName = 'JSONP_CALLBACK_' + Date.now() + '_' + Math.random().toString().slice(2)
window[cbName] = cb
url = url + '?q=' + value + '&callback=' + cbName
let script = document.createElement('script')
script.src = url
script.onload = () => {
document.body.removeChild(script)
delete window[cbName]
}
document.body.appendChild(script)
}
function ajax(url = '', data = {}, type = 'GET') {
if (type === "GET") {
let urlStr = ""
Object.keys(data).forEach(key => {
urlStr += key + '=' + data[key] + '&'
})
if (urlStr) {
urlStr = urlStr.substring(0, urlStr.length - 1)
url += '?' + urlStr
}
return axios.get(url)
} else if (type === "POST") {
return axios.post(url, data)
}
}
复制代码
Less的变量名使用@符号开始 Sass的变量是必须$开始html
声明:@mixin a($borderWidth:2px){}
调用:@include error();
复制代码
声明:.error(@borderWidth:2px){}
调用:.error();
复制代码
@extend .block; /*继承.block选择器下全部样式*/
复制代码
.block;/*继承.block选择器下全部样式*/
复制代码
客户端发送一个HTTP请求到服务器的请求消息包括如下格式:
请求行(request line)、请求头部(header)、请求体组成
请求行:
方法:
GET 获取资源
POST 向服务器端发送数据,传输实体主体
PUT 传输文件
HEAD 获取报文首部
DELETE 删除文件
OPTIONS 询问支持的方法
TRACE 追踪路径
URL
协议/版本号
请求头:
通用首部(General Header)
请求首部(Request Header)
响应首部(Response Header)
实体首部(Entity Header Fields)
请求体
复制代码
HTTP响应组成:响应行、响应头、响应体。
响应行
(HTTP/1.1)代表HTTP版本为1.1版本,状态码为200,状态消息为(ok)
响应头
Date:生成响应的日期和时间;
Content-Type:指定了MIME类型的HTML(text/html),编码类型是ISO-8859-1
响应体
复制代码
首先Websocket是基于HTTP协议的,或者说借用了HTTP的协议来完成一部分握手。
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
复制代码
http long poll 和 ajax 轮询均可以实现实时信息传递前端
特色:java
socket.io 是一个能实现多人远程实时通讯(聊天)的库 它包装的是 H5, WebSocket和轮询, 若是是较新的浏览器内部使用 WebSocket,若是浏览器不支持, 那内部就会使用轮询实现实时通讯react
1 输入网址 2 发送到DNS服务器,并获取域名对应的web服务器对应的ip地址 3 与web服务器创建TCP链接 4 浏览器向web服务器发送http请求 5 web服务器响应请求,并返回指定url的数据(或错误信息,或重定向的新的url地址) 6 浏览器下载web服务器返回的数据及解析html源文件 7 生成DOM树,解析css和js,渲染页面,直至显示完成webpack
// reduce
function reduce(ary, f, initVal) {
var start = 0
if (arguments.length == 2) {
initVal = ary[0]
start = 1
}
for (var i = start; i < ary.length; i++) {
initVal = f(initVal, ary[i], i, ary)
}
return initVal
}
// flattenDeep
function flattenDeep(ary) {
return [].concat(...ary.map(val => {
if (Array.isArray(val)) {
return flattenDeep(val)
} else {
return val
}
}))
}
复制代码
123${a}456
,\var imgs = document.querySelectorAll('img');
//offsetTop是元素与offsetParent的距离,循环获取直到页面顶部
function getTop(e) {
var T = e.offsetTop;
while(e = e.offsetParent) {
T += e.offsetTop;
}
return T;
}
function lazyLoad(imgs) {
var H = document.documentElement.clientHeight;//获取可视区域高度
var S = document.documentElement.scrollTop || document.body.scrollTop;
for (var i = 0; i < imgs.length; i++) {
if (H + S > getTop(imgs[i])) {
imgs[i].src = imgs[i].getAttribute('data-src');
}
}
}
window.onload = window.onscroll = function () { //onscroll()在滚动条滚动的时候触发
lazyLoad(imgs);
}
复制代码
Cookie 能够保持登陆信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现没必要输入用户名和密码就已经登陆了(固然,不排除用户手工删除Cookie),Cookie知足同源策略 Cookie 在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就立刻清除Cookie,不会记录用户信息,更加安全。ios
因为HTTP协议是无状态的协议,因此服务端须要记录用户的状态时,就须要用某种机制来识具体的用户,这个机制就是Session.典型的场景好比购物车,当你点击下单按钮时,因为HTTP协议无状态,因此并不知道是哪一个用户操做的,因此服务端要为特定的用户建立了特定的Session,用用于标识这个用户,而且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个惟一标识。web
Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据能够保存在集群、数据库、文件中; Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。ajax
第一步确认宏任务,微任务
宏任务:script,setTimeout,setImmediate,promise中的executor
微任务:promise.then,process.nextTick
process.nextTick优先级高于Promise.then
timers: setTimeout / setInterval
I/O callbacks: 不在其余阶段的全部回调函数
poll: 获取新的I/O事件
check:执行setImmediate
close callback: 执行关闭事件的回调函数
在整个轮询的开始执行process.nextTick
而后再执行setTimeOut、setInterval
再执行其余的回调函数
最后执行setImmediate
复制代码
axios / fetch
复制代码
Node核心思想:1.非阻塞;  2.单线程;  3.事件驱动。
Node 是一个服务器端 JavaScript 解释器
当线程遇到IO操做的时候,不会以阻塞的方式等待IO操做完成或者数据的返回,而是将IO操做发送给操做系统,
而后接着执行下一个操做,当操做系统执行完IO操做以后,以事件的方式通知执行IO的线程,
线程会在特定的时候执行这个事件。这一切的前提条件就是,系统须要一个事件循环,
以不断的去查询有没有未处理的事件,而后给预处理。
复制代码
redux 是一个独立的专门用于状态管理的js库
能够管理react应用中多个组件共享的状态
用redux对组件的状态进行集中式管理
组件:两个方面
展示数据 状态显示
与用户交互更新数据 更新状态
redux核心是一个store(仓库)
组件直接从store中读取状态
更新状态:
1. Action Creators ==>> dispatch(action) :传两个值(type和data) type是传的类型(删除,增长,建立,更新)
2. store
3. Reducers ==>> 接受(previousState, action) 返回(newState)
4. React Component
createStore()
store: 管理state, reducer
方法: getState() , dispatch(action) , subscribe(listener)
action对象
reducer返回的是新的状态
applyMiddleware 中间件
thunk 异步
复制代码
function connect(mapStateToProps,mapDispatchToProps){
return function(com){
return class extends React.Component{
render(){
return (
<Consumer> {store=>{ state = mapStateToProps(store.getState()) dispatch = mapDispatchToProps(store.dispatch) return <Comp {...state}{...dispatch}></Comp> }} </Consumer>
) }
}
}
}
复制代码
由于当Server端收到Client端的SYN链接请求报文后,能够直接发送SYN+ACK报文。 其中ACK报文是用来应答的,SYN报文是用来同步的。 可是关闭链接时,当Server端收到FIN报文时,极可能并不会当即关闭SOCKET, 因此只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。 只有等到我Server端全部的报文都发送完了,我才能发送FIN报文,所以不能一块儿发送。故须要四步握手。
action: 是store惟一的信息来源,把action发送给store必须经过store的dispatch方法。
每一个action必须有一个type属性描述action的类型。
复制代码
当系统面临大量用户访问,负载太高的时候,一般会使用增长服务器数量来进行横向扩展,使用集群和负载均衡提升整个系统的处理能力
1. 原型链继承
将父类的实例做为子类的原型
function Cat() {}
Cat.prototype = new Animal()
Cat.prototype.name = 'cat'
var cat = new Cat()
2. 构造继承
使用父类的构造函数来加强子类的实例,等因而复制父类的实例属性给子类
function Cat(name) {
Animal.call(this)
instance.name = name || 'Tom'
}
var cat = new Cat()
3. 实例继承
为父类实例添加新特性,做为子类的实例返回
function Cat(name) {
var instance = new Animal()
instance.name = name || 'Tom'
return instance
}
var cat = new Cat()
复制代码