收录一些常用的居中方式,包括水平居中和垂直居中。
虽然这是很老的知识了,但是想要做的事,什么时候都不算晚。
其实使用 flex 或者 grid 能够解决大部分布局情况,虽然我还不会使用 grid 就是了。
另外,flex 真的好用哈哈哈哈哈哈哈哈哈。
收录一些常用的居中方式,包括水平居中和垂直居中。
虽然这是很老的知识了,但是想要做的事,什么时候都不算晚。
其实使用 flex 或者 grid 能够解决大部分布局情况,虽然我还不会使用 grid 就是了。
另外,flex 真的好用哈哈哈哈哈哈哈哈哈。
局部处理
全局处理
BFC 是一个独立的渲染区域,只有 Block-level box 参与,它规定了内部的 Block-level Box 如何布局,并且与这个区域外部毫不相干。
Box 是 CSS 布局的对象和基本单位,一个页面是由一个或多个 Box 组成。元素的类型和 display 属性决定了这个 Box 的类型。不同类型的 Box 会参与不同的 Formatting Context(一个决定如何选人文档的容器),因此 Box 内的元素会以不同的方式渲染。
创建规则
作用
W3C 盒模型:内容(content)、填充(padding)、边界(margin)、边框(border);
IE 盒模型:IE 的 content 部分把 border 和 padding 计算进去了
水平居中方法
垂直居中的方法
1 | <!DOCTYPE html> |
将网速调整至低速,执行以上代码,会发现能够控制台第一时间输出的是 before css
之后能够获取到 h1 标签,但是却没有渲染出来,也就说明 CSS 下载过程并不会阻塞 DOM 的解析,但是会阻塞 DOM 的渲染。隔了一段时间之后才能看到 after css
的字样,但这不能证明会阻塞,但是当我们去掉 link 标签之后,after css
会马上被打印出来,这样就能够证明 CSS 的下载会阻塞 js 的执行
附 webkit 流程一张
https://blog.csdn.net/y_programmer_ape/article/details/107307676
vue 中 data 为什么必须是一个函数?为什么需要 return 返回?
vue 中 data 必须是一个函数的原因是为了保证组件的独立性和可复用性。data 是一个函数,组件实例化的时候这个函数将被调用,返回一个对象,计算机会给这个对象分配一个地址,实例化几次就分配几个地址,他们所在地址不同,所以每个组件中的数据互不干扰,改变一个组件的状态其他的不会发生改变。
不使用 return 包裹的数据会在项目的全局可见,会造成污染。使用 return 包裹后数据中变量只会在当前的组件中生效,不会影响其他组件。
由于 js 的限制,直接给一个数组项赋值,vue 能不能检查到变化?
不能,用索引直接设置一个数组项或者修改数组长度时,vue 不能检测到数组变化(引用地址不变)(栈上的值不变)
为了解决这个问题,vue 提供了如下操作方法:
其实这些方法也是修改后改变引用地址吧?
父子传值问题
父传子:子组件通过 prop 接受
子传父:
vuex 的理解
vuex 是 vue 的状态管理模式,每个 vuex 的核心就是 store(仓库),包含着应用中的大部分状态(state)。
vuex 的存储是响应式的,当组件从 store 中获取状态时,当 state 里面的状态发生改变时,组件也会做出相应的更新。
改变 store 里的状态的唯一方法是显式提交一个 mutation。
主要包括几个模块:
在标准的 JavaScript 中, Ajax 异步执行调用基于下面哪一个机制才能实现?
答案:Event 和 callback,以及 Deferral 和 promise。
其中 Event 指的是 eventloop 而不是 DOM Event。Deferral 和 promise 是在 ES6 之后出现的,标准答案应该是 event 和 callback。
白屏时间(first paint) 和可交互时间(dom ready)的关系
答案:先是白屏时间,然后才是可交互时间。
白屏时间指的是用户从打开页面开始到页面开始有东西呈现为止;
首屏时间指的是用户浏览器首屏内所有内容都呈现出来所花费的时间;
用户可操作时间(dom interactive)指的是用户可以进行正常的点击、输入等操作;
总下载时间指的是页面所有资源都加载完毕并呈现出来所花费的时间,即页面 onload 的时间;
css 中不可以继承的属性
几乎所有与当前元素轮廓相关的内容都不可以。
display、margin、border、padding、background、height、min-height、max-height、width、min-width、max-width、overflow、position、top、right、bottom、left、z-index、float、clear、table-layout、vertical-align、page-break-after、page-break-before。
当页面中存在多个 <link href="main1.css" rel="stylesheet" />
时,浏览器会同时开始加载,先加载完的优先解析,如果遇到相同的选择器规则,则后面的会将前面的覆盖。
隐约雷鸣,阴霾天空,但盼风雨来,能留你在此
隐约雷鸣,阴霾天空,即使天无雨,我亦留此地
设计模式真的是学了忘,忘了学,学了又忘,学的时候想着优化的地方还挺多,要用到的时候根本想不起来。
多学一点东西,多一种思考方式,虽然不一定用得到,但是积累到某个时刻一定会有回报的。
每个人的封装都有自己的风格在里边,所以有自己的风格没有问题。
这是一个关于 umi-request 通用请求的的封装,已实现的部分功能:
newHeaders.Authorization
减少调用时的 token 输入;withToken
参数不校验 token;showError=false
实现;(尽量不用吧,性能问题)1 | import { request as umiRequest } from 'umi'; |
使用方法:
1 | const getTitle = (params) => { |
其实很多时候官方文档给我们写好了许多东西,只是我们没有细心去观察,去使用。
日常会用到的一些 git 指令。
也不是第一次学习 vue 了,也不是最后一次学习 vue。
有时候人们很喜欢造一些名字很吓人的名词,让人一听这个名词就觉得自己不可能学会,从而让人望而却步。但是其实这些名词背后所代表的东西其实很简单。—— 来自 React.js 小书
第一次遇到高阶函数是曾溪叫我们写 PHP 的时候教的,当初好像搞懂了,又好像没懂。
之后遇到 react 高阶组件就蒙了,才发现我根本没懂。
以此告诫自己,要多记笔记,多学习。
我必须羞耻地承认,我可以谈话的对象数量越来越少了。 —— 维特根斯坦
前面我们写过一篇 Promise 基础,这让我们知道了怎么用 Promise。
但是仅仅知道怎么用就够了嘛?我们还需要知道怎么自行封装一个 Promise。以及如何应付面试(●’◡’●)。