css的繼承之width屬性(容易忽略)


眾所周知,css的三大特性分別是 繼承性,層疊性,和優先級

那么這里就詳細說一下css中width的繼承性及其特殊情況。

 

繼承性概念詳解:css的繼承性指的被包在內部的標簽擁有外部標簽的樣式性,子元素可以繼承父元素的屬性。但也不是所有的css屬性都有繼承性的。

  常見的擁有繼承性的屬性以 text- 、 font- 、line- 開頭的屬性較為常用。其中也有例外如a標簽的字體顏色是不繼承的,它有它自己的默認顏色-藍色,下划線等自帶樣式,h1~h6的字體大小是不繼承的,跟a標簽一樣都是有自帶默認值,除非單獨為其設置樣式 才可以改變。

 

下面就來詳細說一下width屬性的“繼承”關系。

大家在寫代碼過程中,是不是經常遇到 個一個父div設置了一個width值 如.father {width:200px}; 其子元素div只設置一個高度就會有寬高了。

正常場景下:

復制代碼
<style>
    .father {
        width:200px;
        height:200px;
        background-color:green;
    }
    .son {
        height:100px;
        background-color:red;
    }
</style>
<body>
    <div class="father">
        <div class="son"></div>
    </div>
</body>
復制代碼

效果圖:

 

特殊場景一:

那么如果子元素是一個內聯元素,或內聯塊元素呢?會是什么效果?

復制代碼
<style>
    .father {
        width:200px;
        height:200px;
        background-color:green;
    }
    .son {
        display:inline-block;
        height:100px;
        background-color:red;
    }
</style>
<body>
    <div class="father">
        <!-- <div class="son"></div> -->
        <a href="#" class="son"></a>
    </div>
</body>
復制代碼

 

你會發現只有一個綠色背景,紅色子元素並沒有顯示出來。這表明只有塊元素才可以默認“繼承”其父元素的width.(項目中就遇到一個類似的坑,所以寫此筆記記錄一下)。

 

特殊場景二:

如果子元素是定位元素或浮動元素,其“繼承性”還正常么?下面就用代碼實驗一下。

復制代碼
.father {
        width:200px;
        height:200px;
        background-color:green;
    }
    .son {
        /* position:absolute; */
        float:left;
        height:100px;
        background-color:red;
    }
</style>
<body>
    <div class="father">
        <!-- <div class="son"></div> -->
        <div class="son">我是子元素</div>
    </div>
</body>
復制代碼

實驗結果發現,.son的元素寬度只是其字撐開的那么寬,並沒有“繼承”其父元素的寬度。可見,浮動元素和定位元素也是不默認(不自動)“繼承”其父元素寬度的

 

當我們遇到這三種情況的時候,就需要為這些元素單獨設置一下width。width的單位有固定單位和相對單位,你可以把它設置稱一個固定值(200px),也可以把它設置為一個百分數(100%)。

那么問題又來了,百分數是一個相對單位,它的基准是什么呢?是相對於誰的百分比呢?

場景一中,其就是默認相對於其父元素.father的寬度。

場景二中,float的子元素其width 百分數也是始終相對於其父元素.father而言, 但定位的子元素就比較特殊了:

  position為absolute的子元素

  (1) 如果.father是一個static的元素,則.son的寬100%是基於body說的。跟body的寬度一樣大。

  (2) 但是如果.father也是一個定位的元素,設置了relative或absolut或fixed,則.son的width100%就是相對於.father而言的。否則就是相對於離其最近的一個擁有定位元素的父元素而言。

  position為fixed的子元素:

  其width的100%是相對於body而言。

  position為relative的子元素:

  不管直接其父元素是否為定位元素,其width100%始終是相對於其直接父元素而言的。

 

總結:

1.當符合css默認“繼承”的情況下(子元素必須是塊級元素且無定位或浮動),是不需要寫width屬性,就可以默認“繼承”的。

    否則就要特殊聲明一下width屬性。

2.當使用width:100%的時候 也要注意其基准點到底是誰:

(1)對於使用position:relative的子元素或浮動的子元素,其基准點始終是基於其直接父元素而言的,跟其父元素是否有定位無關。

(2)對於絕對定位position:absolute的子元素,其基准點是相對於離其最近的一層定位父元素而言。如果其所有父級元素均無定位,則是相對於body而言。

(3)對於使用position:fixed的子元素,其基准點就是body。跟父元素無關。

 

 

如果還有其他特殊情況,歡迎大家評論指出哦。我會再做補充上去。


免責聲明!

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



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