前端面試中的css常用知識點總結

1、CSS選擇器的優先級

!important > 內聯 > id選擇器 > 類選擇器 > 標籤選擇器

多個類選擇器疊加(256)之後的優先級大於一個id選擇器

!important 用於強調CSS屬性具有最高的優先級。IE6不支持這種用法。

CSS選擇器的種類:

1.id選擇器(# myid)

2.類選擇器(.myclassname)

3.標籤選擇器(div, h1, p)

4.相鄰選擇器(h1 + p)

5.子選擇器(ul > li)

6.後代選擇器(li a)

7.通配符選擇器( * )

8.屬性選擇器(a[rel = "external"])

9.僞類選擇器(a: hover, li:nth-child)

2、CSS優先級權重計算法

CSS優先級的計算規則如下:

元素標籤中定義的樣式(Style屬性),加1,0,0,0

每個ID選擇符(如 #id),加0,1,0,0

每個Class選擇符、每個屬性選擇符、每個僞類(:hover)加0,0,1,0

每個元素選擇符(如p)或僞元素選擇符(如 :firstchild)等,加0,0,0,1

然後,將這四個數字分別累加,就得到每個CSS定義的優先級的值

然後從左到右逐位比較大小,數字大的CSS樣式的優先級就高。

3、超鏈接訪問過後hover樣式就不出現的問題是什麼?如何解決?

被點擊訪問過的超鏈接樣式不在具有hover和active了,解決方法是改變CSS屬性的排列順序: L-V-H-A(link,visited,hover,active)

4、什麼是Css Hack?ie6,7,8的hack分別是什麼?

針對不同的瀏覽器寫不同的CSS code的過程,就是CSS hack。

#test {  

        width:300px;  

        height:300px;  

        background-color:blue;      /*firefox*/

        background-color:red\9;      /*all ie*/

        background-color:yellow\0;    /*ie8*/

        +background-color:pink;        /*ie7*/

        _background-color:orange; /*ie6*/    }  

        :root #test {  background-color:purple\9;  }  /*ie9*/

    @media all and (min-width:0px){

          #test {background-color:black\0;}

 }  /*opera*/

    @media screen and (-webkit-min-device-pixel-ratio:0){

#test {background-color:gray;}

} /*chrome and safari*/

5、描述一個"reset"的CSS文件並如何使用它。知道normalize.css嗎?你瞭解他們的不同之處?

不同的瀏覽器對一些元素有不同的默認樣式,如果你不處理,在不同的瀏覽器下會存在必要的風險,或者更有戲劇性的性發生。
你可能會用Normalize來代替你的重置樣式文件。它沒有重置所有的樣式風格,但僅提供了一套合理的默認樣式值。既能讓衆多瀏覽器達到一致和合理,但又不擾亂其他的東西(如粗體的標題)。

6、display:none與visibility:hidden的區別是什麼?

display : 隱藏對應的元素但不擠佔該元素原來的空間。

visibility: 隱藏對應的元素並且擠佔該元素原來的空間。
即是,使用CSS display:none屬性後,HTML元素(對象)的寬度、高度等各種屬性值都將“丟失”;而使用visibility:hidden屬性後,HTML元素(對象)僅僅是在視覺上看不見(完全透明),而它所佔據的空間位置仍然存在。

7、CSS盒子模型

Box Model規定了元素框處理元素內容(element content)、內邊距(padding)、邊框(border) 和 外邊距(margin) 的方式。盒子模型有 block,inline-block,inline,flex,table-cell等幾種顯示方式。


如圖所示,元素的高度和寬度指的是盒子模型的content區域的高度和寬度,不包括內邊距以外的部分。(IE的content則是包含border、內邊距和content)。盒子模型有兩種,W3C標準盒子模型(content-box)以及IE盒子模型(border-box)。

給大家推薦一個技術交流學習圈,裏面概括移動應用網站開發,css,html,webpack,vue node angular以及面試資源等。獲取資料
對web開發技術感興趣的同學,可以加入交流圈👉👉👉1007317281,不管你是小白還是大牛都歡迎,還有大牛整理的一套高效率學習路線和教程與您免費分享,同時每天更新視頻資料。

8、相對定位relative、浮動float以及絕對定位absolute的區別?

1)相對定位是在常規流中的定位。一旦一個框按照常規流或者是浮動得到定位,它還可以相對該位置而偏移, 這就是相對定位。偏移後,在常規流中依然佔據原有位置,偏移量並不會對後續的block產生擠佔,後續的塊就好像沒有感知到偏移,依然按照常規流位置排位。

