浮動+定位+BFC邊距合并


1.浮動元素有什么特征?對父容器、其他浮動元素、普通元素、文字分別有什么影響?

浮動元素

浮動元素是設置float為非none值的元素,這時該元素會自動被設置成塊元素,可以設置寬度、高度以及邊距。浮動元素,顧名思義,使該元素浮動在其他元素之上,離開了原來的文檔流,直到浮動到父元素的左右邊距(上下邊距不受限制)或者左、右方遇到其他設置了float的元素。而其附近設置的浮動元素會跟其邊距相鄰,表面上跟內聯元素似的。而非浮動元素則相對復雜一些,分一下兩種情況:浮動元素后邊的元素若是非浮動行內元素且因為定位產生重疊時,行內元素邊框、背景和內容都在該浮動元素“之上”顯示,若是非浮動塊級元素跟在浮動元素后邊且在定位后產生重疊時,該塊級元素邊框和背景在該浮動元素“之下”顯示,只有內容在浮動元素不在非浮動元素的部分顯示。

  • 浮動元素會脫離正常的文檔流,按照其外邊距指定的位置相對于它的上一個塊級元素(或父元素)顯示;
image.png
  • 浮動元素后面的塊級元素的內容會向此浮動元素的外邊距靠齊,但是邊框和背景卻忽略浮動元素而向上一個(實例中為父元素)任意非浮動元素靠齊;
image.png
  • 浮動元素后面的內聯元素會向此浮動元素的外邊距靠齊。
image.png
浮動元素的影響
  • 對其父元素的影響:
    • 對于其父元素來說,元素浮動之后,它脫離當前正常的文檔流,所以它也無法撐開其父元素,造成父元素的塌陷
  • 對其兄弟元素(非浮動)的影響
    • 如果兄弟元素為塊級元素,該元素會忽視浮動元素的而占據它的位置,并且元素會處在浮動元素的下層(并且無法通過z-index屬性改變他們的層疊位置),但它的內部文字和其他行內元素都會環繞浮動元素。
    • 如果如果兄弟元素為內聯元素,則元素會環繞浮動元素排列。
  • 對其兄弟元素(浮動)的影響
    • 同一個方向的浮動元素:當一個浮動元素在浮動過程中碰到同一個方向的浮動元素時,它會緊跟在它們后面。
    • 反方向的浮動元素:互不影響,位于同一條水平線上,當空間不夠時會被擠下。
  • 對子元素的影響
    • 當一個元素浮動時,在沒有清除浮動的情況下,它無法撐開其父元素,但它可以讓自己的浮動子元素撐開它自身,并且在沒有定義具體寬度情況下,使自身的寬度從100%變為自適應(浮動元素display:block)。其高度和寬度均為浮動元素高度、寬度和非浮動元素高度、寬度之間的最大值。

2.清除浮動指什么? 如何清除浮動? 兩種以上方法

浮動

浮動:一般是一個盒子里使用了CSS float浮動屬性,導致父級對象盒子不能被撐開
清除浮動的方法
  • 1.給浮動的元素的祖先元素加上高度
    • 只要浮動在一個有高度的盒子中,那么這個浮動就不會影響后面的浮動元素.所以就是清除浮動帶來的影響了。
  • 2.添加新的元素 、應用 clear:both
HTML:
<div class="outer">
    <div class="div1">1</div>
    <div class="div2">2</div>
    <div class="div3">3</div>
    <div class="clear"></div>
</div>

CSS:
.clear{clear:both; height: 0; line-height: 0; font-size: 0}
(糾正: padding不會受影響)
  • 3.父級div定義 overflow非 visible
 HTML:
<div class="outer over-flow"> //這里添加了一個class
    <div class="div1">1</div>
    <div class="div2">2</div>
    <div class="div3">3</div>
    <!--<div class="clear"></div>-->
</div>

CSS:
.over-flow{
    overflow: auto; zoom: 1; //zoom: 1; 是在處理兼容性問題
}
  • 4.:after 方法
.outer {
    zoom:1;
}    /*==for IE6/7 Maxthon2==*/
.outer :after {
    clear:both;
    content:'.';
    display:block;
    width: 0;height: 0;
    visibility:hidden;
}   /*==for FF/chrome/opera/IE8==*/

3.有幾種定位方式,分別是如何實現定位的,參考點是什么,使用場景是什么?

static(默認)

  • 當你沒有為一個元素(例如div)指定定位方式時,默認為static,也就是按照文檔的流式(flow)定位,將元素放到一個合適的地方。所以在不同的分辨率下,采用流式定位能很好的自適合,取得相對較好的布局效果。
  • 一般來說,我們不需要指明當前元素的定位方式是static——因為這是默認的定位方式。除非你想覆蓋從父元素繼承來的定位系統。

relative(相對定位)

  • 在static的基礎上,如果我想讓一個元素在他本來的位置做一些調整(位移),我們可以將該元素定位設置為relative,同時指定相對位移(利用top,bottom,left,right)。
  • 有一點需要注意的是,相對定位的元素仍然在文檔流中,仍然占據著他本來占據的位置空間——雖然他現在已經不在本來的位置了。

absolute(絕對定位)

  • 如果你想在一個文檔(Document)中將一個元素放至指定位置,你可以使用absolute來定位,將該元素的position設置為absolute,同時使用top,bottom,left,right來定位。
  • 絕對定位會使元素從文檔流中被刪除,結果就是該元素原本占據的空間被其它元素所填充。

fixed(固定定位)

  • 我們知道absolute定位的參照物是“上一個定位過的父元素(static不算)”,那么如果我想讓一個元素定位的參照物總是整個文檔(viewport),怎么辦呢?答案是使用fixed定位,fixed定位的參照物總是當前的文檔。利用fixed定位,我們很容易讓一個div定位在瀏覽器文檔的左上,右上等方位。比如你想添加一個信息提示的div,并將該div固定在右上方,你可以使用以下css
    .element { position:fixed; top:2%; right:2%; }

