todo
重绘和回流
渲染层级
选择器
css3
less,sass,postcss
transition,animation
transform translate3d
欲买桂花同载酒,终不似,少年游
todo
重绘和回流
渲染层级
选择器
css3
less,sass,postcss
transition,animation
transform translate3d
本文所指三栏布局为两侧宽度固定,中间宽度自适应的情况。
圣杯布局通过父元素padding,子元素margin-left以及相对定位来实现。
html如下
1 | <div class="content"> |
css
.content {
padding: 0 200px;
overflow: hidden;
}
.left,
.right,
.main {
float: left;
min-height: 100px;
position: relative;
}
.left,
.right {
width: 200px;
}
.left {
background-color: blue;
margin-left: -100%;
left: -200px;
}
.right {
background-color: red;
margin-left: -200px;
left: 200px;
}
.main {
background-color: green;
width: 100%;
}
html
1 | <div class="content"> |
css
1 | .content { |
似乎生活中常常会遇到这种情况,你去一家公司面试,前面面的都挺好。面试官问你的,
- vue和react在vdom上的异同
- vue中key的作用,v-if不设置key的时候的异常,数组index作为key的异常
- 介绍一下vue的diff算法,两个简单的假设
- 未知高度时如何实现展开折叠动画
- 如何实现固定表头
- 实现一个轮播图组建(为什么大家都爱轮播图),动画效果实现
你对基础的了解很好,进阶知识也都答上来了,然后面试官说,”那么好吧,你知道快排吗。”
???我头发。我leetcode上刷了100题,你问我快排?好吧,我不会。
为了应对这种情况,本文列举几种快排算法仅供参考。
1 | const quiksort = arr => |
1 | const quiksort = arr => { |
没有小数的情况
1 | c("11111234".replace(/(\d)(?=(\d{3})+$)/g, "$1,")); // 11,111,234 |
有小数的情况
1 | c("11111234.22".replace(/(\d)(?=(\d{3})+\.)/g, "$1,")); // 11,111,234.22 |
1 | c("abc,sdggs".toLowerCase().replace(/^[a-z]/g, L => L.toUpperCase())); // Abc,sdggs |
1 | c("asdasfg123".replace(/(^\w{4})/g, "xxxx$`")); // xxxxsfg123 |
去抖动。策略是当事件被触发时,设定一个周期延迟执行动作,若期间又被触发,则重新设定周期,直到周期结束,执行动作。 这是debounce的基本思想,在后期又扩展了前缘debounce,即执行动作在前,然后设定周期,周期内有事件被触发,不执行动作,且周期重新设定。
debounce的特点是当事件快速连续不断触发时,动作只会执行一次。 延迟debounce,是在周期结束时执行,前缘debounce,是在周期开始时执行。但当触发有间断,且间断大于我们设定的时间间隔时,动作就会有多次执行。
节流的策略是,固定周期内,只执行一次动作,若有新事件触发,不执行。周期结束后,又有事件触发,开始新的周期。 节流策略也分前缘和延迟两种。与debounce类似,延迟是指 周期结束后执行动作,前缘是指执行动作后再开始周期。
throttling的特点在连续高频触发事件时,动作会被定期执行,响应平滑。
1 | const debounce = (fn, time = 1000, immediate) => { |
老生常谈,水平垂直居中。为什么大家都爱水平垂直居中呢?
1 | <div class="father"> |
根据如上结构,通过css实现水平垂直居中。
利用父元素相对定位和子元素绝对定位进行水平垂直居中。根据是否知道子元素宽高,使用数值或者百分比的方式进行定位。
1 | .father { |
通过设置四向为0和margin: auto
实现。
1 | .father { |
通过设置left
和top
使child左上角位置移动到中间,然后再移动自身宽高一般使child中心至中间。
1 | .father { |
1 | .father { |
这几种方法使用了绝对定位,margin或者transform来使子元素水平垂直居中,根据是否知道具体宽高来使用margin或者transform。
##弹性盒子
1 | .father { |
1 | .father { |
这两种使用了flex弹性盒子布局来实现,随着浏览器兼容性的普及,弹性盒子也越来流行了。
1 | .father { |
使用了table-cell以及行内块元素来实现
1 | .father { |
利用伪元素撑开高度垂直居中。
1 | .father { |
利用父元素line-height
与inline-block子元素vertical-align
垂直居中
是不是有点疑惑为啥1、2、3都要用absolute
来定位,用relative
不行吗?
答案是可以的。😂
1 | .father { |
1 | .father { |
其实要想水还很再水出方法12、方法13等等,但是主要问题并不在这里,我觉得大家都喜欢问垂直居中问题的主要目的,还是想考验大家对基础css的了解,定位、布局、元素等,比如说相对布局和绝对布局,比如说块级元素和行内元素,比如说margin和padding,比如说百分比的参照者,比如说伪元素的运用,比如说transform用法等等。
最主要考察的是对这些基础实际运用能力和理解能力,并不是说面试官真的想知道你了解多少种垂直居中的方法,他只是想了解一下面试者css的基础罢了。
随手一个方法12
1 | .father { |
似乎生活中常常会遇到这种情况,你去一家公司面试,前面面的都挺好,你觉得你对基础算法的了解很好,各种排序,红黑树,二叉树,深度/广度优先算法都答出来了,leetcode上的若干困难题目也都答上来了,然后面试官说,”那么好吧,介绍一下你对原型的看法吧。”
???我头发。我leetcode上刷了100天,我费劲心思研究了各种算法和数据结构,你叫我讲讲原型?
为了应对这种情况,本文通过如下代码展示下js的原型仅供参考。
1 | const c = (...v) => console.log(...v); |
可以先猜一下是什么结果。。
好吧,不用猜了。结果如下
1 | My name is xiaoD, my age is 4. |
每个实例对象( object )都有一个私有属性(称之为 proto )指向它的原型对象( prototype )。该原型对象也有一个自己的原型对象( proto ) ,层层向上直到一个对象的原型对象为 null
。根据定义,null
没有原型,并作为这个原型链中的最后一个环节。至于谁指谁,应该从上面的代码中就可以清晰的看出来了。这里注意的是只有函数中才有 prototype 属性。
1 | class People { |
这里有三个注意点:
talk
方法中的this
,默认指向Student
类的实例。但是,如果将这个方法提取出来单独使用,this
会指向该方法运行时所在的环境(由于 class 内部是严格模式,所以 this 实际指向的是undefined
),从而导致找不到info
方法而报错。解决办法如代码中所示。(那么问题又来了,手写个apply,call,bind的polyfill吧)
1 | const obj = { |
拿走,不谢。
1 | Function.prototype.myApply = function(obj, [...args]) { |
知道了原型、原型链,那new一个对象的过程知道吗,能手写一个吗。
new一个对象的过程大概分成三步:
1 | const myNew = function(fn, ...args) { |
似乎生活中常常会遇到这种情况,你去一家公司面试,前面面的都挺好,你觉得你对基础的了解很好,进阶知识也都答上来了,然后面试官说,”那么好吧,就写一个最简单的选择排序算法看看吧。”
???我头发。我leetcode上刷了100题,我费劲心思研究了冒泡算法的4种写法,你叫我写选择排序算法?
为了应对这种情况,本文列举一种选择排序算法仅供参考。
1 | const select = arr => { |
主要思想就是选出最小的那个数放到开头,再选出剩下的最小的放到剩下的开头,依次下去。
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true
2021-01-03
#前端基础
2021-01-02
#JavaScript
2020-05-25
#JavaScript#WebAssembly
2019-05-05
#css
2019-05-05
#css
2019-04-28
#git
2019-04-24
#vscode
2019-04-21
#CSS
2019-04-20
#css
2019-04-20
2019-04-20
2019-04-18
#JavaScript
2019-04-15
#SegmentFault
2019-04-14
#JavaScript
2019-04-13
#JavaScript
2019-04-13
2019-04-13
#JavaScript#css#html
2019-04-13
#JavaScript#html
2019-04-13
#JavaScript
2019-04-13
#JavaScript
2019-04-10
#JavaScript
2019-04-10
#JavaScript
2019-04-10
#JavaScript
2019-04-10
#css
2019-04-07
#JavaScript
2019-04-07
#css
2019-04-07
#JavaScript#算法
2019-04-07
2019-04-07
2019-04-07
#JavaScript
2019-04-07
2019-04-07
#css
2019-04-07
#JavaScript
2019-04-07
#JavaScript
2019-04-07
#JavaScript
2019-04-07
#JavaScript
2019-04-07
#JavaScript
2019-04-04
#JavaScript#函数式编程
2019-04-02
#JavaScript#函数式编程
2019-04-02
#JavaScript#函数式编程
2019-04-02
#css
2019-04-02
#css
2019-04-01
#算法
2019-04-01
#正则
2019-04-01
#JavaScript
2019-03-31
#css
2019-03-31
#JavaScript
2019-03-31
#算法
2019-03-31
#算法
2019-03-30
#算法#leetcode
2019-03-30
#算法#leetcode
2019-03-30
#算法#leetcode
2019-03-29
#算法#leetcode
2019-03-28
#git
2018-09-28
#前端#css
2018-04-02
#前端#vue#vue-cli
2018-04-02
#前端#vue#vue-cli
2018-04-02
#前端#vue#vue-cli
2018-03-30
#前端#vue#vue-cli
2018-03-30
#前端#npm#nodejs
2018-03-21
#JavaScript#前端#es6
2018-03-20
#JavaScript#前端
2018-03-07
#前端#vue#bootstrap
2018-03-06
#前端#html
2018-03-02
#前端#vuejs
2018-02-28
#前端#threejs