2)絕對定位(Absolute positioning)元素定位的參照物是其包含塊(第一個relative定位的祖先元素)進行定位,不一定是其父元素。絕對定位元素完全脫離了常規流,每個絕對定位的框都可以看做一個單獨的圖層,不會對其他層框的定位產生影響。絕對元素定位的 top 和 left 值跟絕對元素未脫離常規流之前在常規流中位置有關。

3)浮動框就是一個框在當前行被向左或向右挪動(偏移),它不在常規流中。在該浮動框之前或之後創建的非定位框垂直排列,就好象浮動框並不存在一樣。當前行裏浮動框前的任何內容,都將被重新排列到該浮動另一側的第一個可用行裏。

9、清除浮動的用法?

在非IE瀏覽器(如Firefox)下,當容器的高度爲auto,且容器的內容中有浮動(float爲left或right)的元素,在這種情況下,容器的高度不能自動伸長以適應內容的高度,使得內容溢出到容器外面而影響(甚至破壞)佈局的現象。這個現象叫浮動溢出,爲了防止這個現象的出現而進行的CSS處理,就叫CSS清除浮動。
使用方法:

1、在浮動元素後使用一個空元素如<div class="clear"></div>,並在CSS中賦予.clear{clear:both;}屬性即可清理浮動。

2、給浮動元素的容器添加overflow:hidden;或overflow:auto;可以清除浮動

3、什麼都不做,給浮動元素後面的元素添加clear屬性。

4、利用僞類清除浮動,給浮動元素的容器添加一個clearfix的class,然 後給這個class添加一個:after僞

元素實現元素末尾添加一個看不見的塊元素(Block element)清理浮動。

//一種常見利用僞類清除浮動的代碼

.clearfix:after {

    content:"."; //這裏利用到了content屬性

    display:block;

    height:0;

    visibility:hidden;

    clear:both;

}       //歡迎加入前端全棧開發交流圈一起學習交流:1007317281

.clearfix {

    *zoom:1;

}

10、BOX模型的margin在IE比在其他瀏覽器大2px的解決辦法


div{margin:30px!important;margin:28px;}

注意這兩個margin的順序一定不能寫反,據阿捷的說法!important這個 屬性IE不能識別,

但別的瀏覽器可以識別。所以在IE下其實解釋成這樣:

div{maring:30px;margin:28px}

重複定義的話按照最後一個來執行,所以不可以只寫


margin:XXpx!important;

也可以這樣子hack


div {  _margin:28px;margin:28px\9;margin:30px;}

11、IE 3像素Bug的產生原因及解決辦法

當在同一行相鄰出現一個浮動的塊元素和一個非浮動的塊元素時,兩塊元素之間就會出現3px的裂痕。
解決辦法就是:對其中一個元素添加“_margin-*:-3px”的CSS屬性,或者將另外一個非浮動的元素設爲浮動。

12、IE6 雙邊距Bug的產生原因及解決辦法

當我們在浮動元素上面添加margin-*的屬性的時候,比如在float:left的元素CSS添加margin-left:50px,那麼最終在IE6下面的顯示就是該元素的margin-left最終變爲100px,邊距翻倍。
解決辦法:添加_display:inline

13、FOUC - Flash Of Unstyled Content 文檔樣式閃爍


<style type="text/css"  media="all">@import  "../fouc.css";</style>

而引用CSS文件的@import就是造成這個問題的罪魁禍首。IE會先加載整個HTML文檔的DOM,然後再去導入外部的CSS文件,因此,在頁面DOM加載完成到CSS導入完成中間會有一段時間頁面上的內容是沒有樣式的,這段時間的長短跟網速,電腦速度都有關係。
解決方法簡單的出奇,只要在<head>之間加入一個<link>或者<script>元素就可以了。

14、文本溢出省略的處理方法

1)單行文本溢出

.inline{

  overflow:hidden;

 white-space:nowrap;

 text-overflow:ellipsis;

}      //歡迎加入前端全棧開發交流圈一起學習交流:1007317281

2)多行文本溢出

.foo{

  display:-webkit-box!important;

  overflow:hidden;

  text-overflow:ellipsis;

  work-break:break-all;

  -webkit-box-orient:vertical;  /*方向*/

  -webkit-line-clamp:4;  /*顯示多少行文本*/

}

15、CSS實現垂直水平居中

方法1:

.parent {

          width:800px;

          height:500px;

          border:2px  solid  #000;

          position:relative;

}       //歡迎加入前端全棧開發交流圈一起學習交流:1007317281