float(浮動)

mix relative and absolute(混合相對定位和絕對定位)

  • 如果對一個父元素設置relative,而對它的一個子元素設置absolute,則子元素的絕對定位的參照物為父元素。

reference


4.z-index 有什么作用? 如何使用?

z-index

  • z-index 屬性設置元素的堆疊順序。擁有更高堆疊順序的元素總是會處于堆疊順序較低的元素的前面。
z-index
  • 層級關系的比較
    • 對于同級元素,默認(或position:static)情況下文檔流后面的元素會覆蓋前面的。
    • 對于同級元素,position不為static且z-index存在的情況下z-index大的元素會覆蓋z-index小的元素,即z-index越大優先級越高。
    • IE6/7下position不為static,且z-index不存在時z-index為0,除此之外的瀏覽器z-index為auto。
    • z-index為auto的元素不參與層級關系的比較,由向上遍歷至此且z-index不為auto的元素來參與比較。
  • 順序規則
    • 如果不對節點設定 position 屬性,位于文檔流后面的節點會遮蓋前面的節點。
  • 定位規則
    • 如果將 position 設為 static,位于文檔流后面的節點依然會遮蓋前面的節點浮動,所以 position:static 不會影響節點的遮蓋關系。
    • 如果將 position 設為 relative (相對定位),absolute (絕對定位) 或者 fixed (固定定位),這樣的節點會覆蓋沒有設置 position 屬性或者屬性值為 static 的節點,說明前者比后者的默認層級高。
    • 在沒有 z-index 屬性干擾的情況下, 根據這順序規則和定位規則, 我們可以做出更加復雜的結構. 這里我們對 A 和 B 都不設定 position, 但對 A 的子節點 A-1 設定 position:relative. 根據順序規則, B 會覆蓋 A, 又根據定位規則 A' 會覆蓋 B.
html
<div id="a">
       <div id="a-1" style="position:relative;">A-1</div>
</div>
<div id="b">B</div>
image.png
  • 參與規則
    • 不用 position 屬性, 但為節點加上 z-index 屬性. 發現 z-index 對節點沒起作用. z-index 屬性僅在節點的 position 屬性為 relative, absolute 或者 fixed 時生效.
  • 默認值規則
    • 如果所有節點都定義了 position:relative. z-index 為 0 的節點與沒有定義 z-index 在同一層級內沒有高低之分; 但 z-index 大于等于 1 的節點會遮蓋沒有定義 z-index 的節點; z-index 的值為負數的節點將被沒有定義 z-index 的節點覆蓋.
  • 從父規則
    (1)如果 A, B 節點都定義了 position:relative, A 節點的 z-index 比 B 節點大, 那么 A 的子節點必定覆蓋在 B 的子節點前面.
<div id="a" style="position:relative;z-index:1;">
        <div id="a-1">A-1</div>
</div>
<div id="b" style="position:relative;z-index:0;">
        <div id="b-1">B-1</div>
</div>
image.png

(2)如果所有節點都定義了 position:relative, A 節點的 z-index 和 B 節點一樣大, 但因為順序規則, B 節點覆蓋在 A 節點前面. 就算 A 的子節點 z-index 值比 B 的子節點大, B 的子節點還是會覆蓋在 A 的子節點前面.

image.png

5.position:relative和負margin都可以使元素位置發生偏移?二者有什么區別

position:relative

  • 在static的基礎上,如果我想讓一個元素在他本來的位置做一些調整(位移),我們可以將該元素定位設置為relative,同時指定相對位移(利用top,bottom,left,right)。
  • 相對定位的元素仍然在文檔流中,仍然占據著他本來占據的位置空間——雖然他現在已經不在本來的位置了。

負margin

  • 使元素位置偏移,使元素在文檔流中的位置發生了改變,其后的元素受其影響。

6.BFC 是什么?如何生成 BFC?BFC 有什么作用?舉例說明

BFC--塊級格式化上下文

BFC--塊級格式化上下文


7.在什么場景下會出現外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個父子外邊距合并的范例

BFC--塊級格式化上下文

BFC--塊級格式化上下文

margin重疊 :

  • margin參數:上右下左(4個值),其他:四個邊距兩兩對稱,比如3個值時,分別對應上右下, 左邊邊距和右邊值一樣。

  • margin折疊結果:

    • 兩個相鄰的外邊距都是正數時,折疊結果是它們兩者之間較大的值。
    • 兩個相鄰的外邊距都是負數時,折疊結果是兩者絕對值的較大值。
    • 兩個外邊距一正一負時,折疊結果是兩者的相加的和。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.浮動元素有什么特征?對父容器、其他浮動元素、普通元素、文字分別有什么影響? 任何定義為float的元素,都可以...
    QQQQQCY閱讀 273評論 0 0
  • relative:生成相對定位的元素,通過top,bottom,left,right的位置相對于其正常位置進行定位...
    zx9426閱讀 965評論 0 2
  • 1.浮動元素有什么特征?對父容器、其他浮動元素、普通元素、文字分別有什么影響? 特征:浮動元素脫離普通文檔流,普通...
    山門龍龍閱讀 319評論 0 2
  • 浮動元素有什么特征?對父容器、其他浮動元素、普通元素、文字分別有什么影響? 特征: 脫離正常文檔流,沿其容器的左側...
    _Dot912閱讀 738評論 0 3
  • 1. 浮動元素有什么特征?對父容器、其他浮動元素、普通元素、文字分別有什么影響? 浮動元素的特征:CSS設計flo...
    饑人谷_邵征鵬閱讀 580評論 0 0