ofo前端面試篇

今天參加了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;
}

剩下一些容我好好想想

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章