.child {

            width:200px;

            height:200px;

            margin:  auto;  

            position:  absolute;  

            top:  0;  left:  0;  bottom:  0;  right:  0;

            background-color:  red;

}

方法2:

.parent {

            width:800px;

            height:500px;

            border:2px  solid  #000;

            display:table-cell;

            vertical-align:middle;

            text-align:  center;

        }       //歡迎加入前端全棧開發交流圈一起學習交流:1007317281

        .child {

            width:200px;

            height:200px;

            display:inline-block;

            background-color:  red;

        }

方法3:

.parent {

            width:800px;

            height:500px;

            border:2px  solid  #000;

            display:flex;

            justify-content:center;

            align-items:center;

        }

        .child {

            width:200px;

            height:200px;

            background-color:  red;

        }

方法4:

.parent {

            width:800px;

            height:500px;

            border:2px  solid  #000;

            position:relative;

        }       //歡迎加入前端全棧開發交流圈一起學習交流:1007317281

        .child {

            width:300px;

            height:200px;

            margin:auto;

            position:absolute;

/*設定水平和垂直偏移父元素的50%,

再根據實際長度將子元素上左挪回一半大小*/

            left:50%;

            top:50%;

            margin-left:  -150px;

            margin-top:-100px;

            background-color:  red;

        }

16、BFC

塊格式上下文是頁面CSS 視覺渲染的一部分,用於決定塊盒子的佈局及浮動相互影響範圍的一個區域。

BFC的創建方法:

根元素或其它包含它的元素;

浮動 (元素的float不爲none);

絕對定位元素 (元素的position爲absolute或fixed);

行內塊inline-blocks(元素的 display: inline-block);

表格單元格(元素的display: table-cell,HTML表格單元格默認屬性);

overflow的值不爲visible的元素;

彈性盒 flex boxes (元素的display: flex或inline-flex);

17、響應式圖片的CSS

所謂響應式圖片,就是根據圖片所在容器的大小來實時地按比例縮放。實現的辦法非常簡單,只需要設置img標籤的width:100%即可。

img {

width:100%;

}

如果 max-width 屬性設置爲 100%, 圖片永遠不會大於其原始大小:

img {

max-width: 100%;

}

18、CSS響應式網格系統原理

總的來說,網格系統就是利用百分比把視口等分爲12個,然後利用float屬性使之並列顯示。

* {

    box-sizing:  border-box;

}

[class*="col-"] {

    float:  left;

    padding:  15px;

    border:  1px  solid  red;

}

.col-1 {width:  8.33%;}

.col-2 {width:  16.66%;}

.col-3 {width:  25%;}

.col-4 {width:  33.33%;}

.col-5 {width:  41.66%;}

.col-6 {width:  50%;}

.col-7 {width:  58.33%;}

.col-8 {width:  66.66%;}

.col-9 {width:  75%;}

.col-10 {width:  83.33%;}

.col-11 {width:  91.66%;}

.col-12 {width:  100%;}

19、用LESS循環實現柵格類


.generate-columns(12);

.generate-columns(@n;  @i: 1) when (@i =< @n) {

  .column-@{i}  {

    width:  (@i * 100% / @n);

  }      //歡迎加入前端全棧開發交流圈一起學習交流:1007317281

.generate-columns(@n, (@i + 1));

}

20、使用perspective屬性和transform:perspective()函數的區別

以上的兩種書寫格式都會生成一個3D立體效果,但是它們之間有一些區別。使用功能函數的方式可以很方便的在單個元素上應用3D transform,但是當在多個元素上使用時,轉換的元素不會得到預期的效果。如果你爲不同的元素使用相同的transform,每一個元素都會有自己的消失點。爲了解決這個問題,可以在父元素上使用perspective屬性,這樣,所有的子元素都可以共享同一個3D空間。

perspective-origin: 25% 75%,等價於perspective-origin x和perspective-origin y的合體,用來設置鏡頭聚焦點的位置(舞臺中心)

transform-style: preserve-3d,transform-style屬性也是3D效果中經常使用的,其兩個參數,

flat|preserve-3d. 前者flat爲默認值,表示平面的;後者preserve-3d表示3D透視。

backface-visibility:hidden|visibility設置背後元素是否可見

給大家推薦一個技術交流學習圈,裏面概括移動應用網站開發,css,html,webpack,vue node angular以及面試資源等。獲取資料
對web開發技術感興趣的同學,可以加入交流圈👉👉👉1007317281,不管你是小白還是大牛都歡迎,還有大牛整理的一套高效率學習路線和教程與您免費分享,同時每天更新視頻資料。

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