CSS面試題


1.有哪些方式可以對一個DOM設置它的CSS樣式?

    外部樣式表。引入一個外部CSS文件;

   內部樣式表。將CSS代碼放在<head>標簽內部;

    內聯樣式,將CSS樣式直接定義在HTML元素內部;

2.CSS中可以通過哪些屬性定義,使得一個DOM元素不顯示在瀏覽器的可視范圍內?

    最基本的:

    設置display屬性為none,或者設置visiblity為hidden

    技巧性:

    設置高度為0, 設置透明度為0,設置z-index位置在-1000

3.超鏈接訪問過后hover樣式就不出現的問題時什么?如何解決?

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

4.什么是Css Hack?ie6,7,8的hack分別是什么?

    針對不同的瀏覽器寫不同的CSS Code的過程,就是CSS Hack。實例如下:

#test{
            width: 300px;
            height: 300px;

            background-color: blue;
            background-color: red\9; /*  all ie */
            background-color: yellow\0; /* ie8 */
            +background-color: pink; /* ie7 */
            _background-color: orange; /* ie6  */
            :root #test{
                background: 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 */
        }

    @media可以針對不同的媒體類型定義不同的樣式。特別是如果你需要設計響應式的頁面,@media是非常有用的。當你重置瀏覽器大小的過程中,頁面也會根據瀏覽器寬度和高度重新渲染頁面。

5.行內元素和塊級元素的具體區別是什么?行內元素的padding和margin可設置嗎?

   塊級元素(block)特性:

    總是獨占一行,表現為另起一行開始,而且其后的元素也必須另起一行顯示。

    width、height、padding(內邊距)、margin(外邊距)都可控制。

    內聯元素(inline)特性:

    寬度、高度、內邊距的padding-top/padding-bottom和外邊距的margin-top、margin-bottom都不可改變(也就是padding和margin的left和right是可以設置的)。

    這里還有其他問題。瀏覽器還有默認的天生inline-block元素(擁有內在尺寸,可設置高寬,但不會自動換行),有哪些元素是天生inline-block元素?

    它們是<input>、<img>、<button>、<textare>、<label> 。

6.rgba()和opacity的透明效果有什么區別?

    rgba()和opacity都能實現透明效果,但最大的不同是opacity作用於元素,以及元素內的所有內容的透明度,而rgba()只作用於元素的顏色或起背景色。設置rgba透明的元素的子元素不會繼承透明效果。

7.CSS中可以讓文字在垂直和水平方向重疊的兩個屬性分別是什么?

    垂直方向:line-height。設置成比字體高度還小就可以讓兩行重疊

    水平方向:letter-spacing。設置為負值即可實現重疊。

8.如何垂直居中一個浮動元素?

    下面代碼分別實現了已知元素高度、未知元素高度、圖片的垂直居中方法。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>垂直居中一個浮動元素</title>
    <style type="text/css">
        #div1 {
            background-color:#6699ff;
            width: 200px;
            height: 200px;

            position: absolute;
            top: 50%;
            left: 50%;
            margin-top: -100px;
            margin-left: -100px;
        }

        #div2{
            width: 200px;
            height: 200px;
            background-color: #6699ff;

            margin: auto;
            position: absolute;
            left: 0;
            top: 0;
            right: 0;
            bottom: 0;
        }

        #container{
            width: 600px;
            height: 600px;
            background: hotpink;

            display: table-cell;
            text-align: center;
            vertical-align: middle;
        }
    </style>
</head>
<body>
    <div style="background:hotpink; width: 600px; height: 600px; position: relative;">
        <div id="div1">
            方法一:已知元素的高寬
        </div>
    </div>
    <br>
    <div style="background:hotpink; width: 600px; height: 600px; position: relative;">
        <div id="div2">
            方法二:未知元素的高寬
        </div>
    </div>
    <br>
    <div id="container">
        <img width="200px" height="200px" src="assets/images/mug.jpg">
    </div>
</body>
</html>

9.px和em的區別

    px和em都是長度單位,區別是,px的值是固定的,指定是多少就是多少,計算比較容易。em的值不是固定的,並且em會繼承父級元素的字體大小。

    瀏覽器的默認字體高度都是16px。所以未經調整的瀏覽器都符合:1em=16px。那么12px=0.75em, 10px = 0.625em。

