ofo前端面试篇

5 篇文章 0 订阅
3 篇文章 0 订阅

今天参加了ofo的校招面试,自我感觉就是有一些东西是写过但是没存住,或者是说网上有现成的源码自己用的时候可能就是copy过来修改一下就直接用了。就答得感觉稀烂。不说了直接上题吧。
一、页面元素垂直居中
对于行内元素


 若该行内元素只有一行,且该行内元素父元素的高度一定,可以设置该行内元素的line-height属性,属性值为父元素的高度。

对于块级元素

1.可以使用vertical-align:middle属性实现垂直居中,但是读过张鑫旭老师的博客之后发现这个属性是有一定局限性的,它只适合inline或者inline-block这种属性的元素(table中的td,或者说display:table-cell勉强也算),也就是说如果你单纯给一个div添加vertical-align:middle是不起作用的。

2.对行内元素、块级元素都有效。
使用弹性伸缩布局。 1、设置元素的position+margin属性, 使用场景:针对静态布局,要垂直居中元素的高、宽值确定时
首先,设置块级元素div的父元素的 position:relative;
其次,设置块级元素div的css position:absolute;top:50%;left:50%;
最后,设置该块级元素div的外边距:margin-top: -(height/2);
margin-left:-(width/2)(我回答的就是这个方法,因为这个我用的最多)

上面这种方法主要是针对子元素宽高已定的,那么如果响应式或者流体布局就需要另外一种方法position+transform

同样设置父元素div的position:relative; 其次设置块级元素div的css
position:absolute;top:50%;left:50%;
设置该块级元素div的transform:transform:translate(-50%,50%);

针对响应式的第二种方法

设置父元素的CSS属性 display:flex; justify-content:center;

二、css属性的优先级

从选择器权重优先级我们可以知道
内联>id选择器>class选择器=伪类选择器>标签选择器
但是 !important这个属性,如果说有内联与 !important两个同时存在,那么他们的权重 !important是最高的

三、js数组类型判断
instanceof、constructor、函数

function isArray(o) {
 return Object.prototype.toString.call(o) === '[object Array]';
}

四、js数组去重()

//1 对比去重
Array.prototype.rm = function() {
        var arr = [this[0]];
        for (var i = 1; i < this.length; i++) {
            var temp = false;
            for (var j = 0; j < arr.length; j++) {
                if (this[i] == arr[j]) {
                    temp = true;
                    break;
                }
            }
            if (!temp) {
                arr.push(this[i]);
            }
        }
        return arr;
    }
    //2 遍历去重
Array.prototype.rm2 = function() {
        var arr = [];
        for (var i = 0; i < this.length; i++) {
            for (var j = i + 1; j < this.length; j++)
                if (this[i] === this[j])
                    j = ++i;
            arr.push(this[i]);
        }
        return arr;
    }
    //3 排序去重
Array.prototype.rm3 = function() {
        this.sort(function(a, b) {
            return b - a;
        });
        var arr = [this[0]];
        for (var i = 1; i < this.length; i++) {
            if (this[i] !== arr[arr.length - 1]) {
                arr.push(this[i]);
            }
        }
        return arr;
    }
    //4 ES6 set方法   
Array.prototype.rm4 = function() {
    return [...new Set(this)];
}

//5 indexOf
Array.prototype.rm5 = function() {    
    var arr = [this[0]];
    for (var i = 1; i < this.length; i++) {
        if (this.indexOf(this[i]) == i) 
            arr.push(this[i]);
    }
    return arr;
}

剩下一些容我好好想想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值