10.描述一個“reset”的css文件並如何使用它。知道normalize.css嗎?你了解他們的不同之處嗎?

    重置樣式非常多,凡是一個前端開發人員肯定會有一個常用的重置css文件並知道如何使用它們。他們是盲目的在做還是知道為什么這么做呢?原因是不同的瀏覽器對一些元素有不同的的默認樣式,如果你不處理,在不同瀏覽器下回存在必要的風險,或者更有戲劇性發生。

    你可能會用Normalize來代替你的重置樣式文件。它沒有重置所有的樣式風格,但僅提供一套合理的默認樣式值。既能夠讓眾多瀏覽器達到一致和合理,但不擾亂其他的東西(如粗體的標題)。

11.Sass、Less是什么?大家為什么要使用他們?

    他們是CSS預處理器。他是CSS上的一種抽象層。它們是一種特殊的語法、語言編譯成CSS。

    例如Less是一種動態樣式語言。將CSS賦予了動態語言的特性,如變量,繼承,運算,函數。Less即可以在客戶端上運行(支持IE6+,Webkit,Firefox),也可以在服務端運行(借助Node.js)。

    Sass變量必須是$開始,而Less變量必須使用@符號開始。

    為什么要使用它們?

    結構清晰,便於擴展。

    可以方便地屏蔽瀏覽器私有語法差異。這個不用多說,封裝對瀏覽器語法差異的重復處理,減少無異議的機械勞動。

    可以輕松實現多重繼承。

    完全兼容CSS代碼,可以方便地應用到老項目中。Less只是在CSS語法上做了擴展,所以老的CSS代碼也可以與Less代碼一同編譯。

12.display:none和visiblity:hidden的區別是什么?

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

    visiblity: 隱藏對應的元素並且擠占該元素原來的空間。

    即是,使用CSS display:none屬性后,HTML元素(對象)的寬度、高度等各種屬性都將“丟失”;而使用visibility:hidden屬性后,HTML元素(對象)僅僅是在視覺上看不見(完全透明),而它所占據的空間位置任然存在。

13.知道css有個content屬性嗎?有什么用?有什么應用?

    知道。CSS的content屬性專門應用在before/after偽元素上,用來插入生成內容。

    最常見的應用是利用偽類清除浮動:

CSS Code復制內容到剪貼板
//一種常見利用偽類清除浮動的代碼   
 .clearfix:after {   
    content:".";       //這里利用到了content屬性   
    display:block;    
    height:0;   
    visibility:hidden;    
    clear:both; }   
  
.clearfix {    
    *zoom:1;    
}

    after偽元素通過content在元素的后面生成一個點的塊級元素,再利用clear: both清除浮動。 

14.盒子模型在不同瀏覽器上的區別

    盒子模型是CSS中一個重要的概念,理解了盒子模型才能更好的排版。盒子模型有兩種,分別是IE盒子模型和標准W3C盒子模型。它們對盒子模型的解釋各不相同,先看看我們熟知的標准盒子模型:

image

    從上圖可以看到標准的w3c盒子模型的范圍包括margin、border、padding、content,並且content部分不包含其他部分。

   在來看下IE盒子模型:

    image

    從上圖可以看到IE盒子模型的范圍也包括margin、border、padding、content,和標准w3c盒子模型不同的是:ie盒子模型的content部分包含了border和padding。

   例如:

    一個盒子的margin為20px,border為1px,padding為10px,content的寬為200px、高為50px,加入用標准盒子模型解釋,那么這個盒子需要占據的位置為:

    寬:20*2 + 1 * 2 + 10* 2 + 200 = 262px, 高:20 * 2 + 1 * 2 + 10 * 2 + 50 = 112px。

    盒子的實際大小為:寬1*2 + 10 * 2 + 200 = 222px,高1* 2 + 10 * 2 + 50 = 72px。

    假如用IE盒子模型,那么盒子需要占據的位置為:

    寬:20 * 2 + 200 = 240px,高:20 * 2 + 50 = 70px。

    盒子的實際大小:寬200px,高50px。

    一般推薦使用W3C盒子模型,怎樣才算是選擇了標准W3C盒子模型呢?就是在網頁上加DOCKTYPE申明。如果不加,那么各個瀏覽器會根據自己的行為去理解網頁。

    CSS3增加了box-sizing屬性,值包括content-box|border-box|inherit。

    在我們的重置樣式文件中一般也會重置這個屬性,把box-sizing設置成border-box方便於排版。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM